From 0f064ccba6691358e8e1c73e0c50f90601990a51 Mon Sep 17 00:00:00 2001 From: Yara Matkova Date: Thu, 4 Jul 2024 13:25:45 +0200 Subject: [PATCH 01/70] chore: update lint rules to make them more consistent --- .eslintrc | 38 ++++++++++++++++++++++---------------- 1 file changed, 22 insertions(+), 16 deletions(-) diff --git a/.eslintrc b/.eslintrc index ddfefbf..7b38aa4 100644 --- a/.eslintrc +++ b/.eslintrc @@ -13,7 +13,9 @@ "eslint:recommended", "plugin:flowtype/recommended" ], - "plugins": ["flowtype"], + "plugins": [ + "flowtype" + ], "globals": { "Promise": true, "__ADJUST__NAMESPACE": true, @@ -21,9 +23,10 @@ "Utils": true }, "rules": { - "semi": ["error", "never"], - "space-before-function-paren": ["error", "always"], - "quotes": ["error", "single"], + "quotes": [ + "error", + "single" + ], "prefer-arrow-callback": "error", "prefer-object-spread": "error", "flowtype/no-types-missing-file-annotation": "off" @@ -35,20 +38,17 @@ "plugin:@typescript-eslint/eslint-recommended", "plugin:@typescript-eslint/recommended" ], - "files": ["./src/**/*.ts"], + "files": [ + "./src/**/*.ts" + ], "parser": "@typescript-eslint/parser", "parserOptions": { "project": "./tsconfig.json" }, - "plugins": ["@typescript-eslint"], + "plugins": [ + "@typescript-eslint" + ], "rules": { - "semi": ["error", "never"], - "space-before-function-paren": ["error", { - "anonymous": "always", - "named": "never", - "asyncArrow": "always" - } - ], "eol-last": "error", "@typescript-eslint/ban-types": "warn", "@typescript-eslint/explicit-module-boundary-types": "off", @@ -56,12 +56,18 @@ } }, { - "extends": ["plugin:jest/style"], - "files": ["./src/**/*.spec.*"], + "extends": [ + "plugin:jest/style" + ], + "files": [ + "./src/**/*.spec.*" + ], "env": { "jest": true }, - "plugins": ["jest"], + "plugins": [ + "jest" + ], "rules": { "jest/prefer-to-have-length": "off", "jest/no-disabled-tests": "error", From 28bdeba2fcaca2c473a8bf51cdb4a8dc3143b79e Mon Sep 17 00:00:00 2001 From: Yara Matkova Date: Thu, 4 Jul 2024 13:25:45 +0200 Subject: [PATCH 02/70] refactor: remove outdated smart banners --- dist/adjust-latest.d.ts | 51 ---- src/demo/tabs/tabs.js | 45 ++- .../__tests__/smart-banner/detect-os.spec.ts | 42 --- .../smart-banner/network/api.spec.ts | 88 ------ .../network/url-startegy-network.spec.ts | 111 ------- .../url-strategy/blocked-url-bypass.spec.ts | 54 ---- .../network/url-strategy/custom-url.spec.ts | 18 -- .../url-strategy/data-residency.spec.ts | 38 --- .../url-strategy/url-strategy-factory.spec.ts | 81 ----- .../network/url-strategy/url-strategy.spec.ts | 114 ------- .../smart-banner/network/xhr-network.spec.ts | 86 ------ .../smart-banner/smart-banner.spec.ts | 282 ------------------ .../smart-banner/storage/factory.spec.ts | 31 -- .../storage/in-memory-storage.spec.ts | 42 --- .../storage/local-storage.spec.ts | 61 ---- .../__tests__/smart-banner/utilities.spec.ts | 25 -- src/sdk/main.js | 147 ++++----- src/sdk/smart-banner/api.ts | 80 ----- .../smart-banner/assets/styles.module.scss | 142 --------- src/sdk/smart-banner/assets/template.ts | 19 -- src/sdk/smart-banner/detect-os.ts | 40 --- src/sdk/smart-banner/network/errors.ts | 9 - src/sdk/smart-banner/network/network.ts | 20 -- .../network/url-startegy-network.ts | 58 ---- .../url-strategy/blocked-url-bypass.ts | 43 --- .../network/url-strategy/custom-url.ts | 14 - .../network/url-strategy/data-residency.ts | 24 -- .../url-strategy/url-strategy-factory.ts | 45 --- .../network/url-strategy/url-strategy.ts | 51 ---- src/sdk/smart-banner/network/xhr-network.ts | 78 ----- src/sdk/smart-banner/smart-banner.ts | 216 -------------- src/sdk/smart-banner/storage/factory.ts | 31 -- .../smart-banner/storage/in-memory-storage.ts | 17 -- src/sdk/smart-banner/storage/local-storage.ts | 19 -- src/sdk/smart-banner/storage/storage.ts | 5 - src/sdk/smart-banner/typings.d.ts | 4 - src/sdk/smart-banner/utilities.ts | 15 - src/sdk/smart-banner/view/app-icon.ts | 55 ---- .../smart-banner/view/smart-banner-view.ts | 75 ----- src/sdk/types.js | 188 ++++++------ src/snippet.js | 3 - 41 files changed, 164 insertions(+), 2403 deletions(-) delete mode 100644 src/sdk/__tests__/smart-banner/detect-os.spec.ts delete mode 100644 src/sdk/__tests__/smart-banner/network/api.spec.ts delete mode 100644 src/sdk/__tests__/smart-banner/network/url-startegy-network.spec.ts delete mode 100644 src/sdk/__tests__/smart-banner/network/url-strategy/blocked-url-bypass.spec.ts delete mode 100644 src/sdk/__tests__/smart-banner/network/url-strategy/custom-url.spec.ts delete mode 100644 src/sdk/__tests__/smart-banner/network/url-strategy/data-residency.spec.ts delete mode 100644 src/sdk/__tests__/smart-banner/network/url-strategy/url-strategy-factory.spec.ts delete mode 100644 src/sdk/__tests__/smart-banner/network/url-strategy/url-strategy.spec.ts delete mode 100644 src/sdk/__tests__/smart-banner/network/xhr-network.spec.ts delete mode 100644 src/sdk/__tests__/smart-banner/smart-banner.spec.ts delete mode 100644 src/sdk/__tests__/smart-banner/storage/factory.spec.ts delete mode 100644 src/sdk/__tests__/smart-banner/storage/in-memory-storage.spec.ts delete mode 100644 src/sdk/__tests__/smart-banner/storage/local-storage.spec.ts delete mode 100644 src/sdk/__tests__/smart-banner/utilities.spec.ts delete mode 100644 src/sdk/smart-banner/api.ts delete mode 100644 src/sdk/smart-banner/assets/styles.module.scss delete mode 100644 src/sdk/smart-banner/assets/template.ts delete mode 100644 src/sdk/smart-banner/detect-os.ts delete mode 100644 src/sdk/smart-banner/network/errors.ts delete mode 100644 src/sdk/smart-banner/network/network.ts delete mode 100644 src/sdk/smart-banner/network/url-startegy-network.ts delete mode 100644 src/sdk/smart-banner/network/url-strategy/blocked-url-bypass.ts delete mode 100644 src/sdk/smart-banner/network/url-strategy/custom-url.ts delete mode 100644 src/sdk/smart-banner/network/url-strategy/data-residency.ts delete mode 100644 src/sdk/smart-banner/network/url-strategy/url-strategy-factory.ts delete mode 100644 src/sdk/smart-banner/network/url-strategy/url-strategy.ts delete mode 100644 src/sdk/smart-banner/network/xhr-network.ts delete mode 100644 src/sdk/smart-banner/smart-banner.ts delete mode 100644 src/sdk/smart-banner/storage/factory.ts delete mode 100644 src/sdk/smart-banner/storage/in-memory-storage.ts delete mode 100644 src/sdk/smart-banner/storage/local-storage.ts delete mode 100644 src/sdk/smart-banner/storage/storage.ts delete mode 100644 src/sdk/smart-banner/typings.d.ts delete mode 100644 src/sdk/smart-banner/utilities.ts delete mode 100644 src/sdk/smart-banner/view/app-icon.ts delete mode 100644 src/sdk/smart-banner/view/smart-banner-view.ts diff --git a/dist/adjust-latest.d.ts b/dist/adjust-latest.d.ts index 2a29998..666e836 100644 --- a/dist/adjust-latest.d.ts +++ b/dist/adjust-latest.d.ts @@ -371,57 +371,6 @@ declare namespace Adjust { * manner as it does for GDPR Forget me. */ function disableThirdPartySharing(): void - - interface SmartBannerOptions { - - /** Web token to initialise Smart Banner */ - webToken: string; - - /** Optional. Logging level used by SDK instance. By default this param is set to `error`. We highly recommend that - * you use `verbose` when testing in order to see precise logs and to make sure integration is done properly. - * Here are more details about each log level: - * - `verbose` - will print detailed messages in case of certain actions - * - `info` - will print only basic info messages, warnings and errors - * - `warning` - will print only warning and error messages - * - `error` - will print only error message - * - `none` - won't print anything - */ - logLevel?: LogLevel; - - /** Optional. The data residency feature allows you to choose the country in which Adjust will store your data. This - * is useful if you are operating in a country with strict privacy requirements. When you set up data residency, - * Adjust will store your data in a data center located in the region your have chosen. */ - dataResidency?: 'EU' | 'TR' | 'US'; - - /** Optional. Callback which is called when SmartBanner view is created and shown. */ - onCreated?: () => any; - - /** Optional. Callback which is called when SmartBanner is being dismissed with a closing button on it. */ - onDismissed?: () => any; - } - - /** - * Initiate Smart Banner. - * - * This method gets Smart Banner data and creates Smart Banner UI. - * - * @param {SmartBannerOptions} options Options to initiate Smart Banner. - * - * @example - * Adjust.initSmartBanner({ - * webToken: 'YOUR_WEB_TOKEN', - * logLevel: 'verbose' - * }); - * - * @example - * Adjust.initSmartBanner({ - * webToken: 'YOUR_WEB_TOKEN', - * logLevel: 'error', - * dataResidency: 'EU', - * }); - */ - function initSmartBanner(options: SmartBannerOptions): void - } export default Adjust diff --git a/src/demo/tabs/tabs.js b/src/demo/tabs/tabs.js index 9535c9e..70e0e67 100644 --- a/src/demo/tabs/tabs.js +++ b/src/demo/tabs/tabs.js @@ -1,6 +1,6 @@ -import {hyphenToCamelCase} from '../utils' -import {getItem, setItem, clear} from '../storage' -import {write, clear as clearLog} from '../log' +import { hyphenToCamelCase } from '../utils' +import { getItem, setItem, clear } from '../storage' +import { write, clear as clearLog } from '../log' import Adjust from '../../sdk/main' const _ui = {} @@ -10,8 +10,8 @@ let _disabled = false let _defaultAppConfig = {} let _timeoutId = null -function init (defaultAppConfig) { - _defaultAppConfig = {...defaultAppConfig} +function init(defaultAppConfig) { + _defaultAppConfig = { ...defaultAppConfig } _ui.logTab = document.getElementById('log-tab') _ui.logTabContainer = document.getElementById('log-tab-container') @@ -37,7 +37,7 @@ function init (defaultAppConfig) { _ui.resetButton.addEventListener('click', _handleReset, false) } -function _handleTab (e) { +function _handleTab(e) { const key = hyphenToCamelCase(e.target.id) const tab = _ui[key] const container = _ui[key + 'Container'] @@ -55,22 +55,22 @@ function _handleTab (e) { _active.container = container } -function _getAppConfig (form) { +function _getAppConfig(form) { return Object.keys(form) .map(key => [key, form[key].value]) .filter(([, value]) => value) - .reduce((acc, [key, value]) => ({...acc, [key]: value}), {}) + .reduce((acc, [key, value]) => ({ ...acc, [key]: value }), {}) } -function _reflectConfigInForm (appConfig, form) { +function _reflectConfigInForm(appConfig, form) { Object.keys(form).map(key => form[key].value = appConfig[key] || '') } -function _handleClearLog () { +function _handleClearLog() { clearLog() } -function _handleSave (e) { +function _handleSave(e) { e.preventDefault() if (_disabled) { @@ -91,7 +91,7 @@ function _handleSave (e) { _ui.submitButton.classList.remove('loading') _ui.submitButton.disabled = false - _handleTab({target: {id: 'log-tab'}}) + _handleTab({ target: { id: 'log-tab' } }) Adjust.__testonly__.destroy() Adjust.initSdk({ ...appConfig, @@ -100,7 +100,7 @@ function _handleSave (e) { }) } -function _handleRestoreDefaultConfig () { +function _handleRestoreDefaultConfig() { if (_disabled) { return } @@ -111,7 +111,7 @@ function _handleRestoreDefaultConfig () { setItem('appConfig', null) - const appConfig = {..._defaultAppConfig} + const appConfig = { ..._defaultAppConfig } _reflectConfigInForm(appConfig, _form) _setJson(appConfig) @@ -124,7 +124,7 @@ function _handleRestoreDefaultConfig () { }) } -function _handleReset () { +function _handleReset() { if (_disabled) { return } @@ -151,25 +151,18 @@ function _handleReset () { }) } -function _handleAttributionChange (e, result) { +function _handleAttributionChange(e, result) { write('NEW ATTRIBUTION') write(JSON.stringify(result, undefined, 2)) } -function _prepareForm () { - const appConfig = getItem('appConfig') || {..._defaultAppConfig} +function _prepareForm() { + const appConfig = getItem('appConfig') || { ..._defaultAppConfig } Adjust.initSdk({ ...appConfig, attributionCallback: _handleAttributionChange }) - Adjust.initSmartBanner({ - ...appConfig, - webToken: 'p6o2pnb1zkzk', - logLevel: 'verbose', - onCreated: () => write('Hey, where is a Smart Banner!'), - onDismissed: () => write('Oh, you have dismissed the Smart Banner'), - }) _form.appToken = _ui.appConfigForm.querySelector('#app-token') _form.environment = _ui.appConfigForm.querySelector('#environment') @@ -186,7 +179,7 @@ function _prepareForm () { _setJson(appConfig) } -function _setJson (appConfig) { +function _setJson(appConfig) { _ui.appConfigJson.textContent = `Adjust.initSdk(${JSON.stringify(appConfig, undefined, 2)})` } diff --git a/src/sdk/__tests__/smart-banner/detect-os.spec.ts b/src/sdk/__tests__/smart-banner/detect-os.spec.ts deleted file mode 100644 index 8d0a80d..0000000 --- a/src/sdk/__tests__/smart-banner/detect-os.spec.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { getDeviceOS, DeviceOS } from '../../smart-banner/detect-os' - -describe('Returns recognizable device OS', () => { - afterAll(() => { - jest.restoreAllMocks() - }) - - function mockUserAgent(userAgent: string) { - Utils.setGlobalProp(global.navigator, 'userAgent') - jest.spyOn(global.navigator, 'userAgent', 'get').mockReturnValue(userAgent) - } - - const testSet: [string, DeviceOS | undefined][] = [ - [ - 'Mozilla/5.0 (Windows Mobile 10; Android 8.0.0; Microsoft; Lumia 950XL) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.92 Mobile Safari/537.36 Edge/40.15254.369', - DeviceOS.WindowsPhone - ], - [ - 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36', - DeviceOS.WindowsPC - ], - [ - 'Mozilla/5.0 (Linux; Android 10; SAMSUNG SM-G975U) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/11.1 Chrome/75.0.3770.143 Mobile Safari/537.36', - DeviceOS.Android - ], - [ - 'Mozilla/5.0 (iPad; CPU OS 12_4_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.1.2 Mobile/15E148 Safari/604.1', - DeviceOS.iOS - ], - [ - 'Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.8.0', - undefined - ], - ] - - - test.each(testSet)('getDeviceOS() for %s returns %s', (userAgent: string, expected: DeviceOS) => { - mockUserAgent(userAgent) - expect(getDeviceOS()).toEqual(expected) - }) - -}) diff --git a/src/sdk/__tests__/smart-banner/network/api.spec.ts b/src/sdk/__tests__/smart-banner/network/api.spec.ts deleted file mode 100644 index fb2000a..0000000 --- a/src/sdk/__tests__/smart-banner/network/api.spec.ts +++ /dev/null @@ -1,88 +0,0 @@ -import Logger from '../../../logger' -import { DeviceOS } from '../../../smart-banner/detect-os' -import { fetchSmartBannerData, Position } from '../../../smart-banner/api' -import { Network } from '../../../smart-banner/network/network' - -jest.mock('../../../logger') - -describe('Smart banner API tests', () => { - describe('fetchSmartBannerData', () => { - const webToken = 'abc123' - const platform = DeviceOS.iOS - - const serverResponseMock = { - platform: 'ios', - position: 'bottom', - tracker_token: 'none', - title: 'Run App Name', - description: 'You can run or install App Name', - button_label: 'Go!' - } - - const testNetwork: Network = { - endpoint: 'test-endpoint', - request: jest.fn() - } - - let requestSpy: jest.SpyInstance - - beforeAll(() => { - jest.spyOn(Logger, 'error') - - requestSpy = jest.spyOn(testNetwork, 'request') - }) - - afterEach(() => { - jest.clearAllMocks() - }) - - it('returns data when request is succesfull', async () => { - expect.assertions(2) - requestSpy.mockResolvedValueOnce([serverResponseMock]) - - const smartBannerData = await fetchSmartBannerData(webToken, platform, testNetwork) - - expect(smartBannerData).not.toBeNull() - expect(smartBannerData).toEqual({ - appId: '', - appName: '', - position: Position.Bottom, - header: serverResponseMock.title, - description: serverResponseMock.description, - buttonText: serverResponseMock.button_label, - trackerToken: serverResponseMock.tracker_token, - dismissInterval: 24 * 60 * 60 * 1000, // 1 day in millis before show banner next time - }) - }) - - it('returns null when no banners for platform', async () => { - expect.assertions(1) - requestSpy.mockResolvedValueOnce([{ ...serverResponseMock, platform: 'android' }]) - - const smartBannerData = await fetchSmartBannerData(webToken, platform, testNetwork) - - expect(smartBannerData).toBeNull() - }) - - it('returns null when response invalid', async () => { - expect.assertions(1) - requestSpy.mockResolvedValueOnce([{ ...serverResponseMock, title: '' }]) - - const smartBannerData = await fetchSmartBannerData(webToken, platform, testNetwork) - - expect(smartBannerData).toBeNull() - }) - - it('returns null when network error occurred', async () => { - expect.assertions(2) - - const error = { status: 404, message: 'Not found' } - requestSpy.mockRejectedValueOnce(error) - - const smartBannerData = await fetchSmartBannerData(webToken, platform, testNetwork) - - expect(smartBannerData).toBeNull() - expect(Logger.error).toHaveBeenCalledWith('Network error occurred during loading Smart Banner: ' + JSON.stringify(error)) - }) - }) -}) diff --git a/src/sdk/__tests__/smart-banner/network/url-startegy-network.spec.ts b/src/sdk/__tests__/smart-banner/network/url-startegy-network.spec.ts deleted file mode 100644 index 491f484..0000000 --- a/src/sdk/__tests__/smart-banner/network/url-startegy-network.spec.ts +++ /dev/null @@ -1,111 +0,0 @@ -import { Network } from '../../../smart-banner/network/network' -import { NetworkWithUrlStrategy } from '../../../smart-banner/network/url-startegy-network' -import { UrlStrategy } from '../../../smart-banner/network/url-strategy/url-strategy' -import { UrlStrategyFactory } from '../../../smart-banner/network/url-strategy/url-strategy-factory' - -jest.mock('../../../logger') - -describe('NetworkWithUrlStrategy', () => { - - const baseUrls = { - endpointName: 'test', - app: 'app.test', - gdpr: 'gdpr.test' - } - - const urlStrategyMock = new UrlStrategy(() => [baseUrls]) - - const networkMock: Network = { - endpoint: '', - request: (_: string, __?: Record) => Promise.resolve('all good') as any - } - - describe('instantiation', () => { - - beforeAll(() => { - jest.resetAllMocks() - jest.spyOn(UrlStrategyFactory, 'create').mockImplementation(() => urlStrategyMock) - }) - - afterEach(() => { - jest.clearAllMocks() - }) - - it('could be instantiated with provided UrlStrategy', () => { - const network = new NetworkWithUrlStrategy(networkMock, { urlStrategy: urlStrategyMock }) - - expect(UrlStrategyFactory.create).not.toHaveBeenCalled() - expect(network).toBeInstanceOf(NetworkWithUrlStrategy) - }) - - it('could be instantiated with UrlStrategyConfig', () => { - const urlStrategyConfig = {} - const network = new NetworkWithUrlStrategy(networkMock, { urlStrategyConfig }) - - expect(UrlStrategyFactory.create).toHaveBeenCalledWith(urlStrategyConfig) - expect(network).toBeInstanceOf(NetworkWithUrlStrategy) - }) - }) - - describe('request', () => { - beforeAll(() => { - jest.spyOn(networkMock, 'request') - jest.spyOn(urlStrategyMock, 'retries') - }) - - afterEach(() => { - jest.clearAllMocks() - }) - - it('sends request with inner Network instance and uses UrlStrategy retries', async () => { - expect.assertions(3) - - const network = new NetworkWithUrlStrategy(networkMock, { urlStrategy: urlStrategyMock }) - const result = await network.request('/whatever', { foo: 'bar', n: 42 }) - - expect(result).toBe('all good') - expect(urlStrategyMock.retries).toHaveBeenCalled() - expect(networkMock.request).toHaveBeenCalledWith('/whatever', { foo: 'bar', n: 42 }) - }) - }) - - describe('endpoint property', () => { - beforeAll(() => { - jest.spyOn(networkMock, 'request') - jest.spyOn(urlStrategyMock, 'retries') - }) - - afterEach(() => { - jest.clearAllMocks() - }) - - const defaultEndpoint = 'https://app.adjust.com' - - it('returns default endpoint before the first request', () => { - const network = new NetworkWithUrlStrategy(networkMock, { urlStrategy: urlStrategyMock }) - - expect(network.endpoint).toEqual(defaultEndpoint) - }) - - it('returns last endpoint after successful request', async () => { - const network = new NetworkWithUrlStrategy(networkMock, { urlStrategy: urlStrategyMock }) - - await network.request('/whatever') - - expect(network.endpoint).toEqual(baseUrls.app) - }) - - it('returns default endpoint after failed request', async () => { - const network = new NetworkWithUrlStrategy(networkMock, { urlStrategy: urlStrategyMock }) - jest.spyOn(networkMock, 'request').mockRejectedValueOnce('Error!') - - try { - await network.request('/whatever') - } catch (err) { - // nothing to do here - } - - expect(network.endpoint).toEqual(defaultEndpoint) - }) - }) -}) diff --git a/src/sdk/__tests__/smart-banner/network/url-strategy/blocked-url-bypass.spec.ts b/src/sdk/__tests__/smart-banner/network/url-strategy/blocked-url-bypass.spec.ts deleted file mode 100644 index 521aec6..0000000 --- a/src/sdk/__tests__/smart-banner/network/url-strategy/blocked-url-bypass.spec.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { BlockedUrlBypass } from '../../../../smart-banner/network/url-strategy/blocked-url-bypass' -import { BaseUrlsMap } from '../../../../smart-banner/network/url-strategy/url-strategy' - -describe('BlockedUrlBypass', () => { - const testEndpoints: Record = { - [BlockedUrlBypass.Default]: { - endpointName: BlockedUrlBypass.Default, - app: 'app', - gdpr: 'gdpr' - }, - [BlockedUrlBypass.India]: { - endpointName: 'Indian', - app: 'app.adjust.net.in', - gdpr: 'gdpr.adjust.net.in' - }, - [BlockedUrlBypass.China]: { - endpointName: 'Chinese', - app: 'app.adjust.world', - gdpr: 'gdpr.adjust.world' - } - } - - it.each([ - [BlockedUrlBypass.China, 2, [BlockedUrlBypass.Default]], - [BlockedUrlBypass.India, 2, [BlockedUrlBypass.Default]], - [BlockedUrlBypass.Default, 3, [BlockedUrlBypass.India, BlockedUrlBypass.China]], - ])('returns urls map array depending on strategy', (strategy: BlockedUrlBypass.Strategy, retriesNumber, nextEndpoints) => { - const resultingFn = BlockedUrlBypass.preferredUrlsGetter(strategy, testEndpoints) - - expect(resultingFn).toEqual(expect.any(Function)) - - const baseUrlsMap = resultingFn() - - expect(baseUrlsMap.length).toEqual(retriesNumber) - expect(baseUrlsMap[0]).toEqual(testEndpoints[strategy]) - - for (let i = 0; i < nextEndpoints.length; i++) { - expect(baseUrlsMap[i + 1]).toEqual(testEndpoints[nextEndpoints[i]]) - } - }) - - it('returns default strategy if option is undefined', () => { - const resultingFn = BlockedUrlBypass.preferredUrlsGetter(undefined, testEndpoints) - - expect(resultingFn).toEqual(expect.any(Function)) - - const baseUrlsMap = resultingFn() - - expect(baseUrlsMap.length).toBe(3) - expect(baseUrlsMap[0]).toEqual(testEndpoints[BlockedUrlBypass.Default]) - expect(baseUrlsMap[1]).toEqual(testEndpoints[BlockedUrlBypass.India]) - expect(baseUrlsMap[2]).toEqual(testEndpoints[BlockedUrlBypass.China]) - }) -}) diff --git a/src/sdk/__tests__/smart-banner/network/url-strategy/custom-url.spec.ts b/src/sdk/__tests__/smart-banner/network/url-strategy/custom-url.spec.ts deleted file mode 100644 index 678516a..0000000 --- a/src/sdk/__tests__/smart-banner/network/url-strategy/custom-url.spec.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { CustomUrl } from '../../../../smart-banner/network/url-strategy/custom-url' - -describe('CustomUrl', () => { - it('returns urls map with custom url', () => { - const url = 'custom.url' - - const expectedUrlMap = { - endpointName: `Custom (${url})`, - app: url, - gdpr: url - } - - const resultingFn = CustomUrl.preferredUrlsGetter(url) - - expect(resultingFn).toEqual(expect.any(Function)) - expect(resultingFn()).toEqual([expectedUrlMap]) - }) -}) diff --git a/src/sdk/__tests__/smart-banner/network/url-strategy/data-residency.spec.ts b/src/sdk/__tests__/smart-banner/network/url-strategy/data-residency.spec.ts deleted file mode 100644 index a7dc3fc..0000000 --- a/src/sdk/__tests__/smart-banner/network/url-strategy/data-residency.spec.ts +++ /dev/null @@ -1,38 +0,0 @@ -import { DataResidency } from '../../../../smart-banner/network/url-strategy/data-residency' -import { BaseUrlsMap } from '../../../../smart-banner/network/url-strategy/url-strategy' - -describe('DataResidency', () => { - - const testEndpoints: Record = { - [DataResidency.EU]: { - endpointName: 'EU', - app: 'app.eu', - gdpr: 'gdpr.eu' - }, - [DataResidency.TR]: { - endpointName: 'TR', - app: 'app.tr', - gdpr: 'gdpr.tr' - }, - [DataResidency.US]: { - endpointName: 'US', - app: 'app.us', - gdpr: 'gdpr.us' - } - } - - it.each([ - DataResidency.EU, - DataResidency.TR, - DataResidency.US - ])('returns urls map depending on region', (dataResidency: DataResidency.Region) => { - const resultingFn = DataResidency.preferredUrlsGetter(dataResidency, testEndpoints) - - expect(resultingFn).toEqual(expect.any(Function)) - - const baseUrlsMap = resultingFn() - - expect(baseUrlsMap.length).toBe(1) - expect(baseUrlsMap[0]).toEqual(testEndpoints[dataResidency]) - }) -}) diff --git a/src/sdk/__tests__/smart-banner/network/url-strategy/url-strategy-factory.spec.ts b/src/sdk/__tests__/smart-banner/network/url-strategy/url-strategy-factory.spec.ts deleted file mode 100644 index 7f0eeb9..0000000 --- a/src/sdk/__tests__/smart-banner/network/url-strategy/url-strategy-factory.spec.ts +++ /dev/null @@ -1,81 +0,0 @@ -import Logger from '../../../../logger' -import * as UrlStrategyModule from '../../../../smart-banner/network/url-strategy/url-strategy' -import { UrlStrategyFactory } from '../../../../smart-banner/network/url-strategy/url-strategy-factory' -import { BlockedUrlBypass } from '../../../../smart-banner/network/url-strategy//blocked-url-bypass' -import { CustomUrl } from '../../../../smart-banner/network/url-strategy//custom-url' -import { DataResidency } from '../../../../smart-banner/network/url-strategy//data-residency' - -jest.mock('../../../../logger') - -describe('UrlStrategyFactory', () => { - const urlStrategyConstructorMock = jest.fn() - - const urlsMap = { endpointName: 'foo.bar', app: 'app', gdpr: 'gdpr' } - - const customUrlMock = () => [urlsMap] - const dataResidencyMock = () => [urlsMap] - const blockedUrlBypassMock = () => [urlsMap] - - beforeAll(() => { - jest.spyOn(UrlStrategyModule, 'UrlStrategy').mockImplementation(urlStrategyConstructorMock) - jest.spyOn(CustomUrl, 'preferredUrlsGetter').mockImplementation(() => customUrlMock) - jest.spyOn(DataResidency, 'preferredUrlsGetter').mockImplementation(() => dataResidencyMock) - jest.spyOn(BlockedUrlBypass, 'preferredUrlsGetter').mockImplementation(() => blockedUrlBypassMock) - }) - - afterEach(() => { - jest.clearAllMocks() - }) - - it('creates CustomStrategy if customUrl is set in config', () => { - UrlStrategyFactory.create({ customUrl: 'custom.url' }) - - expect(CustomUrl.preferredUrlsGetter).toHaveBeenCalledWith('custom.url') - expect(urlStrategyConstructorMock).toHaveBeenCalledWith(customUrlMock) - }) - - it.each([ - DataResidency.EU, - DataResidency.TR, - DataResidency.US - ])('creates DataResidency if dataResidency is set in config', (region: DataResidency.Region) => { - UrlStrategyFactory.create({ dataResidency: region }) - - expect(DataResidency.preferredUrlsGetter).toHaveBeenCalledWith(region) - expect(urlStrategyConstructorMock).toHaveBeenCalledWith(dataResidencyMock) - }) - - it.each([ - BlockedUrlBypass.China, - BlockedUrlBypass.India - ])('creates BlockedUrlBypass if urlStrategy is set in config', (strategy: BlockedUrlBypass.Strategy) => { - UrlStrategyFactory.create({ urlStrategy: strategy }) - - expect(BlockedUrlBypass.preferredUrlsGetter).toHaveBeenCalledWith(strategy) - expect(urlStrategyConstructorMock).toHaveBeenCalledWith(blockedUrlBypassMock) - }) - - it('creates BlockedUrlBypass if config is empty', () => { - UrlStrategyFactory.create({}) - - expect(BlockedUrlBypass.preferredUrlsGetter).toHaveBeenCalled() - expect(urlStrategyConstructorMock).toHaveBeenCalledWith(blockedUrlBypassMock) - }) - - it.each([ - [BlockedUrlBypass.China, DataResidency.EU], - [BlockedUrlBypass.China, DataResidency.US], - [BlockedUrlBypass.China, DataResidency.TR], - [BlockedUrlBypass.India, DataResidency.EU], - [BlockedUrlBypass.India, DataResidency.US], - [BlockedUrlBypass.India, DataResidency.TR] - ])('prefers DataResidency and prints warning if both dataResidency and urlStartegy are set in config', (strategy, region) => { - jest.spyOn(Logger, 'warn') - - UrlStrategyFactory.create({ urlStrategy: strategy, dataResidency: region } as any) - - expect(DataResidency.preferredUrlsGetter).toHaveBeenCalledWith(region) - expect(urlStrategyConstructorMock).toHaveBeenCalledWith(dataResidencyMock) - expect(Logger.warn).toHaveBeenCalledWith('Both dataResidency and urlStrategy are set in config, urlStrategy will be ignored') - }) -}) diff --git a/src/sdk/__tests__/smart-banner/network/url-strategy/url-strategy.spec.ts b/src/sdk/__tests__/smart-banner/network/url-strategy/url-strategy.spec.ts deleted file mode 100644 index 2fc1231..0000000 --- a/src/sdk/__tests__/smart-banner/network/url-strategy/url-strategy.spec.ts +++ /dev/null @@ -1,114 +0,0 @@ -import Logger from '../../../../logger' -import { BaseUrlsMap, UrlStrategy } from '../../../../smart-banner/network/url-strategy/url-strategy' -import { NoConnectionError } from '../../../../smart-banner/network/errors' - -jest.mock('../../../../logger') - -describe('UrlStrategy', () => { - const urls: BaseUrlsMap[] = [{ - endpointName: 'foo', - app: 'foo', - gdpr: 'foo' - }, { - endpointName: 'bar', - app: 'bar', - gdpr: 'bar' - }] - - const preferredUrlsMock = jest.fn() - const testedUrlStrategy = new UrlStrategy(preferredUrlsMock) - const sendRequestMock = jest.fn() - - beforeAll(() => { - jest.spyOn(Logger, 'error') - jest.spyOn(Logger, 'log') - }) - - afterEach(() => { - jest.clearAllMocks() - }) - - describe('preferredUrls sanity check', () => { - it('throws error if there is no enpoint defined', async () => { - preferredUrlsMock.mockImplementation(() => undefined) - - expect.assertions(2) - - try { - await testedUrlStrategy.retries(sendRequestMock) - } catch (err) { - expect(err).toBe(UrlStrategy.NoPreferredUrlsDefinedError) - expect(Logger.error).toHaveBeenCalledWith(UrlStrategy.NoPreferredUrlsDefinedError.message) - } - }) - - it('throws error if array of endpoints is empty', async () => { - preferredUrlsMock.mockImplementation(() => []) - - expect.assertions(2) - - try { - await testedUrlStrategy.retries(sendRequestMock) - } catch (err) { - expect(err).toBe(UrlStrategy.NoPreferredUrlsDefinedError) - expect(Logger.error).toHaveBeenCalledWith(UrlStrategy.NoPreferredUrlsDefinedError.message) - } - }) - }) - - describe('retries functionality', () => { - beforeAll(() => { - preferredUrlsMock.mockImplementation(() => urls) - }) - - it('tries to reach next endpoint if could not connect', async () => { - sendRequestMock - .mockRejectedValueOnce(NoConnectionError) - .mockResolvedValueOnce('all good') - - expect.assertions(4) - - const result = await testedUrlStrategy.retries(sendRequestMock) - - expect(sendRequestMock).toHaveBeenCalledTimes(urls.length) - expect(Logger.log).toHaveBeenCalledWith(`Failed to connect ${urls[0].endpointName} endpoint`) - expect(Logger.log).toHaveBeenCalledWith(`Trying ${urls[1].endpointName} one`) - expect(result).toBe('all good') - }) - - it('re-throws if there is no available endpoint', async () => { - sendRequestMock.mockRejectedValue(NoConnectionError) - - expect.assertions(6) - - try { - await testedUrlStrategy.retries(sendRequestMock) - } - catch (err) { - expect(err).toEqual(NoConnectionError) - } - - expect(sendRequestMock).toHaveBeenCalledTimes(urls.length) - expect(Logger.log).toHaveBeenCalledWith(`Failed to connect ${urls[0].endpointName} endpoint`) - expect(Logger.log).toHaveBeenCalledWith(`Trying ${urls[1].endpointName} one`) - expect(Logger.log).toHaveBeenCalledWith(`Failed to connect ${urls[1].endpointName} endpoint`) - expect(testedUrlStrategy.retries).toThrow() - }) - - it('re-throws if other error occured', async () => { - sendRequestMock.mockRejectedValue({ status: 404, message: 'not found' }) - - expect.assertions(3) - - try { - await testedUrlStrategy.retries(sendRequestMock) - } - catch (err) { - expect(err).toEqual({ status: 404, message: 'not found' }) - } - - expect(sendRequestMock).toHaveBeenCalledTimes(1) - expect(testedUrlStrategy.retries).toThrow() - }) - }) -}) diff --git a/src/sdk/__tests__/smart-banner/network/xhr-network.spec.ts b/src/sdk/__tests__/smart-banner/network/xhr-network.spec.ts deleted file mode 100644 index 0247c30..0000000 --- a/src/sdk/__tests__/smart-banner/network/xhr-network.spec.ts +++ /dev/null @@ -1,86 +0,0 @@ -import { XhrNetwork } from '../../../smart-banner/network/xhr-network' -import { NoConnectionError } from '../../../smart-banner/network/errors' - -jest.mock('../../../logger') - -describe('XhrNetwork tests', () => { - const testEndpoint = 'test.test' - - const xhrMock: Partial = { - open: jest.fn(), - setRequestHeader: jest.fn(), - send: jest.fn(), - onerror: jest.fn(), - onreadystatechange: jest.fn() - } - - const testedNetwork = new XhrNetwork(testEndpoint) - - beforeAll(() => { - jest.spyOn(window, 'XMLHttpRequest').mockImplementation(() => xhrMock as XMLHttpRequest) - }) - - afterEach(() => { - jest.clearAllMocks() - }) - - describe('request method', () => { - it('sends request to path with encoded params', async () => { - expect.assertions(1) - - testedNetwork.request('/whatever', { foo: 'bar', n: 42 }) - - const expectedUrl = `${testEndpoint}/whatever?foo=bar&n=42` - - expect(xhrMock.open).toHaveBeenCalledWith('GET', expectedUrl) - }) - - it('sends request to path without params', async () => { - expect.assertions(1) - - testedNetwork.request('/whatever') - - const expectedUrl = `${testEndpoint}/whatever` - - expect(xhrMock.open).toHaveBeenCalledWith('GET', expectedUrl) - }) - - it('throws NoConnectionError if request failed due to network connection issue', async () => { - expect.assertions(1) - - jest.spyOn(xhrMock, 'send').mockImplementationOnce(() => { (xhrMock as any).onerror() }) - - try { - await testedNetwork.request('/whatever') - } catch (error) { - expect(error).toEqual(NoConnectionError) - } - }) - - it('throws an error if request failed', async () => { - expect.assertions(1) - - const err = { status: 400, message: 'Bad request' } - - jest.spyOn(xhrMock, 'send').mockImplementationOnce(() => { - const xhrFailedMock = xhrMock as any - xhrFailedMock.readyState = 4 - xhrFailedMock.status = err.status - xhrFailedMock.responseText = err.message - xhrFailedMock.onreadystatechange() - }) - - try { - await testedNetwork.request('/whatever') - } catch (error) { - expect(error).toEqual(err) - } - }) - }) - - describe('endpoint property', () => { - it('returns endpoint', () => { - expect(testedNetwork.endpoint).toEqual(testEndpoint) - }) - }) -}) diff --git a/src/sdk/__tests__/smart-banner/smart-banner.spec.ts b/src/sdk/__tests__/smart-banner/smart-banner.spec.ts deleted file mode 100644 index 018e4d9..0000000 --- a/src/sdk/__tests__/smart-banner/smart-banner.spec.ts +++ /dev/null @@ -1,282 +0,0 @@ -import Logger from '../../logger' -import * as Api from '../../smart-banner/api' -import * as DetectOS from '../../smart-banner/detect-os' -import { StorageFactory } from '../../smart-banner/storage/factory' -import { LocalStorage } from '../../smart-banner/storage/local-storage' -import { SmartBanner } from '../../smart-banner/smart-banner' - -jest.mock('../../logger') - -jest.useFakeTimers() - -const storage = new LocalStorage -jest.spyOn(StorageFactory, 'createStorage').mockImplementation(() => storage) - -describe('Smart Banner tests', () => { - const webToken = 'abc123' - const defaultDismissInterval = 60 * 60 * 1000 // 1 hour in millis - const platform = DetectOS.DeviceOS.iOS - const bannerData: Api.SmartBannerData = { - appId: 'none', - appName: 'Adjust Web SDK', - header: 'Adjust Smart Banners', - description: 'Not so smart actually, but deeplinks do the magic anyway', - buttonText: 'Let\'s go!', - dismissInterval: defaultDismissInterval, - position: Api.Position.Top, - trackerToken: 'abcd' - } - const onCreatedCallbackSpy = jest.fn() - const onDismissedCallbackSpy = jest.fn() - - let smartBanner - - beforeAll(() => { - jest.spyOn(document, 'createElement') - jest.spyOn(Logger, 'log') - jest.spyOn(Logger, 'error') - jest.spyOn(global, 'setTimeout') - - smartBanner = new SmartBanner({ webToken, onCreated: onCreatedCallbackSpy, onDismissed: onDismissedCallbackSpy }) - }) - - beforeEach(() => { - jest.spyOn(DetectOS, 'getDeviceOS').mockReturnValue(platform) - jest.spyOn(Api, 'fetchSmartBannerData').mockResolvedValue(bannerData) - }) - - afterEach(() => { - jest.clearAllMocks() - }) - - describe('initialisation', () => { - - afterEach(() => { - smartBanner.destroy() - }) - - it(('initialises and renders banner'), async () => { - expect.assertions(6) - - smartBanner.init(webToken) - await Utils.flushPromises() // resolves data fetch promise that allows initialisation to finish - - expect(Logger.log).toHaveBeenCalledWith('Creating Smart Banner') - expect(document.createElement).toHaveBeenCalled() - expect(smartBanner.banner).not.toBeNull() - expect(smartBanner.dismissButton).not.toBeNull() - expect(Logger.log).toHaveBeenCalledWith('Smart Banner created') - expect(onCreatedCallbackSpy).toHaveBeenCalled() - }) - - describe('can not call init repeatedly', () => { - it('initialisation in progress', async () => { - expect.assertions(2) - - smartBanner.init(webToken) // setup - - smartBanner.init(webToken) - - expect(Logger.error).toHaveBeenCalledWith('Smart Banner is initialising already') - - await Utils.flushPromises() // tear down - - expect(onCreatedCallbackSpy).toHaveBeenCalledTimes(1) - }) - - it('initialisation finished', async () => { - expect.assertions(2) - - smartBanner.init(webToken) // setup - await Utils.flushPromises() // allow initialisation to finish - - smartBanner.init(webToken) - - expect(Logger.error).toHaveBeenCalledWith('Smart Banner already exists') - expect(onCreatedCallbackSpy).toHaveBeenCalledTimes(1) - }) - }) - - it('logs message when no banner for platform', async () => { - jest.spyOn(Api, 'fetchSmartBannerData').mockResolvedValueOnce(null) - - expect.assertions(2) - - smartBanner.init(webToken) - await Utils.flushPromises() - - expect(Logger.log).toHaveBeenCalledWith(`No Smart Banners for ${platform} platform found`) - expect(onCreatedCallbackSpy).not.toHaveBeenCalled() - }) - - it('logs message when no target platform', () => { - jest.spyOn(DetectOS, 'getDeviceOS').mockReturnValueOnce(undefined) - - smartBanner.init(webToken) - - expect(Logger.log).toHaveBeenCalledWith('This platform is not one of the targeting ones, Smart Banner will not be shown') - expect(onCreatedCallbackSpy).not.toHaveBeenCalled() - }) - }) - - describe('hide and show', () => { - beforeAll(() => { - jest.spyOn(smartBanner, 'hide') - jest.spyOn(smartBanner, 'show') - }) - - describe('Smart Banner initialised', () => { - beforeEach(() => { - smartBanner.init(webToken) - return Utils.flushPromises() // resolves data fetch promise that allows initialisation to finish - .then(() => { - jest.spyOn(smartBanner.banner, 'hide') - jest.spyOn(smartBanner.banner, 'show') - }) - }) - - afterEach(() => { - smartBanner.destroy() - }) - - it('hides banner', () => { - smartBanner.hide() - - expect(smartBanner.banner.hide).toHaveBeenCalled() - }) - - it('shows banner', () => { - smartBanner.show() - - expect(smartBanner.banner.show).toHaveBeenCalled() - }) - }) - - describe('Smart Banner is still initialising', () => { - afterEach(() => { - smartBanner.destroy() - jest.clearAllMocks() - }) - - it('logs a message when hide called and hides after initialisation finished', async () => { - expect.assertions(3) - - smartBanner.init() - smartBanner.hide() - - expect(Logger.log).toHaveBeenCalledWith('Smart Banner will be hidden after initialisation finished') - - await Utils.flushPromises() // resolves data fetch promise that allows initialisation to finish - - expect(Logger.log).toHaveBeenCalledWith('Initialisation finished, hiding Smart Banner') - expect(smartBanner.hide).toHaveBeenCalledTimes(2) - }) - - it('logs a message when show called and shows after initialisation finished', async () => { - expect.assertions(3) - - smartBanner.init() - smartBanner.show() - - expect(Logger.log).toHaveBeenCalledWith('Smart Banner will be shown after initialisation finished') - - await Utils.flushPromises() // resolves data fetch promise that allows initialisation to finish - - expect(Logger.log).toHaveBeenCalledWith('Initialisation finished, showing Smart Banner') - expect(smartBanner.show).toHaveBeenCalledTimes(2) - }) - }) - - describe('Smart Banner was not initialised', () => { - it('logs an error when hide called', () => { - smartBanner.hide() - - expect(Logger.error).toHaveBeenCalledWith('There is no Smart Banner to hide, have you called initialisation?') - }) - - it('logs an error when show called', () => { - smartBanner.show() - - expect(Logger.error).toHaveBeenCalledWith('There is no Smart Banner to show, have you called initialisation?') - }) - }) - }) - - describe('dismiss', () => { - const now = Date.now() - - beforeAll(() => { - jest.spyOn(Date, 'now').mockReturnValue(now) - jest.spyOn(storage, 'setItem') - jest.spyOn(smartBanner, 'init') - jest.spyOn(smartBanner, 'destroy') - }) - - beforeEach(() => { - smartBanner.init() - return Utils.flushPromises() - .then(() => { - jest.clearAllMocks() - - smartBanner.dismiss(webToken, defaultDismissInterval) - }) - }) - - afterEach(() => { - localStorage.clear() - }) - - it('banner removed from DOM when dismissed', () => { - expect.assertions(8) - - expect(storage.setItem).toHaveBeenCalledWith(smartBanner.STORAGE_KEY_DISMISSED, now) // add timestamp in Local Storage - - expect(Logger.log).toHaveBeenCalledWith('Smart Banner dismissed') - expect(smartBanner.destroy).toHaveBeenCalled() - - expect(setTimeout).toHaveBeenCalledWith(expect.any(Function), defaultDismissInterval) // next initialisation scheduled - expect(Logger.log).toHaveBeenCalledWith('Smart Banner creation scheduled on ' + new Date(now + defaultDismissInterval)) - - expect(Logger.log).toHaveBeenCalledWith('Smart Banner removed') // banner removed from DOM - expect(smartBanner.banner).toBeNull() - - expect(onDismissedCallbackSpy).toHaveBeenCalled() - }) - - it('intialisation reschedules banner display when dismiss interval has not over', async () => { - expect.assertions(6) - - smartBanner.init(webToken) - await Utils.flushPromises() - - expect(Logger.log).toHaveBeenCalledWith('Smart Banner was dismissed') - expect(Logger.log).toHaveBeenCalledWith('Clearing previously scheduled creation of Smart Banner') - - expect(setTimeout).toHaveBeenCalledWith(expect.any(Function), defaultDismissInterval) // initialisation scheduled - expect(Logger.log).toHaveBeenCalledWith('Smart Banner creation scheduled on ' + new Date(now + defaultDismissInterval)) - - expect(onCreatedCallbackSpy).not.toHaveBeenCalled() - expect(onDismissedCallbackSpy).toHaveBeenCalledTimes(1) - }) - - it('banner is displayed again when dismiss interval is over', async () => { - expect.assertions(7) - - jest.spyOn(Date, 'now').mockReturnValue(now + defaultDismissInterval) - jest.advanceTimersByTime(defaultDismissInterval) - - expect(smartBanner.init).toHaveBeenCalled() - - await Utils.flushPromises() - - expect(Logger.log).toHaveBeenCalledWith('Creating Smart Banner') - expect(document.createElement).toHaveBeenCalled() - expect(smartBanner.banner).not.toBeNull() - expect(smartBanner.dismissButton).not.toBeNull() - expect(Logger.log).toHaveBeenCalledWith('Smart Banner created') - expect(onCreatedCallbackSpy).toHaveBeenCalled() - - smartBanner.destroy() - }) - }) -}) diff --git a/src/sdk/__tests__/smart-banner/storage/factory.spec.ts b/src/sdk/__tests__/smart-banner/storage/factory.spec.ts deleted file mode 100644 index 0f1b2fc..0000000 --- a/src/sdk/__tests__/smart-banner/storage/factory.spec.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { StorageFactory } from '../../../smart-banner/storage/factory' -import { LocalStorage } from '../../../smart-banner/storage/local-storage' -import { InMemoryStorage } from '../../../smart-banner/storage/in-memory-storage' - -jest.mock('../../../smart-banner/storage/local-storage') -jest.mock('../../../smart-banner/storage/in-memory-storage') - -describe('StorageFactory', () => { - - afterEach(() => { - jest.clearAllMocks() - }) - - it('creates LocalStorage by default', () => { - StorageFactory.createStorage() - - expect(LocalStorage).toHaveBeenCalledTimes(1) - expect(InMemoryStorage).not.toHaveBeenCalled() - }) - - it('creates InMemoryStorage if LocalStorage not supported', () => { - jest.spyOn(window, 'localStorage', 'get').mockImplementationOnce(() => { - throw new Error('EmulatedSecurityError') - }) - - StorageFactory.createStorage() - - expect(InMemoryStorage).toHaveBeenCalledTimes(1) - expect(LocalStorage).not.toHaveBeenCalled() - }) -}) diff --git a/src/sdk/__tests__/smart-banner/storage/in-memory-storage.spec.ts b/src/sdk/__tests__/smart-banner/storage/in-memory-storage.spec.ts deleted file mode 100644 index a62c72e..0000000 --- a/src/sdk/__tests__/smart-banner/storage/in-memory-storage.spec.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { InMemoryStorage } from '../../../smart-banner/storage/in-memory-storage' - -describe('In-memory storage', () => { - let storage: InMemoryStorage - - beforeEach(() => { - storage = new InMemoryStorage - }) - - const key = 'test' - const value = { data: 'test-data' } - - it('writes record', () => { - storage.setItem(key, value) - - expect(storage['items'][key]).toEqual(value) - }) - - it('reads stored record', () => { - storage['items'][key] = value - - const actual = storage.getItem(key) - - expect(actual).toEqual(value) - }) - - it('removes record', () => { - storage['items'][key] = value - - expect(storage.getItem(key)).toEqual(value) - - storage.removeItem(key) - - expect(storage['items'][key]).toBeUndefined() - }) - - it('returns null when no such record', () => { - const noExistentValue = storage.getItem(key) - - expect(noExistentValue).toBeNull() - }) -}) diff --git a/src/sdk/__tests__/smart-banner/storage/local-storage.spec.ts b/src/sdk/__tests__/smart-banner/storage/local-storage.spec.ts deleted file mode 100644 index 09e86bb..0000000 --- a/src/sdk/__tests__/smart-banner/storage/local-storage.spec.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { LocalStorage } from '../../../smart-banner/storage/local-storage' - -describe('Local storage', () => { - const storage = new LocalStorage - - beforeAll(() => { - jest.spyOn(localStorage, 'getItem') - jest.spyOn(localStorage, 'setItem') - jest.spyOn(localStorage, 'removeItem') - }) - - afterEach(() => { - localStorage.clear() - jest.clearAllMocks() - }) - - const key = 'test' - const value = { data: 'test-data' } - - const lsKey = `adjust-smart-banner.${key}` - const lsValue = JSON.stringify(value) - - it('writes record', () => { - storage.setItem(key, value) - - expect(localStorage.getItem(lsKey)).toEqual(lsValue) - }) - - it('reads stored record', () => { - localStorage.setItem(lsKey, lsValue) - - const actual = storage.getItem(key) - - expect(actual).toEqual(value) - expect(localStorage.getItem).toHaveBeenCalled() - }) - - it('removes record', () => { - localStorage.setItem(lsKey, lsValue) - - storage.removeItem(key) - - expect(localStorage.getItem(lsKey)).toBeNull() - expect(localStorage.removeItem).toHaveBeenCalled() - }) - - it('returns null when no such record', () => { - const noExistentValue = storage.getItem(key) - - expect(noExistentValue).toBeNull() - expect(localStorage.getItem).toHaveBeenCalled() - }) - - it('does not throw on invalid JSON', () => { - localStorage.setItem(lsKey, '{hello":"world"}') - - let invalidValue - expect(() => { invalidValue = storage.getItem(key) }).not.toThrow() - expect(invalidValue).toBeNull() - }) -}) diff --git a/src/sdk/__tests__/smart-banner/utilities.spec.ts b/src/sdk/__tests__/smart-banner/utilities.spec.ts deleted file mode 100644 index 761787d..0000000 --- a/src/sdk/__tests__/smart-banner/utilities.spec.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { parseJson } from '../../smart-banner/utilities' - -describe('Utilities tests', () => { - describe('parseJson', () => { - - it('returns parsed object for valid JSON string', () => { - const expectedObj = {key: 'value'} - const stringToParse = '{"key": "value"}' - - expect(parseJson(stringToParse)).toEqual(expectedObj) - }) - - it('returns null for invalid JSON string', () => { - const stringToParse = '{"key": "value}' - - expect(parseJson(stringToParse)).toBeNull() - }) - - it('returns null for no parameter or empty one passed', () => { - expect(parseJson(null)).toBeNull() - expect(parseJson(undefined)).toBeNull() - expect(parseJson('')).toBeNull() - }) - }) -}) diff --git a/src/sdk/main.js b/src/sdk/main.js index 3aba3e0..8eebdf2 100644 --- a/src/sdk/main.js +++ b/src/sdk/main.js @@ -6,38 +6,36 @@ import { type GlobalParamsT, type CustomErrorT, type ActivityStateMapT, - type SmartBannerOptionsT, type AttributionMapT } from './types' import Config from './config' import Storage from './storage/storage' import Logger from './logger' -import {run as queueRun, setOffline, clear as queueClear, destroy as queueDestroy} from './queue' -import {subscribe, unsubscribe, destroy as pubSubDestroy} from './pub-sub' -import {watch as sessionWatch, destroy as sessionDestroy} from './session' -import {start, clear as identityClear, destroy as identityDestroy} from './identity' -import {add, remove, removeAll, clear as globalParamsClear} from './global-params' -import {check as attributionCheck, destroy as attributionDestroy} from './attribution' -import {disable, restore, status} from './disable' -import {check as gdprForgetCheck, forget, disable as gdprDisable, finish as gdprDisableFinish, destroy as gdprForgetDestroy} from './gdpr-forget-device' -import {check as sharingDisableCheck, optOut as sharingOptOut, disable as sharingDisable, finish as sharingDisableFinish} from './third-party-sharing' -import {register as listenersRegister, destroy as listenersDestroy} from './listeners' -import {delay, flush, destroy as schedulerDestroy} from './scheduler' +import { run as queueRun, setOffline, clear as queueClear, destroy as queueDestroy } from './queue' +import { subscribe, unsubscribe, destroy as pubSubDestroy } from './pub-sub' +import { watch as sessionWatch, destroy as sessionDestroy } from './session' +import { start, clear as identityClear, destroy as identityDestroy } from './identity' +import { add, remove, removeAll, clear as globalParamsClear } from './global-params' +import { check as attributionCheck, destroy as attributionDestroy } from './attribution' +import { disable, restore, status } from './disable' +import { check as gdprForgetCheck, forget, disable as gdprDisable, finish as gdprDisableFinish, destroy as gdprForgetDestroy } from './gdpr-forget-device' +import { check as sharingDisableCheck, optOut as sharingOptOut, disable as sharingDisable, finish as sharingDisableFinish } from './third-party-sharing' +import { register as listenersRegister, destroy as listenersDestroy } from './listeners' +import { delay, flush, destroy as schedulerDestroy } from './scheduler' import event from './event' import sdkClick from './sdk-click' import ActivityState from './activity-state' import { STORAGE_TYPES } from './constants' -import { SmartBanner } from './smart-banner/smart-banner' -type InitConfigT = $ReadOnly<{|...InitOptionsT, ...LogOptionsT|}> +type InitConfigT = $ReadOnly<{|...InitOptionsT, ...LogOptionsT |}> -/** - * In-memory parameters to be used if restarting - * - * @type {Object} - * @private - */ -let _options: ?InitOptionsT = null + /** + * In-memory parameters to be used if restarting + * + * @type {Object} + * @private + */ + let _options: ? InitOptionsT = null /** * Flag to mark id sdk is in starting process @@ -63,13 +61,6 @@ let _isStarted: boolean = false */ let _isInstalled: boolean = false -/** - * SmartBanner instance - * - * @private - */ -let _smartBanner: ?SmartBanner = null - /** * Initiate the instance with parameters * @@ -77,7 +68,7 @@ let _smartBanner: ?SmartBanner = null * @param {string} logLevel * @param {string} logOutput */ -function initSdk ({logLevel, logOutput, ...options}: InitConfigT = {}): void { +function initSdk({ logLevel, logOutput, ...options }: InitConfigT = {}): void { Logger.setLogLevel(logLevel, logOutput) if (_isInitialised()) { @@ -112,7 +103,7 @@ function initSdk ({logLevel, logOutput, ...options}: InitConfigT = {}): void { * * @returns {AttributionMapT|undefined} current attribution information if available or `undefined` otherwise */ -function getAttribution (): ?AttributionMapT { +function getAttribution(): ?AttributionMapT { return _preCheck('get attribution', () => ActivityState.getAttribution()) } @@ -121,11 +112,11 @@ function getAttribution (): ?AttributionMapT { * * @returns {string|undefined} `web_uuid` if available or `undefined` otherwise */ -function getWebUUID (): ?string { +function getWebUUID(): ?string { return _preCheck('get web_uuid', () => ActivityState.getWebUUID()) } -function setReferrer (referrer: string) { +function setReferrer(referrer: string) { if (!referrer || typeof referrer !== 'string') { Logger.error('You must provide a string referrer') return @@ -143,7 +134,7 @@ function setReferrer (referrer: string) { * * @param {Object} params */ -function trackEvent (params: EventParamsT): Promise { +function trackEvent(params: EventParamsT): Promise { return _internalTrackEvent(params) } @@ -152,7 +143,7 @@ function trackEvent (params: EventParamsT): Promise { * * @param {Array} params */ -function addGlobalCallbackParameters (params: Array): void { +function addGlobalCallbackParameters(params: Array): void { _preCheck('add global callback parameters', () => add(params, 'callback')) } @@ -161,7 +152,7 @@ function addGlobalCallbackParameters (params: Array): void { * * @param {Array} params */ -function addGlobalPartnerParameters (params: Array): void { +function addGlobalPartnerParameters(params: Array): void { _preCheck('add global partner parameters', () => add(params, 'partner')) } @@ -170,7 +161,7 @@ function addGlobalPartnerParameters (params: Array): void { * * @param {string} key */ -function removeGlobalCallbackParameter (key: string): void { +function removeGlobalCallbackParameter(key: string): void { _preCheck('remove global callback parameter', () => remove(key, 'callback')) } @@ -179,42 +170,42 @@ function removeGlobalCallbackParameter (key: string): void { * * @param {string} key */ -function removeGlobalPartnerParameter (key: string): void { +function removeGlobalPartnerParameter(key: string): void { _preCheck('remove global partner parameter', () => remove(key, 'partner')) } /** * Remove all global callback parameters */ -function clearGlobalCallbackParameters (): void { +function clearGlobalCallbackParameters(): void { _preCheck('remove all global callback parameters', () => removeAll('callback')) } /** * Remove all global partner parameters */ -function clearGlobalPartnerParameters (): void { +function clearGlobalPartnerParameters(): void { _preCheck('remove all global partner parameters', () => removeAll('partner')) } /** * Switch offline mode */ -function switchToOfflineMode (): void { +function switchToOfflineMode(): void { _preCheck('set offline mode', () => setOffline(true)) } /** * Switch online mode */ -function switchBackToOnlineMode (): void { +function switchBackToOnlineMode(): void { _preCheck('set online mode', () => setOffline(false)) } /** * Stop SDK */ -function stop (): void { +function stop(): void { const done = disable() if (done && Config.isInitialised()) { @@ -225,7 +216,7 @@ function stop (): void { /** * Restart sdk if not GDPR forgotten */ -function restart (): void { +function restart(): void { const done = restore() if (done && _options) { @@ -236,7 +227,7 @@ function restart (): void { /** * Disable sdk and send GDPR-Forget-Me request */ -function gdprForgetMe (): void { +function gdprForgetMe(): void { let done = forget() if (!done) { @@ -253,45 +244,18 @@ function gdprForgetMe (): void { /** * Disable third party sharing */ -function disableThirdPartySharing (): void { +function disableThirdPartySharing(): void { _preCheck('disable third-party sharing', _handleDisableThirdPartySharing, { schedule: true }) } -function initSmartBanner (options: SmartBannerOptionsT): void { - if (_smartBanner) { - Logger.error('Smart Banner already initialised') - return - } - - _smartBanner = new SmartBanner(options) -} - -function showSmartBanner (): void { - if (!_smartBanner) { - Logger.error('Smart Banner is not initialised yet') - return - } - - _smartBanner.show() -} - -function hideSmartBanner (): void { - if (!_smartBanner) { - Logger.error('Smart Banner is not initialised yet') - return - } - - _smartBanner.hide() -} - /** * Handle third party sharing disable * * @private */ -function _handleDisableThirdPartySharing (): void { +function _handleDisableThirdPartySharing(): void { let done = sharingOptOut() if (!done) { @@ -306,7 +270,7 @@ function _handleDisableThirdPartySharing (): void { * * @private */ -function _handleGdprForgetMe (): void { +function _handleGdprForgetMe(): void { if (status() !== 'paused') { return } @@ -326,7 +290,7 @@ function _handleGdprForgetMe (): void { * * @private */ -function _isInitialised (): boolean { +function _isInitialised(): boolean { return _isInitialising || Config.isInitialised() } @@ -338,7 +302,7 @@ function _isInitialised (): boolean { * * @private */ -function _pause (): void { +function _pause(): void { _isInitialising = false _isStarted = false @@ -352,7 +316,7 @@ function _pause (): void { * Shutdown all dependencies * @private */ -function _shutdown (async): void { +function _shutdown(async): void { if (async) { Logger.log('Adjust SDK has been shutdown due to asynchronous disable') } @@ -371,7 +335,7 @@ function _shutdown (async): void { * * @private */ -function _destroy (): void { +function _destroy(): void { _isInstalled = false _shutdown() @@ -389,7 +353,7 @@ function _destroy (): void { * @returns {Promise|boolean} * @private */ -function _continue (activityState: ActivityStateMapT): Promise { +function _continue(activityState: ActivityStateMapT): Promise { Logger.log(`Adjust SDK is starting with web_uuid set to ${activityState.uuid}`) const isInstalled = ActivityState.current.installed @@ -405,19 +369,19 @@ function _continue (activityState: ActivityStateMapT): Promise { if (sdkStatus === 'off') { _shutdown() - return Promise.reject({interrupted: true, message: message('due to complete async disable')}) + return Promise.reject({ interrupted: true, message: message('due to complete async disable') }) } if (sdkStatus === 'paused') { _pause() - return Promise.reject({interrupted: true, message: message('due to partial async disable')}) + return Promise.reject({ interrupted: true, message: message('due to partial async disable') }) } if (_isStarted) { - return Promise.reject({interrupted: true, message: message('due to multiple synchronous start attempt')}) + return Promise.reject({ interrupted: true, message: message('due to multiple synchronous start attempt') }) } - queueRun({cleanUp: true}) + queueRun({ cleanUp: true }) return sessionWatch() .then(() => { @@ -434,7 +398,7 @@ function _continue (activityState: ActivityStateMapT): Promise { /** * Handles SDK installed and runs delayed tasks */ -function _handleSdkInstalled () { +function _handleSdkInstalled() { _isInstalled = true flush() @@ -448,7 +412,7 @@ function _handleSdkInstalled () { * @param {Object|Error} error * @private */ -function _error (error: CustomErrorT | Error) { +function _error(error: CustomErrorT | Error) { if (error.interrupted) { Logger.log(error.message) return @@ -483,7 +447,7 @@ function _error (error: CustomErrorT | Error) { * @param {Function=} options.attributionCallback * @private */ -function _start (options: InitOptionsT): void { +function _start(options: InitOptionsT): void { if (status() === 'off') { Logger.log('Adjust SDK is disabled, can not start the sdk') return @@ -509,7 +473,7 @@ function _start (options: InitOptionsT): void { .catch(_error) } -function _internalTrackEvent (params: EventParamsT) { +function _internalTrackEvent(params: EventParamsT) { if (Storage.getType() === STORAGE_TYPES.NO_STORAGE) { const reason = 'Adjust SDK can not track event, no storage available' Logger.log(reason) @@ -548,7 +512,7 @@ function _internalTrackEvent (params: EventParamsT) { * @param {boolean=false} schedule * @private */ -function _preCheck (description: string, callback: () => mixed, {schedule, waitForInitFinished, optionalInit}: {schedule?: boolean, waitForInitFinished?: boolean, optionalInit?: boolean} = {}): mixed { +function _preCheck(description: string, callback: () => mixed, { schedule, waitForInitFinished, optionalInit }: { schedule?: boolean, waitForInitFinished?: boolean, optionalInit?: boolean } = {}): mixed { if (Storage.getType() === STORAGE_TYPES.NO_STORAGE) { Logger.log(`Adjust SDK can not ${description}, no storage available`) return @@ -574,11 +538,11 @@ function _preCheck (description: string, callback: () => mixed, {schedule, waitF } } -function _clearDatabase () { +function _clearDatabase() { return Storage.deleteDatabase() } -function _restartAfterAsyncEnable () { +function _restartAfterAsyncEnable() { Logger.log('Adjust SDK has been restarted due to asynchronous enable') if (_options) { @@ -604,9 +568,6 @@ const Adjust = { restart, gdprForgetMe, disableThirdPartySharing, - initSmartBanner, - showSmartBanner, - hideSmartBanner, __testonly__: { destroy: _destroy, clearDatabase: _clearDatabase diff --git a/src/sdk/smart-banner/api.ts b/src/sdk/smart-banner/api.ts deleted file mode 100644 index 4fe0f93..0000000 --- a/src/sdk/smart-banner/api.ts +++ /dev/null @@ -1,80 +0,0 @@ -import Logger from '../logger' -import { DeviceOS } from './detect-os' -import { Network } from './network/network' - -export enum Position { - Top = 'top', - Bottom = 'bottom' -} - -export interface SmartBannerData { - appId: string; - appName: string; - position: Position; - imageUrl?: string; - header: string; - description: string; - buttonText: string; - dismissInterval: number; - trackerToken: string; - deeplinkPath?: string; -} - -interface SmartBannerResponse { - app: { - name: string; - default_store_app_id: string; - }; - platform: DeviceOS; - position: Position; - tracker_token: string; - deeplink_path: string; - title: string; - description: string; - button_label: string; - image_url?: string; -} - -/** - * Ensures response contains general info: title, description, button_label and tracker_token and converts response - * to SmartBannerData - */ -function validate(response: Partial): SmartBannerData | null { - const { title, description, button_label, tracker_token } = response - - if (title && description && button_label && tracker_token) { - return { - appId: response.app?.default_store_app_id || '', - appName: response.app?.name || '', - position: response.position || Position.Bottom, - imageUrl: response.image_url, - header: title, - description: description, - buttonText: button_label, - trackerToken: tracker_token, - deeplinkPath: response.deeplink_path, - dismissInterval: 24 * 60 * 60 * 1000, // 1 day in millis before show banner next time - } - } - - return null -} - -export function fetchSmartBannerData(webToken: string, deviceOs: DeviceOS, network: Network): Promise { - const path = '/smart_banner' - - return network.request[]>(path, { 'app_web_token': webToken }) - .then(banners => { - const banner = banners.find(item => item.platform === deviceOs) - - if (!banner) { - return null - } - - return validate(banner) - }) - .catch(error => { - Logger.error('Network error occurred during loading Smart Banner: ' + JSON.stringify(error)) - return null - }) -} diff --git a/src/sdk/smart-banner/assets/styles.module.scss b/src/sdk/smart-banner/assets/styles.module.scss deleted file mode 100644 index b0a4200..0000000 --- a/src/sdk/smart-banner/assets/styles.module.scss +++ /dev/null @@ -1,142 +0,0 @@ -$buttonColor: #6e7492; -$textColor: #353a52; -$shadowColor: #e0e2ec; -$fontsFamily: ArialMt, Arial, sans-serif; -$bannerMaxWidth: 428px; - -@function encodeColor($colour) { - @return "%23" + str-slice("#{$colour}", 2, -1); -} - -.bannerContainer { - height: 76px; - - @media (min-width: $bannerMaxWidth) { - & { - height: 0; - } - } -} - -.banner { - position: fixed; - left: 0; - right: 0; - z-index: 10000000; - - &.stickyToTop { - top: 0; - } - - &.stickyToBottom { - bottom: 0; - } - - .bannerBody { - margin: 0 auto; - max-width: $bannerMaxWidth; - background: white; - - .content { - display: flex; - align-items: center; - padding: 10px 8px 10px 4px; - - .dismiss { - width: 32px; - height: 32px; - border: none; - background: url("data:image/svg+xml;utf8,\ - \ - \ - \ - "); - background-repeat: no-repeat; - background-position: center center; - background-size: 8px 8px, auto; - cursor: pointer; - } - - .appIcon { - width: 56px; - height: 56px; - overflow: hidden; - background-color: $buttonColor; - border-radius: 8px; - - & .placeholder { - display: flex; - align-items: center; - justify-content: center; - width: 100%; - height: 100%; - color: $textColor; - font-weight: bold; - font-size: 23px; - font-family: $fontsFamily; - line-height: 32px; - background-color: $shadowColor; - } - - & .image { - width: 100%; - } - } - - .textContainer { - flex: 1 1 0%; - min-height: 0; - min-width: 0; - margin: 0 12px; - } - - .bannerText { - overflow: hidden; - text-overflow: ellipsis; - } - - h4 { - margin: 5px 0 8px; - color: $textColor; - font-family: Arial-BoldMT, $fontsFamily; - font-size: 12px; - font-weight: bold; - line-height: 16px; - white-space: nowrap; - } - - p { - margin: 8px 0 7px; - color: $textColor; - font-family: $fontsFamily; - font-size: 9px; - line-height: 11px; - max-height: 22px; - - // See https://css-tricks.com/line-clampin/ - display: -webkit-box; - -webkit-line-clamp: 2; - -webkit-box-orient: vertical; - } - - .action { - color: $buttonColor; - background: rgb(249, 250, 252); - border: 1px solid rgb(205, 208, 224); - border-radius: 4px; - border-color: $buttonColor; - box-shadow: inset 0px -1px 0px 0px $shadowColor; - padding: 4px 6.5px; - display: inline-block; - vertical-align: middle; - text-align: center; - font-family: $fontsFamily; - font-size: 12px; - font-weight: 500; - line-height: 16px; - cursor: pointer; - text-decoration: none; - } - } - } -} diff --git a/src/sdk/smart-banner/assets/template.ts b/src/sdk/smart-banner/assets/template.ts deleted file mode 100644 index 6ec8123..0000000 --- a/src/sdk/smart-banner/assets/template.ts +++ /dev/null @@ -1,19 +0,0 @@ -import styles from './styles.module.scss' - -export default (positionStyle: string, header: string, description: string, buttonText: string, href: string) => ` -
-
-
- -
-
- ${header} -
-
-

${header}

-

${description}

-
- ${buttonText} -
-
-
` diff --git a/src/sdk/smart-banner/detect-os.ts b/src/sdk/smart-banner/detect-os.ts deleted file mode 100644 index 9c42322..0000000 --- a/src/sdk/smart-banner/detect-os.ts +++ /dev/null @@ -1,40 +0,0 @@ -/** - * Operation systems - */ -export enum DeviceOS { - Android = 'android', - iOS = 'ios', - WindowsPC = 'windows', - WindowsPhone = 'windows-phone', -} - -/** - * Returns one of android, ios, windows, windows-phone or undefined for another OS. - */ -export function getDeviceOS(): Maybe { - const userAgent = navigator?.userAgent?.toLowerCase() - - if (!userAgent || userAgent.length < 1) { - return undefined - } - - if(/ipad|iphone|ipod/.test(userAgent)) { - return DeviceOS.iOS - } - - // Checking Windows first because Lumia devices could have for example - // "Mozilla/5.0 (Windows Mobile 10; Android 8.0.0; Microsoft; Lumia 950XL) ..." user agent - if (userAgent.includes('windows')) { - if (/phone|mobile/.test(userAgent)) { - return DeviceOS.WindowsPhone - } - - return DeviceOS.WindowsPC - } - - if (userAgent.includes('android')) { - return DeviceOS.Android - } - - return undefined -} diff --git a/src/sdk/smart-banner/network/errors.ts b/src/sdk/smart-banner/network/errors.ts deleted file mode 100644 index fca73b0..0000000 --- a/src/sdk/smart-banner/network/errors.ts +++ /dev/null @@ -1,9 +0,0 @@ -export interface NetworkError { - status: number; - message: string; -} - -export const NoConnectionError: NetworkError = { - status: 0, - message: 'No internet connectivity' -} diff --git a/src/sdk/smart-banner/network/network.ts b/src/sdk/smart-banner/network/network.ts deleted file mode 100644 index 0fff480..0000000 --- a/src/sdk/smart-banner/network/network.ts +++ /dev/null @@ -1,20 +0,0 @@ -export interface Network { - endpoint: string; - request: (path: string, params?: Record) => Promise; -} - -export class NetworkDecorator implements Network { - constructor(protected network: Network) { } - - public get endpoint(): string { - return this.network.endpoint - } - - public set endpoint(value: string) { - this.network.endpoint = value - } - - request(path: string, params?: Record): Promise { - return this.network.request(path, params) - } -} diff --git a/src/sdk/smart-banner/network/url-startegy-network.ts b/src/sdk/smart-banner/network/url-startegy-network.ts deleted file mode 100644 index e6f0a3a..0000000 --- a/src/sdk/smart-banner/network/url-startegy-network.ts +++ /dev/null @@ -1,58 +0,0 @@ -import { ENDPOINTS } from '../../constants' -import { NetworkDecorator, Network } from '../network/network' -import { UrlStrategy } from './url-strategy/url-strategy' -import { UrlStrategyFactory, UrlStrategyConfig } from './url-strategy/url-strategy-factory' -import { NetworkError } from './errors' - -export class NetworkWithUrlStrategy extends NetworkDecorator { - private static readonly DEFAULT_ENDPOINT = ENDPOINTS.default.app - private lastSuccessfulEndpoint: string | undefined - private urlStrategy: UrlStrategy - - constructor(network: Network, { urlStrategy, urlStrategyConfig }: NetworkWithUrlStrategy.UrlStrategyParameters) { - super(network) - - this.urlStrategy = urlStrategy || UrlStrategyFactory.create(urlStrategyConfig) - } - - /** - * Returns last succesfull endpoint or default (`https://app.adjust.com`) one - */ - public get endpoint(): string { - return this.lastSuccessfulEndpoint || NetworkWithUrlStrategy.DEFAULT_ENDPOINT - } - - /** - * Sends a request to provided path choosing origin with UrlStrategy and caches used origin if it was successfully - * reached - * - * @param path - * @param params non-encoded parameters of the request - */ - public request(path: string, params?: Record): Promise { - - return this.urlStrategy.retries((baseUrlsMap) => { - this.network.endpoint = baseUrlsMap.app - - return this.network.request(path, params) - .then((result: T) => { - this.lastSuccessfulEndpoint = baseUrlsMap.app - return result - }) - .catch((err: NetworkError) => { - this.lastSuccessfulEndpoint = undefined - throw err - }) - }) - } -} - -namespace NetworkWithUrlStrategy { - export type UrlStrategyParameters = { - urlStrategy: UrlStrategy; - urlStrategyConfig?: never; - } | { - urlStrategy?: never; - urlStrategyConfig: UrlStrategyConfig; - } -} diff --git a/src/sdk/smart-banner/network/url-strategy/blocked-url-bypass.ts b/src/sdk/smart-banner/network/url-strategy/blocked-url-bypass.ts deleted file mode 100644 index f432f57..0000000 --- a/src/sdk/smart-banner/network/url-strategy/blocked-url-bypass.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { BaseUrlsMap } from './url-strategy' -import { ENDPOINTS } from '../../../constants' - -export namespace BlockedUrlBypass { - export const Default = 'default' - export const India = 'india' - export const China = 'china' - - export type Strategy = typeof Default | typeof India | typeof China - - const endpoints: Record = { - [BlockedUrlBypass.Default]: ENDPOINTS.default, - [BlockedUrlBypass.India]: ENDPOINTS.india, - [BlockedUrlBypass.China]: ENDPOINTS.china, - } - - const getPreferredUrlsWithOption = (endpoints: Record, option?: BlockedUrlBypass.Strategy) => { - - if (option === BlockedUrlBypass.India) { - return [ - endpoints[BlockedUrlBypass.India], - endpoints[BlockedUrlBypass.Default] - ] - } - - if (option === BlockedUrlBypass.China) { - return [ - endpoints[BlockedUrlBypass.China], - endpoints[BlockedUrlBypass.Default] - ] - } - - return [ - endpoints[BlockedUrlBypass.Default], - endpoints[BlockedUrlBypass.India], - endpoints[BlockedUrlBypass.China] - ] - } - - export function preferredUrlsGetter(option?: BlockedUrlBypass.Strategy, endpointsMap: Record = endpoints) { - return () => getPreferredUrlsWithOption(endpointsMap, option) - } -} diff --git a/src/sdk/smart-banner/network/url-strategy/custom-url.ts b/src/sdk/smart-banner/network/url-strategy/custom-url.ts deleted file mode 100644 index abef7f8..0000000 --- a/src/sdk/smart-banner/network/url-strategy/custom-url.ts +++ /dev/null @@ -1,14 +0,0 @@ -export namespace CustomUrl { - const getPreferredUrlsWithOption = (customUrl: string) => { - - return [{ - endpointName: `Custom (${customUrl})`, - app: customUrl, - gdpr: customUrl - }] - } - - export function preferredUrlsGetter(customUrl: string) { - return () => getPreferredUrlsWithOption(customUrl) - } -} diff --git a/src/sdk/smart-banner/network/url-strategy/data-residency.ts b/src/sdk/smart-banner/network/url-strategy/data-residency.ts deleted file mode 100644 index 0ce3209..0000000 --- a/src/sdk/smart-banner/network/url-strategy/data-residency.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { BaseUrlsMap } from './url-strategy' -import { ENDPOINTS } from '../../../constants' - -export namespace DataResidency { - export const EU = 'EU' - export const TR = 'TR' - export const US = 'US' - - export type Region = typeof EU | typeof TR | typeof US - - const endpoints: Record = { - [DataResidency.EU]: ENDPOINTS.EU, - [DataResidency.TR]: ENDPOINTS.TR, - [DataResidency.US]: ENDPOINTS.US, - } - - const getPreferredUrlsWithOption = (endpoints: Record, option: DataResidency.Region) => { - return [endpoints[option]] - } - - export function preferredUrlsGetter(option: DataResidency.Region, endpointsMap: Record = endpoints) { - return () => getPreferredUrlsWithOption(endpointsMap, option) - } -} diff --git a/src/sdk/smart-banner/network/url-strategy/url-strategy-factory.ts b/src/sdk/smart-banner/network/url-strategy/url-strategy-factory.ts deleted file mode 100644 index 3815df8..0000000 --- a/src/sdk/smart-banner/network/url-strategy/url-strategy-factory.ts +++ /dev/null @@ -1,45 +0,0 @@ -import Logger from '../../../logger' -import { UrlStrategy } from './url-strategy' -import { BlockedUrlBypass } from './blocked-url-bypass' -import { CustomUrl } from './custom-url' -import { DataResidency } from './data-residency' - -export type UrlStrategyConfig = { - customUrl: string; - urlStrategy?: never; - dataResidency?: never; -} | { - customUrl?: never; - dataResidency: DataResidency.Region; - urlStrategy?: never; -} | { - customUrl?: never; - dataResidency?: never; - urlStrategy?: BlockedUrlBypass.Strategy; -} - -export namespace UrlStrategyFactory { - const incorrectOptionIgnoredMessage = (higherPriority: string, lowerPriority: string) => { - Logger.warn(`Both ${higherPriority} and ${lowerPriority} are set in config, ${lowerPriority} will be ignored`) - } - - export function create(config: UrlStrategyConfig): UrlStrategy { - const { customUrl, dataResidency, urlStrategy } = config - - if (customUrl) { - if (dataResidency || urlStrategy) { - incorrectOptionIgnoredMessage('customUrl', dataResidency ? 'dataResidency' : 'urlStrategy') - } - - return new UrlStrategy(CustomUrl.preferredUrlsGetter(customUrl)) - } else if (dataResidency) { - if (urlStrategy) { - incorrectOptionIgnoredMessage('dataResidency', 'urlStrategy') - } - - return new UrlStrategy(DataResidency.preferredUrlsGetter(dataResidency)) - } else { - return new UrlStrategy(BlockedUrlBypass.preferredUrlsGetter(urlStrategy)) - } - } -} diff --git a/src/sdk/smart-banner/network/url-strategy/url-strategy.ts b/src/sdk/smart-banner/network/url-strategy/url-strategy.ts deleted file mode 100644 index be109ec..0000000 --- a/src/sdk/smart-banner/network/url-strategy/url-strategy.ts +++ /dev/null @@ -1,51 +0,0 @@ -import Logger from '../../../logger' -import { NetworkError, NoConnectionError } from '../errors' - -export type BaseUrlsMap = { - endpointName: string; - app: string; - gdpr: string; -} - -export class UrlStrategy { - static NoPreferredUrlsDefinedError = new ReferenceError('UrlStrategy: No preferred URL defined') - - constructor(private preferredUrls: () => BaseUrlsMap[]) { } - - /** - * Gets the list of preferred endpoints and wraps `sendRequest` function with iterative retries until available - * endpoint found or another error occurred. - */ - public retries(sendRequest: (urls: BaseUrlsMap) => Promise): Promise { - let attempt = 0 - - const trySendRequest = (): Promise => { - const preferredUrls = this.preferredUrls() - - if (!preferredUrls || preferredUrls.length === 0) { - Logger.error(UrlStrategy.NoPreferredUrlsDefinedError.message) - throw UrlStrategy.NoPreferredUrlsDefinedError - } - - const urlsMap = preferredUrls[attempt++] - - return sendRequest(urlsMap) - .catch((reason: NetworkError) => { - if (reason === NoConnectionError) { - Logger.log(`Failed to connect ${urlsMap.endpointName} endpoint`) - - if (attempt < preferredUrls.length) { - Logger.log(`Trying ${preferredUrls[attempt].endpointName} one`) - - return trySendRequest() // Trying next endpoint - } - } - - // Another error occurred or we ran out of attempts, re-throw - throw reason - }) - } - - return trySendRequest() - } -} diff --git a/src/sdk/smart-banner/network/xhr-network.ts b/src/sdk/smart-banner/network/xhr-network.ts deleted file mode 100644 index e6b2a64..0000000 --- a/src/sdk/smart-banner/network/xhr-network.ts +++ /dev/null @@ -1,78 +0,0 @@ -import Globals from '../../globals' -import { Network } from './network' -import { parseJson } from '../utilities' -import { NetworkError, NoConnectionError } from './errors' - -type Primitive = string | number | boolean - -/** Sends HTTP GET request using XMLHttpRequest */ -export class XhrNetwork implements Network { - constructor(public origin?: string) { } - - public get endpoint(): string { - if (!this.origin) { - throw Error('XhrNetwork: Origin not defined') - } - - return this.origin - } - - public set endpoint(value: string) { - this.origin = value - } - - /** - * Creates an XMLHttpRequest object and sends a GET request with provided encoded URL - * @param url encoded URL - */ - private xhr(url: string): Promise { - return new Promise((resolve, reject: (err: NetworkError) => void) => { - const xhr = new XMLHttpRequest() - xhr.open('GET', url) - - const headers = [ - ['Client-SDK', `js${Globals.version}`], - ['Content-Type', 'application/json'] - ] - - headers.forEach(([key, value]) => { - xhr.setRequestHeader(key, value) - }) - - xhr.onerror = () => reject(NoConnectionError) - - xhr.onreadystatechange = () => { - if (xhr.readyState !== 4) { - return - } - - const okStatus = xhr.status >= 200 && xhr.status < 300 - const json = parseJson(xhr.responseText) - - if (xhr.status === 0) { - reject(NoConnectionError) - } else { - if (okStatus) { - resolve(json) - } else { - reject({ status: xhr.status, message: json || xhr.responseText || '' }) - } - } - } - - xhr.send() - }) - } - - private encodeParams(params: Record): string { - return Object.keys(params) - .map(key => [encodeURIComponent(key), encodeURIComponent(params[key])].join('=')) - .join('&') - } - - public request(path: string, params?: Record): Promise { - const encodedParams = params ? `?${this.encodeParams(params)}` : '' - - return this.xhr(`${this.endpoint}${path}${encodedParams}`) - } -} diff --git a/src/sdk/smart-banner/smart-banner.ts b/src/sdk/smart-banner/smart-banner.ts deleted file mode 100644 index 922f8be..0000000 --- a/src/sdk/smart-banner/smart-banner.ts +++ /dev/null @@ -1,216 +0,0 @@ -import Logger from '../logger' -import { getDeviceOS } from './detect-os' -import { Storage, StorageFactory } from './storage/factory' -import { fetchSmartBannerData, SmartBannerData } from './api' -import { SmartBannerView } from './view/smart-banner-view' -import { Network } from './network/network' -import { XhrNetwork } from './network/xhr-network' -import { NetworkWithUrlStrategy } from './network/url-startegy-network' -import { DataResidency } from './network/url-strategy/data-residency' - -type LogLevel = 'none' | 'error' | 'warning' | 'info' | 'verbose' - -type Callback = () => any; - -interface SmartBannerOptions { - webToken: string; - logLevel?: LogLevel; - dataResidency?: DataResidency.Region; - onCreated?: Callback; - onDismissed?: Callback; -} - -/** - * Adjust Web SDK Smart Banner - */ -export class SmartBanner { - private readonly STORAGE_KEY_DISMISSED = 'closed' - private network: Network - private storage: Storage - private timer: ReturnType | null = null - private dataFetchPromise: Promise | null - private banner: SmartBannerView | null - private onCreated?: Callback - private onDismissed?: Callback - - constructor({ webToken, logLevel = 'error', dataResidency, onCreated, onDismissed }: SmartBannerOptions, network?: Network) { - this.onCreated = onCreated - this.onDismissed = onDismissed - - Logger.setLogLevel(logLevel) - - const config = dataResidency ? { dataResidency } : {} - this.network = network || new NetworkWithUrlStrategy(new XhrNetwork(), { urlStrategyConfig: config }) - - this.storage = StorageFactory.createStorage() - - this.init(webToken) - } - - /** - * Initiate Smart Banner - * - * @param webToken token used to get data from backend - */ - init(webToken: string) { - if (this.banner) { - Logger.error('Smart Banner already exists') - return - } - - if (this.dataFetchPromise) { - Logger.error('Smart Banner is initialising already') - return - } - - const deviceOs = getDeviceOS() - if (!deviceOs) { - Logger.log('This platform is not one of the targeting ones, Smart Banner will not be shown') - return - } - - this.dataFetchPromise = fetchSmartBannerData(webToken, deviceOs, this.network) - - this.dataFetchPromise.then(bannerData => { - this.dataFetchPromise = null - - if (!bannerData) { - Logger.log(`No Smart Banners for ${deviceOs} platform found`) - return - } - - const whenToShow = this.getDateToShowAgain(bannerData.dismissInterval) - if (Date.now() < whenToShow) { - Logger.log('Smart Banner was dismissed') - this.scheduleCreation(webToken, whenToShow) - return - } - - Logger.log('Creating Smart Banner') - - this.banner = new SmartBannerView( - bannerData, - () => this.dismiss(webToken, bannerData.dismissInterval), - this.network.endpoint - ) - - Logger.log('Smart Banner created') - - if (this.onCreated) { - this.onCreated() - } - }) - } - - /** - * Show Smart Banner - */ - show(): void { - if (this.banner) { - this.banner.show() - return - } - - if (this.dataFetchPromise) { - Logger.log('Smart Banner will be shown after initialisation finished') - - this.dataFetchPromise - .then(() => { - Logger.log('Initialisation finished, showing Smart Banner') - this.show() - }) - - return - } - - Logger.error('There is no Smart Banner to show, have you called initialisation?') - } - - /** - * Hide Smart Banner - */ - hide(): void { - if (this.banner) { - this.banner.hide() - return - } - - if (this.dataFetchPromise) { - Logger.log('Smart Banner will be hidden after initialisation finished') - - this.dataFetchPromise - .then(() => { - Logger.log('Initialisation finished, hiding Smart Banner') - this.hide() - }) - - return - } - - Logger.error('There is no Smart Banner to hide, have you called initialisation?') - } - - /** - * Removes Smart Banner from DOM - */ - private destroy() { - if (this.banner) { - this.banner.destroy() - this.banner = null - Logger.log('Smart Banner removed') - } else { - Logger.error('There is no Smart Banner to remove') - } - } - - /** - * Schedules next Smart Banner show and removes banner from DOM - */ - private dismiss(webToken: string, dismissInterval: number) { - Logger.log('Smart Banner dismissed') - - this.storage.setItem(this.STORAGE_KEY_DISMISSED, Date.now()) - const whenToShow = this.getDateToShowAgain(dismissInterval) - this.scheduleCreation(webToken, whenToShow) - - this.destroy() - - if (this.onDismissed) { - this.onDismissed() - } - } - - /** - * Sets a timeout to schedule next Smart Banner show - */ - private scheduleCreation(webToken: string, when: number) { - if (this.timer) { - Logger.log('Clearing previously scheduled creation of Smart Banner') - clearTimeout(this.timer) - this.timer = null - } - - const delay = when - Date.now() - this.timer = setTimeout( - () => { - this.timer = null - this.init(webToken) - }, - delay) - - Logger.log('Smart Banner creation scheduled on ' + new Date(when)) - } - - /** - * Returns date when Smart Banner should be shown again - */ - private getDateToShowAgain(dismissInterval: number): number { - const dismissedDate = this.storage.getItem(this.STORAGE_KEY_DISMISSED) - - if (!dismissedDate || typeof dismissedDate !== 'number') { - return Date.now() - } - - return dismissedDate + dismissInterval - } -} diff --git a/src/sdk/smart-banner/storage/factory.ts b/src/sdk/smart-banner/storage/factory.ts deleted file mode 100644 index 0cdfe8c..0000000 --- a/src/sdk/smart-banner/storage/factory.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { LocalStorage } from './local-storage' -import { InMemoryStorage } from './in-memory-storage' -import { Storage } from './storage' - -class StorageFactory { - private static isLocalStorageSupported(): boolean { - try { - const uid = (new Date).toString() - const storage = window.localStorage - storage.setItem(uid, uid) - const result = storage.getItem(uid) === uid - storage.removeItem(uid) - const support = !!(result && storage) - - return support - - } catch (e) { - return false - } - } - - public static createStorage(): Storage { - if (this.isLocalStorageSupported()) { - return new LocalStorage() - } - - return new InMemoryStorage() - } -} - -export { Storage, StorageFactory } diff --git a/src/sdk/smart-banner/storage/in-memory-storage.ts b/src/sdk/smart-banner/storage/in-memory-storage.ts deleted file mode 100644 index 5ef85ae..0000000 --- a/src/sdk/smart-banner/storage/in-memory-storage.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { Storage } from './storage' - -export class InMemoryStorage implements Storage { - private items: Record = {} - - public setItem(key: string, value: any): void { - this.items[key] = value - } - - public getItem(key: string): any | null { - return Object.prototype.hasOwnProperty.call(this.items, key) ? this.items[key] : null - } - - public removeItem(key: string): void { - delete this.items[key] - } -} diff --git a/src/sdk/smart-banner/storage/local-storage.ts b/src/sdk/smart-banner/storage/local-storage.ts deleted file mode 100644 index 94609f9..0000000 --- a/src/sdk/smart-banner/storage/local-storage.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { parseJson } from '../utilities' -import { Storage } from './storage' - -export class LocalStorage implements Storage { - constructor(private storageName: string = 'adjust-smart-banner') {} - - setItem(key: string, value: any): void { - localStorage.setItem(`${this.storageName}.${key}`, JSON.stringify(value)) - } - - getItem(key: string): any | null { - const value = localStorage.getItem(`${this.storageName}.${key}`) - return parseJson(value) - } - - removeItem(key: string): void { - localStorage.removeItem(`${this.storageName}.${key}`) - } -} diff --git a/src/sdk/smart-banner/storage/storage.ts b/src/sdk/smart-banner/storage/storage.ts deleted file mode 100644 index 48f9d21..0000000 --- a/src/sdk/smart-banner/storage/storage.ts +++ /dev/null @@ -1,5 +0,0 @@ -export interface Storage { - setItem(key: string, value: any): void; - getItem(key: string): any | null; - removeItem(key: string): void; -} diff --git a/src/sdk/smart-banner/typings.d.ts b/src/sdk/smart-banner/typings.d.ts deleted file mode 100644 index f8e975f..0000000 --- a/src/sdk/smart-banner/typings.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -declare module '*.scss' { - const content: Record - export default content -} diff --git a/src/sdk/smart-banner/utilities.ts b/src/sdk/smart-banner/utilities.ts deleted file mode 100644 index c40f0e5..0000000 --- a/src/sdk/smart-banner/utilities.ts +++ /dev/null @@ -1,15 +0,0 @@ -/** - * Wraps JSON.parse() with try-catch. - * Returns parsed object if successfully parsed and null otherwise. - */ -export function parseJson(str?: string | null): any { - if (!str) { - return null - } - - try { - return JSON.parse(str) - } catch (error) { - return null - } -} diff --git a/src/sdk/smart-banner/view/app-icon.ts b/src/sdk/smart-banner/view/app-icon.ts deleted file mode 100644 index 6ef1cac..0000000 --- a/src/sdk/smart-banner/view/app-icon.ts +++ /dev/null @@ -1,55 +0,0 @@ -import { SmartBannerData } from '../api' - -type AppIconData = Pick - -export class AppIcon { - private appTraceUrl = (appId: string) => `https://www.apptrace.com/api/app/${appId}/artwork_url_small` - - private appName: string - - private image: HTMLImageElement - private placeholder: HTMLElement - - constructor(bannerData: AppIconData, image: HTMLImageElement, placeholder: HTMLElement) { - this.image = image - this.placeholder = placeholder - this.appName = bannerData.appName - - const sources = this.getSources(bannerData) - this.showImage(sources) - } - - private getSources(bannerData: AppIconData): string[] { - const sourcesArray: string[] = [] - - if (bannerData.imageUrl) { - sourcesArray.push(bannerData.imageUrl) - } - sourcesArray.push(this.appTraceUrl(bannerData.appId)) - - return sourcesArray - } - - private showImage(sources: string[]): Promise { - const imageLoadingPromise = sources.reduce((acc, url) => { - return acc.catch(() => this.loadImage(url, this.image)) - }, Promise.reject()) - - return imageLoadingPromise - .then(() => { - this.placeholder.remove() - }) - .catch(() => { - this.image.remove() - this.placeholder.innerText = this.appName.length ? this.appName[0].toUpperCase() : '' - }) - } - - private loadImage(url: string, image: HTMLImageElement) { - return new Promise((resolve, reject) => { - image.onload = resolve - image.onerror = reject - image.src = url - }) - } -} diff --git a/src/sdk/smart-banner/view/smart-banner-view.ts b/src/sdk/smart-banner/view/smart-banner-view.ts deleted file mode 100644 index a1609be..0000000 --- a/src/sdk/smart-banner/view/smart-banner-view.ts +++ /dev/null @@ -1,75 +0,0 @@ -import styles from '../assets/styles.module.scss' -import render from '../assets/template' -import { Position, SmartBannerData } from '../api' -import { AppIcon } from './app-icon' - -export class SmartBannerView { - private parent: HTMLElement = document.body - private banner: HTMLElement - private dismissButton: Element | null = null - - private onDismiss: (() => void) - - constructor(data: SmartBannerData, onDismiss: () => void, endpoint: string) { - this.onDismiss = onDismiss - - this.render(data, endpoint) - } - - private render(bannerData: SmartBannerData, endpoint: string) { - this.banner = document.createElement('div') - this.banner.setAttribute('class', styles.bannerContainer) - - const positionStyle = bannerData.position === Position.Top ? styles.stickyToTop : styles.stickyToBottom - const query = bannerData.deeplinkPath ? `?deeplink=${encodeURIComponent(bannerData.deeplinkPath)}` : '' - const href = `${endpoint}/${bannerData.trackerToken}${query}` - this.banner.innerHTML = render(positionStyle, bannerData.header, bannerData.description, bannerData.buttonText, href) - - if (bannerData.position === Position.Top) { - this.parent.insertBefore(this.banner, this.parent.firstChild) - } else { - this.parent.appendChild(this.banner) - } - - this.dismissButton = this.getElemByClass(styles.dismiss) - if (this.dismissButton) { - this.dismissButton.addEventListener('click', this.onDismiss) - } - - const appIconPlaceholder = this.getElemByClass(styles.placeholder) - const appIconImage = this.getElemByClass(styles.image) - - if (appIconImage && appIconPlaceholder) { - new AppIcon(bannerData, appIconImage, appIconPlaceholder) - } - } - - public show() { - this.banner.hidden = false - } - - public hide() { - this.banner.hidden = true - } - - public destroy() { - this.removeDismissButtonHandler() - this.banner.remove() - } - - private removeDismissButtonHandler() { - if (this.dismissButton && this.onDismiss) { - this.dismissButton.removeEventListener('click', this.onDismiss) - this.dismissButton = null - } - } - - private getElemByClass(classNames: string): T | null { - if (this.banner) { - const elements = this.banner.getElementsByClassName(classNames) - return elements.length > 0 ? elements[0] as T : null - } - - return null - } -} diff --git a/src/sdk/types.js b/src/sdk/types.js index 0ce6d6f..253c30b 100644 --- a/src/sdk/types.js +++ b/src/sdk/types.js @@ -14,59 +14,59 @@ export type DocumentT = Document & { export type AttributionMapT = $ReadOnly<{| adid: string, - tracker_token: string, - tracker_name: string, - network?: string, - campaign?: string, - adgroup?: string, - creative?: string, - click_label?: string, - state: string -|}> + tracker_token: string, + tracker_name: string, + network ?: string, + campaign ?: string, + adgroup ?: string, + creative ?: string, + click_label ?: string, + state: string + |}> export type AttributionWhiteListT = $ReadOnlyArray<$Keys> export type ActivityStateMapT = $Shape<{| uuid: string, - lastActive: number, - lastInterval: number, - timeSpent: number, - sessionWindow: number, - sessionLength: number, - sessionCount: number, - eventCount: number, - installed: boolean, - attribution: AttributionMapT -|}> + lastActive: number, + lastInterval: number, + timeSpent: number, + sessionWindow: number, + sessionLength: number, + sessionCount: number, + eventCount: number, + installed: boolean, + attribution: AttributionMapT + |}> export type CommonRequestParams = {| - timeSpent: $PropertyType, - sessionLength: $PropertyType, - sessionCount: $PropertyType, - lastInterval: $PropertyType, - eventCount?: $PropertyType + timeSpent: $PropertyType < ActivityStateMapT, 'timeSpent' >, + sessionLength: $PropertyType < ActivityStateMapT, 'sessionLength' >, + sessionCount: $PropertyType < ActivityStateMapT, 'sessionCount' >, + lastInterval: $PropertyType < ActivityStateMapT, 'lastInterval' >, + eventCount ?: $PropertyType < ActivityStateMapT, 'eventCount' > |} -export type GlobalKeyValueParamsT = {[key: string]: string} +export type GlobalKeyValueParamsT = { [key: string]: string } export type EventRequestParamsT = {| eventToken: string, - revenue?: string, - currency?: string, - callbackParams?: ?GlobalKeyValueParamsT, - partnerParams?: ?GlobalKeyValueParamsT -|} + revenue ?: string, + currency ?: string, + callbackParams ?: ? GlobalKeyValueParamsT, + partnerParams ?: ? GlobalKeyValueParamsT + |} export type SessionRequestParamsT = {| callbackParams?: ?GlobalKeyValueParamsT, - partnerParams?: ?GlobalKeyValueParamsT -|} + partnerParams ?: ? GlobalKeyValueParamsT + |} export type SdkClickRequestParamsT = {| clickTime: string, - source: string, - referrer: string -|} + source: string, + referrer: string + |} export type WaitT = number @@ -76,34 +76,34 @@ export type MethodT = 'GET' | 'POST' | 'PUT' | 'DELETE' export type RequestParamsT = $Shape<{| createdAt?: string, - initiatedBy?: 'sdk' | 'backend', + initiatedBy ?: 'sdk' | 'backend', ...SessionRequestParamsT, ...EventRequestParamsT, ...SdkClickRequestParamsT, ...CommonRequestParams -|}> + |}> export type HttpRequestParamsT = $ReadOnly<{| - endpoint: string, - url: UrlT, - method?: MethodT, - params: $ReadOnly<{| - attempts: number, + endpoint: string, + url: UrlT, + method ?: MethodT, + params: $ReadOnly < {| + attempts: number, ...RequestParamsT |}> |}> export type HttpSuccessResponseT = $ReadOnly<{| - status: 'success', - adid: string, - timestamp: string, - continue_in?: number, - retry_in?: number, - ask_in?: number, - tracking_state?: number, - attribution?: AttributionMapT, - message?: string -|}> + status: 'success', + adid: string, + timestamp: string, + continue_in ?: number, + retry_in ?: number, + ask_in ?: number, + tracking_state ?: number, + attribution ?: AttributionMapT, + message ?: string + |}> export type ErrorCodeT = 'TRANSACTION_ERROR' | @@ -116,11 +116,11 @@ export type ErrorCodeT = export type HttpErrorResponseT = $ReadOnly<{| status: 'error', - action: 'CONTINUE' | 'RETRY', - response: {[string]: string} | string, - message: string, - code: ErrorCodeT -|}> + action: 'CONTINUE' | 'RETRY', + response: { [string]: string } | string, + message: string, + code: ErrorCodeT + |}> export type HttpFinishCbT = () => void @@ -130,14 +130,14 @@ export type HttpContinueCbT = (HttpSuccessResponseT | HttpErrorResponseT, HttpFi export type AttributionStateT = {| state: 'same' | 'changed' | 'unknown' -|} + |} export type BackOffStrategyT = 'long' | 'short' | 'test' export type GlobalParamsT = {| key: string, - value: string -|} + value: string + |} export type GlobalParamsMapT = { callbackParams: Array, @@ -146,11 +146,11 @@ export type GlobalParamsMapT = { export type EventParamsT = {| eventToken: string, - revenue?: number, - currency?: string, - deduplicationId?: string, - callbackParams?: Array, - partnerParams?: Array + revenue ?: number, + currency ?: string, + deduplicationId ?: string, + callbackParams ?: Array < GlobalParamsT >, + partnerParams ?: Array < GlobalParamsT > |} export type BaseParamsT = $ReadOnly<$Shape<{ @@ -170,21 +170,21 @@ export type CustomConfigT = $ReadOnly<$Shape<{ export type LogOptionsT = $ReadOnly<$Shape<{| logLevel: 'none' | 'error' | 'warning' | 'info' | 'verbose', - logOutput: string -|}>> + logOutput: string + |}>> export type InitOptionsT = $ReadOnly<$Shape<{| - appToken: $PropertyType, - environment: $PropertyType, - defaultTracker: $PropertyType, - externalDeviceId: $PropertyType, - customUrl: $PropertyType, - dataResidency: $PropertyType, - urlStrategy: $PropertyType, - eventDeduplicationListLimit: $PropertyType, - namespace: $PropertyType, - attributionCallback: (string, Object) => mixed -|}>> + appToken: $PropertyType < BaseParamsT, 'appToken' >, + environment: $PropertyType < BaseParamsT, 'environment' >, + defaultTracker: $PropertyType < BaseParamsT, 'defaultTracker' >, + externalDeviceId: $PropertyType < BaseParamsT, 'externalDeviceId' >, + customUrl: $PropertyType < CustomConfigT, 'customUrl' >, + dataResidency: $PropertyType < CustomConfigT, 'dataResidency' >, + urlStrategy: $PropertyType < CustomConfigT, 'urlStrategy' >, + eventDeduplicationListLimit: $PropertyType < CustomConfigT, 'eventDeduplicationListLimit' >, + namespace: $PropertyType < CustomConfigT, 'namespace' >, + attributionCallback: (string, Object) => mixed + |}>> export type BaseParamsListT = $ReadOnlyArray<$Keys> @@ -194,48 +194,42 @@ export type CustomConfigListT = $ReadOnlyArray<$Keys> export type CustomErrorT = {| name: string, - message: string, - interrupted?: boolean -|} + message: string, + interrupted ?: boolean + |} export type CreatedAtT = {| createdAt: string -|} + |} export type SentAtT = {| sentAt: string -|} + |} export type WebUuidT = {| webUuid: string -|} + |} export type TrackEnabledT = {| trackingEnabled?: boolean -|} + |} export type PlatformT = {| platform: string -|} + |} export type LanguageT = {| language: string, - country?: string -|} + country ?: string + |} export type MachineTypeT = {| machineType?: string -|} + |} export type QueueSizeT = {| queueSize: number -|} - -export type SmartBannerOptionsT = {| - webToken: string, - logLevel: 'none' | 'error' | 'warning' | 'info' | 'verbose', - dataResidency: 'EU' | 'TR' | 'US', -|} + |} export type DefaultParamsT = {| ...CreatedAtT, @@ -246,5 +240,5 @@ export type DefaultParamsT = {| ...LanguageT, ...MachineTypeT, ...QueueSizeT -|} + |} diff --git a/src/snippet.js b/src/snippet.js index 5de7077..8a56251 100644 --- a/src/snippet.js +++ b/src/snippet.js @@ -53,9 +53,6 @@ 'restart', 'gdprForgetMe', 'disableThirdPartySharing', - 'initSmartBanner', - 'showSmartBanner', - 'hideSmartBanner', ], function (context, queue, methodName) { context[methodName] = function () { From 3b1d1e19ef07103a1e99d485b220fa861e7cb1d1 Mon Sep 17 00:00:00 2001 From: Yara Matkova Date: Thu, 4 Jul 2024 13:25:45 +0200 Subject: [PATCH 03/70] docs: draft CHANGELOG --- CHANGELOG.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e216da0..d52fa80 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,15 @@ +### Version 5.7.0 (SOME_DAY May 2024) +#### Added + + +#### Fixed + + +#### Changed +- Outdated Smart Banners removed + +--- + ### Version 5.6.0 (30th January 2023) #### Added - Added a return of Promise from `trackEvent` method. From f89d8289e9f315ee2e374548a99a2af894961997 Mon Sep 17 00:00:00 2001 From: Yara Matkova Date: Thu, 4 Jul 2024 13:25:45 +0200 Subject: [PATCH 04/70] build: remove scss modules --- package-lock.json | 224 +++++++++++++++++++---------------------- package.json | 1 - webpack.demo.config.js | 14 --- webpack.sdk.config.js | 14 --- 4 files changed, 101 insertions(+), 152 deletions(-) diff --git a/package-lock.json b/package-lock.json index fff0489..4fc6342 100644 --- a/package-lock.json +++ b/package-lock.json @@ -50,7 +50,6 @@ "regenerator-runtime": "^0.13.10", "sass": "^1.56.1", "sass-loader": "^13.2.0", - "style-loader": "^3.3.1", "template-ejs-loader": "^0.9.4", "terser": "^5.15.1", "terser-webpack-plugin": "^5.3.6", @@ -4970,19 +4969,19 @@ } }, "node_modules/css-loader": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.7.1.tgz", - "integrity": "sha512-yB5CNFa14MbPJcomwNh3wLThtkZgcNyI2bNMRt8iE5Z8Vwl7f8vQXFAzn2HDOJvtDq2NTZBUGMSUNNyrv3/+cw==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.11.0.tgz", + "integrity": "sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==", "dev": true, "dependencies": { "icss-utils": "^5.1.0", - "postcss": "^8.4.7", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.0", - "postcss-modules-scope": "^3.0.0", + "postcss": "^8.4.33", + "postcss-modules-extract-imports": "^3.1.0", + "postcss-modules-local-by-default": "^4.0.5", + "postcss-modules-scope": "^3.2.0", "postcss-modules-values": "^4.0.0", "postcss-value-parser": "^4.2.0", - "semver": "^7.3.5" + "semver": "^7.5.4" }, "engines": { "node": ">= 12.13.0" @@ -4992,13 +4991,22 @@ "url": "https://opencollective.com/webpack" }, "peerDependencies": { + "@rspack/core": "0.x || 1.x", "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } } }, "node_modules/css-loader/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -7721,9 +7729,9 @@ } }, "node_modules/immutable": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz", - "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==", + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.5.tgz", + "integrity": "sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw==", "dev": true }, "node_modules/import-fresh": { @@ -10365,15 +10373,6 @@ "node": ">=6" } }, - "node_modules/klona": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz", - "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, "node_modules/leven": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", @@ -10756,10 +10755,16 @@ } }, "node_modules/nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -11360,9 +11365,9 @@ } }, "node_modules/postcss": { - "version": "8.4.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.18.tgz", - "integrity": "sha512-Wi8mWhncLJm11GATDaQKobXSNEYGUHeQLiQqDFG1qQ5UTDPTEvKw0Xt5NsTpktGTwLps3ByrWsBrG0rB8YQ9oA==", + "version": "8.4.38", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", + "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", "dev": true, "funding": [ { @@ -11372,12 +11377,16 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ], "dependencies": { - "nanoid": "^3.3.4", + "nanoid": "^3.3.7", "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "source-map-js": "^1.2.0" }, "engines": { "node": "^10 || ^12 || >=14" @@ -11577,9 +11586,9 @@ } }, "node_modules/postcss-modules-extract-imports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", + "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", "dev": true, "engines": { "node": "^10 || ^12 || >= 14" @@ -11589,9 +11598,9 @@ } }, "node_modules/postcss-modules-local-by-default": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", - "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.5.tgz", + "integrity": "sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==", "dev": true, "dependencies": { "icss-utils": "^5.0.0", @@ -11606,9 +11615,9 @@ } }, "node_modules/postcss-modules-scope": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", - "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.0.tgz", + "integrity": "sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==", "dev": true, "dependencies": { "postcss-selector-parser": "^6.0.4" @@ -12418,9 +12427,9 @@ "dev": true }, "node_modules/sass": { - "version": "1.56.1", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.56.1.tgz", - "integrity": "sha512-VpEyKpyBPCxE7qGDtOcdJ6fFbcpOM+Emu7uZLxVrkX8KVU/Dp5UF7WLvzqRuUhB6mqqQt1xffLoG+AndxTZrCQ==", + "version": "1.75.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.75.0.tgz", + "integrity": "sha512-ShMYi3WkrDWxExyxSZPst4/okE9ts46xZmJDSawJQrnte7M1V9fScVB+uNXOVKRBt0PggHOwoZcn8mYX4trnBw==", "dev": true, "dependencies": { "chokidar": ">=3.0.0 <4.0.0", @@ -12431,16 +12440,15 @@ "sass": "sass.js" }, "engines": { - "node": ">=12.0.0" + "node": ">=14.0.0" } }, "node_modules/sass-loader": { - "version": "13.2.0", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-13.2.0.tgz", - "integrity": "sha512-JWEp48djQA4nbZxmgC02/Wh0eroSUutulROUusYJO9P9zltRbNN80JCBHqRGzjd4cmZCa/r88xgfkjGD0TXsHg==", + "version": "13.3.3", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-13.3.3.tgz", + "integrity": "sha512-mt5YN2F1MOZr3d/wBRcZxeFgwgkH44wVc2zohO2YF6JiOMkiXe4BYRZpSu2sO1g71mo/j16txzUhsKZlqjVGzA==", "dev": true, "dependencies": { - "klona": "^2.0.4", "neo-async": "^2.6.2" }, "engines": { @@ -12452,7 +12460,7 @@ }, "peerDependencies": { "fibers": ">= 3.1.0", - "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0", + "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0", "sass": "^1.3.0", "sass-embedded": "*", "webpack": "^5.0.0" @@ -12812,9 +12820,9 @@ } }, "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", "dev": true, "engines": { "node": ">=0.10.0" @@ -13064,22 +13072,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/style-loader": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.1.tgz", - "integrity": "sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ==", - "dev": true, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, "node_modules/stylehacks": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.0.tgz", @@ -18058,25 +18050,25 @@ "requires": {} }, "css-loader": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.7.1.tgz", - "integrity": "sha512-yB5CNFa14MbPJcomwNh3wLThtkZgcNyI2bNMRt8iE5Z8Vwl7f8vQXFAzn2HDOJvtDq2NTZBUGMSUNNyrv3/+cw==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.11.0.tgz", + "integrity": "sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==", "dev": true, "requires": { "icss-utils": "^5.1.0", - "postcss": "^8.4.7", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.0", - "postcss-modules-scope": "^3.0.0", + "postcss": "^8.4.33", + "postcss-modules-extract-imports": "^3.1.0", + "postcss-modules-local-by-default": "^4.0.5", + "postcss-modules-scope": "^3.2.0", "postcss-modules-values": "^4.0.0", "postcss-value-parser": "^4.2.0", - "semver": "^7.3.5" + "semver": "^7.5.4" }, "dependencies": { "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -20059,9 +20051,9 @@ "dev": true }, "immutable": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz", - "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==", + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.5.tgz", + "integrity": "sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw==", "dev": true }, "import-fresh": { @@ -21987,12 +21979,6 @@ "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", "dev": true }, - "klona": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz", - "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==", - "dev": true - }, "leven": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", @@ -22291,9 +22277,9 @@ } }, "nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", "dev": true }, "natural-compare": { @@ -22746,14 +22732,14 @@ } }, "postcss": { - "version": "8.4.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.18.tgz", - "integrity": "sha512-Wi8mWhncLJm11GATDaQKobXSNEYGUHeQLiQqDFG1qQ5UTDPTEvKw0Xt5NsTpktGTwLps3ByrWsBrG0rB8YQ9oA==", + "version": "8.4.38", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", + "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", "dev": true, "requires": { - "nanoid": "^3.3.4", + "nanoid": "^3.3.7", "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "source-map-js": "^1.2.0" } }, "postcss-calc": { @@ -22879,16 +22865,16 @@ } }, "postcss-modules-extract-imports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", + "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", "dev": true, "requires": {} }, "postcss-modules-local-by-default": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", - "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.5.tgz", + "integrity": "sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==", "dev": true, "requires": { "icss-utils": "^5.0.0", @@ -22897,9 +22883,9 @@ } }, "postcss-modules-scope": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", - "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.0.tgz", + "integrity": "sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==", "dev": true, "requires": { "postcss-selector-parser": "^6.0.4" @@ -23477,9 +23463,9 @@ "dev": true }, "sass": { - "version": "1.56.1", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.56.1.tgz", - "integrity": "sha512-VpEyKpyBPCxE7qGDtOcdJ6fFbcpOM+Emu7uZLxVrkX8KVU/Dp5UF7WLvzqRuUhB6mqqQt1xffLoG+AndxTZrCQ==", + "version": "1.75.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.75.0.tgz", + "integrity": "sha512-ShMYi3WkrDWxExyxSZPst4/okE9ts46xZmJDSawJQrnte7M1V9fScVB+uNXOVKRBt0PggHOwoZcn8mYX4trnBw==", "dev": true, "requires": { "chokidar": ">=3.0.0 <4.0.0", @@ -23488,12 +23474,11 @@ } }, "sass-loader": { - "version": "13.2.0", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-13.2.0.tgz", - "integrity": "sha512-JWEp48djQA4nbZxmgC02/Wh0eroSUutulROUusYJO9P9zltRbNN80JCBHqRGzjd4cmZCa/r88xgfkjGD0TXsHg==", + "version": "13.3.3", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-13.3.3.tgz", + "integrity": "sha512-mt5YN2F1MOZr3d/wBRcZxeFgwgkH44wVc2zohO2YF6JiOMkiXe4BYRZpSu2sO1g71mo/j16txzUhsKZlqjVGzA==", "dev": true, "requires": { - "klona": "^2.0.4", "neo-async": "^2.6.2" } }, @@ -23786,9 +23771,9 @@ "dev": true }, "source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", "dev": true }, "source-map-support": { @@ -23991,13 +23976,6 @@ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true }, - "style-loader": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.1.tgz", - "integrity": "sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ==", - "dev": true, - "requires": {} - }, "stylehacks": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.0.tgz", diff --git a/package.json b/package.json index 7106d88..482412c 100644 --- a/package.json +++ b/package.json @@ -63,7 +63,6 @@ "regenerator-runtime": "^0.13.10", "sass": "^1.56.1", "sass-loader": "^13.2.0", - "style-loader": "^3.3.1", "template-ejs-loader": "^0.9.4", "terser": "^5.15.1", "terser-webpack-plugin": "^5.3.6", diff --git a/webpack.demo.config.js b/webpack.demo.config.js index 6be284c..c7914d2 100644 --- a/webpack.demo.config.js +++ b/webpack.demo.config.js @@ -57,20 +57,6 @@ module.exports = () => ({ { loader: 'css-loader', }, { loader: 'sass-loader' } ] - }, { - test: /\.module\.s?css$/, - use: [ - MiniCssExtractPlugin.loader, - { - loader: 'css-loader', - options: { - modules: { - localIdentName: 'adjust-smart-banner-[local]__[hash:base64:5]', - } - } - }, - { loader: 'sass-loader' } - ] }, { test: /\.html$/, use: [ diff --git a/webpack.sdk.config.js b/webpack.sdk.config.js index a009fc2..d811c4a 100644 --- a/webpack.sdk.config.js +++ b/webpack.sdk.config.js @@ -44,20 +44,6 @@ module.exports = () => ({ use: 'babel-loader', test: /\.(js|ts)$/, exclude: /node_modules/ - }, { - test: /\.module\.s?css$/, - use: [ - { loader: 'style-loader' }, - { - loader: 'css-loader', - options: { - modules: { - localIdentName: 'adjust-smart-banner__[hash:base64]', - } - }, - }, - { loader: 'sass-loader' } - ] }] } }) From 69a48f5576d26467fe8fa06a13e139c9573457a0 Mon Sep 17 00:00:00 2001 From: Yara Matkova Date: Thu, 4 Jul 2024 13:25:45 +0200 Subject: [PATCH 05/70] chore: update dependencies --- package-lock.json | 19191 ++++++++++++-------------------------------- package.json | 80 +- 2 files changed, 5087 insertions(+), 14184 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4fc6342..d0c47c4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,7 +1,7 @@ { "name": "@adjustcom/adjust-web-sdk", "version": "5.6.0", - "lockfileVersion": 2, + "lockfileVersion": 3, "requires": true, "packages": { "": { @@ -9,79 +9,79 @@ "version": "5.6.0", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.20.1" + "@babel/runtime": "^7.24.4" }, "devDependencies": { - "@babel/cli": "^7.19.3", - "@babel/core": "^7.20.2", - "@babel/eslint-parser": "^7.19.1", + "@babel/cli": "^7.24.1", + "@babel/core": "^7.24.4", + "@babel/eslint-parser": "^7.24.1", "@babel/plugin-proposal-class-properties": "^7.18.6", - "@babel/plugin-transform-flow-comments": "^7.19.0", - "@babel/plugin-transform-modules-commonjs": "^7.19.6", - "@babel/plugin-transform-runtime": "^7.19.6", - "@babel/preset-env": "^7.20.2", - "@babel/preset-flow": "^7.18.6", - "@babel/preset-typescript": "^7.18.6", - "@types/jest": "^28.1.6", - "@typescript-eslint/eslint-plugin": "^5.42.1", - "@typescript-eslint/parser": "^5.42.1", - "babel-jest": "^28.1.3", - "babel-loader": "^9.1.0", + "@babel/plugin-transform-flow-comments": "^7.24.1", + "@babel/plugin-transform-modules-commonjs": "^7.24.1", + "@babel/plugin-transform-runtime": "^7.24.3", + "@babel/preset-env": "^7.24.4", + "@babel/preset-flow": "^7.24.1", + "@babel/preset-typescript": "^7.24.1", + "@types/jest": "^29.5.12", + "@typescript-eslint/eslint-plugin": "^7.7.1", + "@typescript-eslint/parser": "^7.7.1", + "babel-jest": "^29.7.0", + "babel-loader": "^9.1.3", "babel-plugin-es6-promise": "^1.1.1", - "css-loader": "^6.7.1", - "css-minimizer-webpack-plugin": "^4.2.2", + "css-loader": "^7.1.1", + "css-minimizer-webpack-plugin": "^6.0.0", "es6-promise": "^4.2.8", - "eslint": "^8.27.0", + "eslint": "^8.0.0", "eslint-plugin-flowtype": "^8.0.3", - "eslint-plugin-jest": "^26.6.0", - "eslint-webpack-plugin": "^3.2.0", - "fake-indexeddb": "^4.0.0", - "flow-bin": "^0.192.0", + "eslint-plugin-jest": "^28.3.0", + "eslint-webpack-plugin": "^4.1.0", + "fake-indexeddb": "^5.0.2", + "flow-bin": "^0.235.1", "flowtype-webpack-plugin": "^0.0.3", - "fork-ts-checker-webpack-plugin": "^7.2.13", - "html-loader": "^4.2.0", - "html-webpack-plugin": "^5.5.0", - "jest": "^28.1.3", - "jest-environment-jsdom": "^28.1.3", - "jest-extended": "^3.2.2", - "jest-localstorage-mock": "^2.4.22", - "mini-css-extract-plugin": "^2.6.1", + "fork-ts-checker-webpack-plugin": "^9.0.2", + "html-loader": "^5.0.0", + "html-webpack-plugin": "^5.6.0", + "jest": "^29.7.0", + "jest-environment-jsdom": "^29.7.0", + "jest-extended": "^4.0.2", + "jest-localstorage-mock": "^2.4.26", + "mini-css-extract-plugin": "^2.9.0", "npm-run-all": "^4.1.5", - "regenerator-runtime": "^0.13.10", - "sass": "^1.56.1", - "sass-loader": "^13.2.0", + "regenerator-runtime": "^0.14.1", + "sass": "^1.75.0", + "sass-loader": "^14.2.1", "template-ejs-loader": "^0.9.4", - "terser": "^5.15.1", - "terser-webpack-plugin": "^5.3.6", - "ts-jest": "^28.0.7", - "typescript": "^4.8.4", - "webpack": "^5.75.0", - "webpack-cli": "^4.10.0", - "webpack-dev-server": "^4.11.1" + "terser": "^5.30.4", + "terser-webpack-plugin": "^5.3.10", + "ts-jest": "^29.1.2", + "typescript": "^5.4.5", + "webpack": "^5.91.0", + "webpack-cli": "^5.1.4", + "webpack-dev-server": "^5.0.4" } }, "node_modules/@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", "dev": true, "dependencies": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { "node": ">=6.0.0" } }, "node_modules/@babel/cli": { - "version": "7.19.3", - "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.19.3.tgz", - "integrity": "sha512-643/TybmaCAe101m2tSVHi9UKpETXP9c/Ff4mD2tAwkdP6esKIfaauZFc67vGEM6r9fekbEGid+sZhbEnSe3dg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.24.1.tgz", + "integrity": "sha512-HbmrtxyFUr34LwAlV9jS+sSIjUp4FpdtIMGwgufY3AsxrIfsh/HxlMTywsONAZsU0RMYbZtbZFpUCrSGs7o0EA==", "dev": true, "dependencies": { - "@jridgewell/trace-mapping": "^0.3.8", + "@jridgewell/trace-mapping": "^0.3.25", "commander": "^4.0.1", - "convert-source-map": "^1.1.0", + "convert-source-map": "^2.0.0", "fs-readdir-recursive": "^1.1.0", "glob": "^7.2.0", "make-dir": "^2.1.0", @@ -103,47 +103,48 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "version": "7.24.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz", + "integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==", "dev": true, "dependencies": { - "@babel/highlight": "^7.18.6" + "@babel/highlight": "^7.24.2", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/compat-data": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.1.tgz", - "integrity": "sha512-EWZ4mE2diW3QALKvDMiXnbZpRvlj+nayZ112nK93SnhqOtpdsbVD4W+2tEoT3YNBAG9RBR0ISY758ZkOgsn6pQ==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.4.tgz", + "integrity": "sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.2.tgz", - "integrity": "sha512-w7DbG8DtMrJcFOi4VrLm+8QM4az8Mo+PuLBKLp2zrYRCow8W/f9xiXm5sN53C8HksCyDQwCKha9JiDoIyPjT2g==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.2", - "@babel/helper-compilation-targets": "^7.20.0", - "@babel/helper-module-transforms": "^7.20.2", - "@babel/helpers": "^7.20.1", - "@babel/parser": "^7.20.2", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.1", - "@babel/types": "^7.20.2", - "convert-source-map": "^1.7.0", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.4.tgz", + "integrity": "sha512-MBVlMXP+kkl5394RBLSxxk/iLTeVGuXTV3cIDXavPpMMqnSnt6apKgan/U8O3USWZCWZT/TbgfEpKa4uMgN4Dg==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.24.2", + "@babel/generator": "^7.24.4", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helpers": "^7.24.4", + "@babel/parser": "^7.24.4", + "@babel/template": "^7.24.0", + "@babel/traverse": "^7.24.1", + "@babel/types": "^7.24.0", + "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", - "semver": "^6.3.0" + "json5": "^2.2.3", + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" @@ -154,107 +155,93 @@ } }, "node_modules/@babel/eslint-parser": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.19.1.tgz", - "integrity": "sha512-AqNf2QWt1rtu2/1rLswy6CDP7H9Oh3mMhk177Y67Rg8d7RD9WfOLLv8CGn6tisFvS2htm86yIe1yLF6I1UDaGQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.24.1.tgz", + "integrity": "sha512-d5guuzMlPeDfZIbpQ8+g1NaCNuAGBBGNECh0HVqz1sjOeVLh2CEaifuOysCH18URW6R7pqXINvf5PaR/dC6jLQ==", "dev": true, "dependencies": { "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", "eslint-visitor-keys": "^2.1.0", - "semver": "^6.3.0" + "semver": "^6.3.1" }, "engines": { "node": "^10.13.0 || ^12.13.0 || >=14.0.0" }, "peerDependencies": { - "@babel/core": ">=7.11.0", + "@babel/core": "^7.11.0", "eslint": "^7.5.0 || ^8.0.0" } }, "node_modules/@babel/generator": { - "version": "7.20.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.4.tgz", - "integrity": "sha512-luCf7yk/cm7yab6CAW1aiFnmEfBJplb/JojV56MYEK7ziWfGmFlTfmL9Ehwfy4gFhbjBfWO1wj7/TuSbVNEEtA==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.4.tgz", + "integrity": "sha512-Xd6+v6SnjWVx/nus+y0l1sxMOTOMBkyL4+BIdbALyatQnAe/SRVjANeDPSCYaX+i1iJmuGSKf3Z+E+V/va1Hvw==", "dev": true, "dependencies": { - "@babel/types": "^7.20.2", - "@jridgewell/gen-mapping": "^0.3.2", + "@babel/types": "^7.24.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^2.5.1" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", - "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", "dev": true, "dependencies": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz", - "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz", + "integrity": "sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==", "dev": true, "dependencies": { - "@babel/helper-explode-assignable-expression": "^7.18.6", - "@babel/types": "^7.18.9" + "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz", - "integrity": "sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==", + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", + "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.20.0", - "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.21.3", - "semver": "^6.3.0" + "@babel/compat-data": "^7.23.5", + "@babel/helper-validator-option": "^7.23.5", + "browserslist": "^4.22.2", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.9.tgz", - "integrity": "sha512-WvypNAYaVh23QcjpMR24CwZY2Nz6hqdOcFdPbNpV56hL5H6KiFheO7Xm1aPdlLQ7d5emYZX7VZwPp9x3z+2opw==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.4.tgz", + "integrity": "sha512-lG75yeuUSVu0pIcbhiYMXBXANHrpUPaOfu7ryAzskCgKUHuAxRQI5ssrtmF0X9UXldPlvT0XM/A4F44OXRt6iQ==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", - "@babel/helper-member-expression-to-functions": "^7.18.9", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-replace-supers": "^7.18.9", - "@babel/helper-split-export-declaration": "^7.18.6" + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-member-expression-to-functions": "^7.23.0", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-replace-supers": "^7.24.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" @@ -264,13 +251,14 @@ } }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.19.0.tgz", - "integrity": "sha512-htnV+mHX32DF81amCDrwIDr8nrp1PTm+3wfBN9/v8QJOLEioOCOG7qNyq0nHeFiWbT3Eb7gsPwEmV64UCQ1jzw==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz", + "integrity": "sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "regexpu-core": "^5.1.0" + "@babel/helper-annotate-as-pure": "^7.22.5", + "regexpu-core": "^5.3.1", + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" @@ -280,142 +268,128 @@ } }, "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", - "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz", + "integrity": "sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==", "dev": true, "dependencies": { - "@babel/helper-compilation-targets": "^7.17.7", - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", "debug": "^4.1.1", "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" + "resolve": "^1.14.2" }, "peerDependencies": { - "@babel/core": "^7.4.0-0" + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/@babel/helper-environment-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", - "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-explode-assignable-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", - "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", "dev": true, - "dependencies": { - "@babel/types": "^7.18.6" - }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-function-name": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", - "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", "dev": true, "dependencies": { - "@babel/template": "^7.18.10", - "@babel/types": "^7.19.0" + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", "dev": true, "dependencies": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz", - "integrity": "sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz", + "integrity": "sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==", "dev": true, "dependencies": { - "@babel/types": "^7.18.9" + "@babel/types": "^7.23.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", - "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "version": "7.24.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz", + "integrity": "sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==", "dev": true, "dependencies": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.24.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.2.tgz", - "integrity": "sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", + "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.20.2", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.1", - "@babel/types": "^7.20.2" + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.20" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", - "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", + "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", "dev": true, "dependencies": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", - "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz", + "integrity": "sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz", - "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz", + "integrity": "sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-wrap-function": "^7.18.9", - "@babel/types": "^7.18.9" + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-wrap-function": "^7.22.20" }, "engines": { "node": ">=6.9.0" @@ -425,131 +399,132 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz", - "integrity": "sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.24.1.tgz", + "integrity": "sha512-QCR1UqC9BzG5vZl8BMicmZ28RuUBnHhAMddD8yHFHDRH9lLTZ9uUPehX8ctVPT8l0TKblJidqcgUUKGVrePleQ==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-member-expression-to-functions": "^7.18.9", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/traverse": "^7.19.1", - "@babel/types": "^7.19.0" + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-member-expression-to-functions": "^7.23.0", + "@babel/helper-optimise-call-expression": "^7.22.5" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-simple-access": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", - "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", "dev": true, "dependencies": { - "@babel/types": "^7.20.2" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.18.9.tgz", - "integrity": "sha512-imytd2gHi3cJPsybLRbmFrF7u5BIEuI2cNheyKi3/iOBC63kNn3q8Crn2xVuESli0aM4KYsyEqKyS7lFL8YVtw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", + "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", "dev": true, "dependencies": { - "@babel/types": "^7.18.9" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", "dev": true, "dependencies": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", - "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz", + "integrity": "sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", - "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", + "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-wrap-function": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.18.9.tgz", - "integrity": "sha512-cG2ru3TRAL6a60tfQflpEfs4ldiPwF6YW3zfJiRgmoFVIaC1vGnBBgatfec+ZUziPHkHSaXAuEck3Cdkf3eRpQ==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz", + "integrity": "sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==", "dev": true, "dependencies": { - "@babel/helper-function-name": "^7.18.9", - "@babel/template": "^7.18.6", - "@babel/traverse": "^7.18.9", - "@babel/types": "^7.18.9" + "@babel/helper-function-name": "^7.22.5", + "@babel/template": "^7.22.15", + "@babel/types": "^7.22.19" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.1.tgz", - "integrity": "sha512-J77mUVaDTUJFZ5BpP6mMn6OIl3rEWymk2ZxDBQJUG3P+PbmyMcF3bYWvz0ma69Af1oobDqT/iAsvzhB58xhQUg==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.4.tgz", + "integrity": "sha512-FewdlZbSiwaVGlgT1DPANDuCHaDMiOo+D/IDYRFYjHOuv66xMSJ7fQwwODwRNAPkADIO/z1EoF/l2BCWlWABDw==", "dev": true, "dependencies": { - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.1", - "@babel/types": "^7.20.0" + "@babel/template": "^7.24.0", + "@babel/traverse": "^7.24.1", + "@babel/types": "^7.24.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "version": "7.24.2", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.2.tgz", + "integrity": "sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.20.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.3.tgz", - "integrity": "sha512-OP/s5a94frIPXwjzEcv5S/tpQfc6XhxYUnmWpgdqMWGgYCuErA3SzozaRAMQgSZWKeTJxht9aWAkUY+0UzvOFg==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.4.tgz", + "integrity": "sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -558,13 +533,14 @@ "node": ">=6.0.0" } }, - "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz", - "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==", + "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.24.4.tgz", + "integrity": "sha512-qpl6vOOEEzTLLcsuqYYo8yDtrTocmu2xkGvgNebvPjT9DTtfFYGmgDqY+rBYXNlqL4s9qLDn6xkrJv4RxAPiTA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -573,226 +549,59 @@ "@babel/core": "^7.0.0" } }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.9.tgz", - "integrity": "sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", - "@babel/plugin-proposal-optional-chaining": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.13.0" - } - }, - "node_modules/@babel/plugin-proposal-async-generator-functions": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.1.tgz", - "integrity": "sha512-Gh5rchzSwE4kC+o/6T8waD0WHEQIsDmjltY8WnWRXHUdH8axZhuH86Ov9M72YhJfDrZseQwuuWaaIT/TmePp3g==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-remap-async-to-generator": "^7.18.9", - "@babel/plugin-syntax-async-generators": "^7.8.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-class-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", - "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-class-static-block": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz", - "integrity": "sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0" - } - }, - "node_modules/@babel/plugin-proposal-dynamic-import": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", - "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-export-namespace-from": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", - "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-json-strings": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", - "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-json-strings": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz", - "integrity": "sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", - "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-numeric-separator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", - "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.2.tgz", - "integrity": "sha512-Ks6uej9WFK+fvIMesSqbAto5dD8Dz4VuuFvGJFKgIGSkJuRGcrwGECPA1fDgQK3/DbExBJpEkTeYeB8geIFCSQ==", + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.24.1.tgz", + "integrity": "sha512-y4HqEnkelJIOQGd+3g1bTeKsA5c6qM7eOn7VggGVbBc0y8MLSKHacwcIE2PplNlQSj0PqS9rrXL/nkPVK+kUNg==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.20.1", - "@babel/helper-compilation-targets": "^7.20.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.20.1" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.0.0" } }, - "node_modules/@babel/plugin-proposal-optional-catch-binding": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", - "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.1.tgz", + "integrity": "sha512-Hj791Ii4ci8HqnaKHAlLNs+zaLXb0EzSDhiAWp5VNlyvCNymYfacs64pxTxbH1znW/NcArSmwpmG9IKE/TUVVQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.24.1" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.13.0" } }, - "node_modules/@babel/plugin-proposal-optional-chaining": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz", - "integrity": "sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w==", + "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.24.1.tgz", + "integrity": "sha512-m9m/fXsXLiHfwdgydIFnpk+7jlVbnvlK5B2EKiPdLUb6WX654ZaaEWJUjk8TftRbZpK0XibovlLWX4KIZhV6jw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.0.0" } }, - "node_modules/@babel/plugin-proposal-private-methods": { + "node_modules/@babel/plugin-proposal-class-properties": { "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", - "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", + "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead.", "dev": true, "dependencies": { "@babel/helper-create-class-features-plugin": "^7.18.6", @@ -806,16 +615,10 @@ } }, "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz", - "integrity": "sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==", + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - }, "engines": { "node": ">=6.9.0" }, @@ -823,22 +626,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-unicode-property-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", - "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-syntax-async-generators": { "version": "7.8.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", @@ -915,12 +702,12 @@ } }, "node_modules/@babel/plugin-syntax-flow": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.18.6.tgz", - "integrity": "sha512-LUbR+KNTBWCUAqRG9ex5Gnzu2IOkt8jRJbHHXFT9q+L9zm7M/QQbEqXyw1n1pohYvOyWC8CjeyjrSaIwiYjK7A==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.24.1.tgz", + "integrity": "sha512-sxi2kLTI5DeW5vDtMUsk4mTPwvlUDbjOnoWayhynCwrw4QXRld4QEYwqzY8JmQXaJUtgUuCIurtSRH5sn4c7mA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -930,12 +717,27 @@ } }, "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz", - "integrity": "sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.1.tgz", + "integrity": "sha512-IuwnI5XnuF189t91XbxmXeCDz3qs6iDRO7GJ++wcfgeXNs/8FmIlKcpDSXNVyuLQxlwvskmI3Ct73wUODkJBlQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.1.tgz", + "integrity": "sha512-zhQTMH0X2nVLnb04tz+s7AMuasX8U0FnpE+nHTOhSOINjWMnopoZTxtIKsd45n4GQ/HIZLyfIpoul8e2m0DnRA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.19.0" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -969,13 +771,12 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", - "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.1.tgz", + "integrity": "sha512-2eCtxZXf+kbkMIsXS4poTvT4Yu5rXiRa+9xGVT56raghjmBTKMpFNc9R4IDiB4emao9eO22Ox7CxuJG7BgExqA==", "dev": true, - "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1087,12 +888,12 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz", - "integrity": "sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.1.tgz", + "integrity": "sha512-Yhnmvy5HZEnHUty6i++gcfH1/l68AHnItFHnaCv6hn9dNh0hQvvQJsxpi4BMBFN5DLeHBuucT/0DgzXif/OyRw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1101,30 +902,29 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-arrow-functions": { + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz", - "integrity": "sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", "dev": true, "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.0.0" } }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz", - "integrity": "sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==", + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.1.tgz", + "integrity": "sha512-ngT/3NkRhsaep9ck9uj2Xhv9+xB1zShY3tM3g6om4xxCELwCDN4g4Aq5dRn48+0hasAql7s2hdBOysCfNpr4fw==", "dev": true, "dependencies": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-remap-async-to-generator": "^7.18.6" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1133,13 +933,16 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", - "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.24.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.24.3.tgz", + "integrity": "sha512-Qe26CMYVjpQxJ8zxM1340JFNjZaF+ISWpr1Kt/jGo+ZTUzKkfw/pphEWbRCb+lmSM6k/TOgfYLvmbHkUQ0asIg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-remap-async-to-generator": "^7.22.20", + "@babel/plugin-syntax-async-generators": "^7.8.4" }, "engines": { "node": ">=6.9.0" @@ -1148,13 +951,15 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.2.tgz", - "integrity": "sha512-y5V15+04ry69OV2wULmwhEA6jwSWXO1TwAtIwiPXcvHcoOQUqpyMVd2bDsQJMW8AurjulIyUV8kDqtjSwHy1uQ==", + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.1.tgz", + "integrity": "sha512-AawPptitRXp1y0n4ilKcGbRYWfbbzFWz2NqNu7dacYDtFtz0CMjG64b3LQsb3KIgnf4/obcUL78hfaOS7iCUfw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" + "@babel/helper-module-imports": "^7.24.1", + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-remap-async-to-generator": "^7.22.20" }, "engines": { "node": ">=6.9.0" @@ -1163,21 +968,13 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.20.2.tgz", - "integrity": "sha512-9rbPp0lCVVoagvtEyQKSo5L8oo0nQS/iif+lwlAz29MccX2642vWDlSZK+2T2buxbopotId2ld7zZAzRfz9j1g==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-compilation-targets": "^7.20.0", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-replace-supers": "^7.19.1", - "@babel/helper-split-export-declaration": "^7.18.6", - "globals": "^11.1.0" + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.1.tgz", + "integrity": "sha512-TWWC18OShZutrv9C6mye1xwtam+uNi2bnTOCBUd5sZxyHOiWbU6ztSROofIMrK84uweEZC219POICK/sTYwfgg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1186,13 +983,13 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz", - "integrity": "sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw==", + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.4.tgz", + "integrity": "sha512-nIFUZIpGKDf9O9ttyRXpHFpKC+X3Y5mtshZONuEUYBomAKoM4y029Jr+uB1bHGPhNmK8YXHevDtKDOLmtRrp6g==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1201,13 +998,14 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.20.2.tgz", - "integrity": "sha512-mENM+ZHrvEgxLTBXUiQ621rRXZes3KWUv6NdQlrnr1TkWVw+hUjQBZuP2X32qKlrlG2BzgR95gkuCRSkJl8vIw==", + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.1.tgz", + "integrity": "sha512-OMLCXi0NqvJfORTaPQBwqLXHhb93wkBKZ4aNwMl6WtehO7ar+cmp+89iPEQPqxAnxsOKTaMcs3POz3rKayJ72g==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" + "@babel/helper-create-class-features-plugin": "^7.24.1", + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1216,29 +1014,37 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", - "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.4.tgz", + "integrity": "sha512-B8q7Pz870Hz/q9UgP8InNpY01CSLDSCyqX7zcRuv3FcPl87A2G17lASroHWaCtbdIcbYzOZ7kWmXFKbijMSmFg==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-create-class-features-plugin": "^7.24.4", + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/plugin-syntax-class-static-block": "^7.14.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.12.0" } }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz", - "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" + "node_modules/@babel/plugin-transform-classes": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.1.tgz", + "integrity": "sha512-ZTIe3W7UejJd3/3R4p7ScyyOoafetUShSf4kCqV0O7F/RiHxVj/wRaRnQlrGwflvcehNA8M42HkAiEDYZu2F1Q==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-replace-supers": "^7.24.1", + "@babel/helper-split-export-declaration": "^7.22.6", + "globals": "^11.1.0" }, "engines": { "node": ">=6.9.0" @@ -1247,14 +1053,14 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", - "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.1.tgz", + "integrity": "sha512-5pJGVIUfJpOS+pAqBQd+QMaTD2vCL/HcePooON6pDpHgRp4gNRmzyHTPIkXntwKsq3ayUFVfJaIKPw2pOkOcTw==", "dev": true, "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/template": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1263,15 +1069,13 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-flow-comments": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-comments/-/plugin-transform-flow-comments-7.19.0.tgz", - "integrity": "sha512-N5z4E2Kykifxtj802Np1V1fU90WpihiJ//FMTS6gPcMXu8gKOosf5V9tifxlzsfeUOUVsNWz6IuPrbyZnCOK6w==", + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.1.tgz", + "integrity": "sha512-ow8jciWqNxR3RYbSNVuF4U2Jx130nwnBnhRw6N6h1bOejNkABmcI5X5oz29K4alWX7vf1C+o6gtKXikzRKkVdw==", "dev": true, "dependencies": { - "@babel/generator": "^7.19.0", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/plugin-syntax-flow": "^7.18.6" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1280,14 +1084,110 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-flow-strip-types": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.18.9.tgz", - "integrity": "sha512-+G6rp2zRuOAInY5wcggsx4+QVao1qPM0osC9fTUVlAV3zOrzTCnrMAFVnR6+a3T8wz1wFIH7KhYMcMB3u1n80A==", + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.1.tgz", + "integrity": "sha512-p7uUxgSoZwZ2lPNMzUkqCts3xlp8n+o05ikjy7gbtFJSt9gdU88jAmtfmOxHM14noQXBxfgzf2yRWECiNVhTCw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-flow": "^7.18.6" + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.1.tgz", + "integrity": "sha512-msyzuUnvsjsaSaocV6L7ErfNsa5nDWL1XKNnDePLgmz+WdU4w/J8+AxBMrWfi9m4IxfL5sZQKUPQKDQeeAT6lA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.1.tgz", + "integrity": "sha512-av2gdSTyXcJVdI+8aFZsCAtR29xJt0S5tas+Ef8NvBNmD1a+N/3ecMLeMBgfcK+xzsjdLDT6oHt+DFPyeqUbDA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.1.tgz", + "integrity": "sha512-U1yX13dVBSwS23DEAqU+Z/PkwE9/m7QQy8Y9/+Tdb8UWYaGNDYwTLi19wqIAiROr8sXVum9A/rtiH5H0boUcTw==", + "dev": true, + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.15", + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.1.tgz", + "integrity": "sha512-Ft38m/KFOyzKw2UaJFkWG9QnHPG/Q/2SkOrRk4pNBPg5IPZ+dOxcmkK5IyuBcxiNPyyYowPGUReyBvrvZs7IlQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-flow-comments": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-comments/-/plugin-transform-flow-comments-7.24.1.tgz", + "integrity": "sha512-a/m1+Tp6p7+Ulx1IKEnqEX9VYTwg97/bHkRp/3aUs37fQ3eqo3UXEf3mL/SrOQyH6psdv3WVaNXBPngK7023iA==", + "dev": true, + "dependencies": { + "@babel/generator": "^7.24.1", + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/plugin-syntax-flow": "^7.24.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-flow-strip-types": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.24.1.tgz", + "integrity": "sha512-iIYPIWt3dUmUKKE10s3W+jsQ3icFkw0JyRVyY1B7G4yK/nngAOHLVx8xlhA6b/Jzl/Y0nis8gjqhqKtRDQqHWQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/plugin-syntax-flow": "^7.24.1" }, "engines": { "node": ">=6.9.0" @@ -1297,12 +1197,13 @@ } }, "node_modules/@babel/plugin-transform-for-of": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz", - "integrity": "sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.1.tgz", + "integrity": "sha512-OxBdcnF04bpdQdR3i4giHZNZQn7cm8RQKcSwA17wAAqEELo1ZOwp5FFgeptWUQXFyT9kwHo10aqqauYkRZPCAg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1312,14 +1213,30 @@ } }, "node_modules/@babel/plugin-transform-function-name": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz", - "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.24.1.tgz", + "integrity": "sha512-BXmDZpPlh7jwicKArQASrj8n22/w6iymRnvHYYd2zO30DbE277JO20/7yXJT3QxDPtiQiOxQBbZH4TpivNXIxA==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.1.tgz", + "integrity": "sha512-U7RMFmRvoasscrIFy5xA4gIp8iWnWubnKkKuUGJjsuOH7GfbMkB+XZzeslx2kLdEGdOJDamEmCqOks6e8nv8DQ==", "dev": true, "dependencies": { - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9" + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/plugin-syntax-json-strings": "^7.8.3" }, "engines": { "node": ">=6.9.0" @@ -1329,12 +1246,28 @@ } }, "node_modules/@babel/plugin-transform-literals": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", - "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.24.1.tgz", + "integrity": "sha512-zn9pwz8U7nCqOYIiBaOxoQOtYmMODXTJnkxG4AtX8fPmnCRYWBOHD0qcpwS9e2VDSp1zNJYpdnFMIKb8jmwu6g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.1.tgz", + "integrity": "sha512-OhN6J4Bpz+hIBqItTeWJujDOfNP+unqv/NJgyhlpSqgBTPm37KkMmZV6SYcOj+pnDbdcl1qRGV/ZiIjX9Iy34w==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" }, "engines": { "node": ">=6.9.0" @@ -1344,12 +1277,12 @@ } }, "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", - "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.1.tgz", + "integrity": "sha512-4ojai0KysTWXzHseJKa1XPNXKRbuUrhkOPY4rEGeR+7ChlJVKxFa3H3Bz+7tWaGKgJAXUWKOGmltN+u9B3+CVg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1359,13 +1292,13 @@ } }, "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.19.6.tgz", - "integrity": "sha512-uG3od2mXvAtIFQIh0xrpLH6r5fpSQN04gIVovl+ODLdUMANokxQLZnPBHcjmv3GxRjnqwLuHvppjjcelqUFZvg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.1.tgz", + "integrity": "sha512-lAxNHi4HVtjnHd5Rxg3D5t99Xm6H7b04hUS7EHIXcUl2EV4yl1gWdqZrNzXnSrHveL9qMdbODlLF55mvgjAfaQ==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.19.6", - "@babel/helper-plugin-utils": "^7.19.0" + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1375,14 +1308,14 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.19.6.tgz", - "integrity": "sha512-8PIa1ym4XRTKuSsOUXqDG0YaOlEuTVvHMe5JCfgBMOtHvJKw/4NGovEGN33viISshG/rZNVrACiBmPQLvWN8xQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.1.tgz", + "integrity": "sha512-szog8fFTUxBfw0b98gEWPaEqF42ZUD/T3bkynW/wtgx2p/XCP55WEsb+VosKceRSd6njipdZvNogqdtI4Q0chw==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.19.6", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-simple-access": "^7.19.4" + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-simple-access": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1392,15 +1325,15 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.19.6.tgz", - "integrity": "sha512-fqGLBepcc3kErfR9R3DnVpURmckXP7gj7bAlrTQyBxrigFqszZCkFkcoxzCp2v32XmwXLvbw+8Yq9/b+QqksjQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.24.1.tgz", + "integrity": "sha512-mqQ3Zh9vFO1Tpmlt8QPnbwGHzNz3lpNEMxQb1kAemn/erstyqw1r9KeOlOfo3y6xAnFEcOv2tSyrXfmMk+/YZA==", "dev": true, "dependencies": { - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-module-transforms": "^7.19.6", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-validator-identifier": "^7.19.1" + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-validator-identifier": "^7.22.20" }, "engines": { "node": ">=6.9.0" @@ -1410,13 +1343,13 @@ } }, "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", - "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.1.tgz", + "integrity": "sha512-tuA3lpPj+5ITfcCluy6nWonSL7RvaG0AOTeAuvXqEKS34lnLzXpDb0dcP6K8jD0zWZFNDVly90AGFJPnm4fOYg==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1426,13 +1359,13 @@ } }, "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.19.1.tgz", - "integrity": "sha512-oWk9l9WItWBQYS4FgXD4Uyy5kq898lvkXpXQxoJEY1RnvPk4R/Dvu2ebXU9q8lP+rlMwUQTFf2Ok6d78ODa0kw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", + "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.19.0", - "@babel/helper-plugin-utils": "^7.19.0" + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1442,12 +1375,62 @@ } }, "node_modules/@babel/plugin-transform-new-target": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz", - "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.1.tgz", + "integrity": "sha512-/rurytBM34hYy0HKZQyA0nHbQgQNFm4Q/BOc9Hflxi2X3twRof7NaE5W46j4kQitm7SvACVRXsa6N/tSZxvPug==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.1.tgz", + "integrity": "sha512-iQ+caew8wRrhCikO5DrUYx0mrmdhkaELgFa+7baMcVuhxIkN7oxt06CZ51D65ugIb1UWRQ8oQe+HXAVM6qHFjw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.1.tgz", + "integrity": "sha512-7GAsGlK4cNL2OExJH1DzmDeKnRv/LXq0eLUSvudrehVA5Rgg4bIrqEUW29FbKMBRT0ztSqisv7kjP+XIC4ZMNw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.1.tgz", + "integrity": "sha512-XjD5f0YqOtebto4HGISLNfiNMTTs6tbkFf2TOqJlYKYmbo+mN9Dnpl4SRoofiziuOWMIyq3sZEUqLo3hLITFEA==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.24.1" }, "engines": { "node": ">=6.9.0" @@ -1457,13 +1440,46 @@ } }, "node_modules/@babel/plugin-transform-object-super": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", - "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.1.tgz", + "integrity": "sha512-oKJqR3TeI5hSLRxudMjFQ9re9fBVUU0GICqM3J1mi8MqlhVr6hC/ZN4ttAyMuQR6EZZIY6h/exe5swqGNNIkWQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-replace-supers": "^7.24.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.1.tgz", + "integrity": "sha512-oBTH7oURV4Y+3EUrf6cWn1OHio3qG/PVwO5J03iSJmBg6m2EhKjkAu/xuaXaYwWW9miYtvbWv4LNf0AmR43LUA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.1.tgz", + "integrity": "sha512-n03wmDt+987qXwAgcBlnUUivrZBPZ8z1plL0YvgQalLm+ZE5BMhGm94jhxXtA1wzv1Cu2aaOv1BM9vbVttrzSg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-replace-supers": "^7.18.6" + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" }, "engines": { "node": ">=6.9.0" @@ -1473,12 +1489,46 @@ } }, "node_modules/@babel/plugin-transform-parameters": { - "version": "7.20.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.3.tgz", - "integrity": "sha512-oZg/Fpx0YDrj13KsLyO8I/CX3Zdw7z0O9qOd95SqcoIzuqy/WTGWvePeHAnZCN54SfdyjHcb1S30gc8zlzlHcA==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.1.tgz", + "integrity": "sha512-8Jl6V24g+Uw5OGPeWNKrKqXPDw2YDjLc53ojwfMcKwlEoETKU9rU0mHUtcg9JntWI/QYzGAXNWEcVHZ+fR+XXg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.1.tgz", + "integrity": "sha512-tGvisebwBO5em4PaYNqt4fkw56K2VALsAbAakY0FjTYqJp7gfdrgr7YX76Or8/cpik0W6+tj3rZ0uHU9Oil4tw==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.24.1", + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.1.tgz", + "integrity": "sha512-pTHxDVa0BpUbvAgX3Gat+7cSciXqUcY9j2VZKTbSB6+VQGpNgNO9ailxTGHSXlqOnX1Hcx1Enme2+yv7VqP9bg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.24.1", + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" }, "engines": { "node": ">=6.9.0" @@ -1488,12 +1538,12 @@ } }, "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", - "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.1.tgz", + "integrity": "sha512-LetvD7CrHmEx0G442gOomRr66d7q8HzzGGr4PMHGr+5YIm6++Yke+jxj246rpvsbyhJwCLxcTn6zW1P1BSenqA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1503,17 +1553,17 @@ } }, "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.18.6.tgz", - "integrity": "sha512-Mz7xMPxoy9kPS/JScj6fJs03TZ/fZ1dJPlMjRAgTaxaS0fUBk8FV/A2rRgfPsVCZqALNwMexD+0Uaf5zlcKPpw==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.23.4.tgz", + "integrity": "sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA==", "dev": true, "peer": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-jsx": "^7.18.6", - "@babel/types": "^7.18.6" + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-jsx": "^7.23.3", + "@babel/types": "^7.23.4" }, "engines": { "node": ">=6.9.0" @@ -1523,13 +1573,13 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz", - "integrity": "sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.1.tgz", + "integrity": "sha512-sJwZBCzIBE4t+5Q4IGLaaun5ExVMRY0lYwos/jNecjMrVCygCdph3IKv0tkP5Fc87e/1+bebAmEAGBfnRD+cnw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "regenerator-transform": "^0.15.0" + "@babel/helper-plugin-utils": "^7.24.0", + "regenerator-transform": "^0.15.2" }, "engines": { "node": ">=6.9.0" @@ -1539,12 +1589,12 @@ } }, "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", - "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.1.tgz", + "integrity": "sha512-JAclqStUfIwKN15HrsQADFgeZt+wexNQ0uLhuqvqAUFoqPMjEcFCYZBhq0LUdz6dZK/mD+rErhW71fbx8RYElg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1554,17 +1604,17 @@ } }, "node_modules/@babel/plugin-transform-runtime": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.19.6.tgz", - "integrity": "sha512-PRH37lz4JU156lYFW1p8OxE5i7d6Sl/zV58ooyr+q1J1lnQPyg5tIiXlIwNVhJaY4W3TmOtdc8jqdXQcB1v5Yw==", + "version": "7.24.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.24.3.tgz", + "integrity": "sha512-J0BuRPNlNqlMTRJ72eVptpt9VcInbxO6iP3jaxr+1NPhC0UkKL+6oeX6VXMEYdADnuqmMmsBspt4d5w8Y/TCbQ==", "dev": true, "dependencies": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.19.0", - "babel-plugin-polyfill-corejs2": "^0.3.3", - "babel-plugin-polyfill-corejs3": "^0.6.0", - "babel-plugin-polyfill-regenerator": "^0.4.1", - "semver": "^6.3.0" + "@babel/helper-module-imports": "^7.24.3", + "@babel/helper-plugin-utils": "^7.24.0", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.10.1", + "babel-plugin-polyfill-regenerator": "^0.6.1", + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" @@ -1574,12 +1624,12 @@ } }, "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", - "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.1.tgz", + "integrity": "sha512-LyjVB1nsJ6gTTUKRjRWx9C1s9hE7dLfP/knKdrfeH9UPtAGjYGgxIbFfx7xyLIEWs7Xe1Gnf8EWiUqfjLhInZA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1589,13 +1639,13 @@ } }, "node_modules/@babel/plugin-transform-spread": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.19.0.tgz", - "integrity": "sha512-RsuMk7j6n+r752EtzyScnWkQyuJdli6LdO5Klv8Yx0OfPVTcQkIUfS8clx5e9yHXzlnhOZF3CbQ8C2uP5j074w==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.1.tgz", + "integrity": "sha512-KjmcIM+fxgY+KxPVbjelJC6hrH1CgtPmTvdXAfn3/a9CnWGSTY7nH4zm5+cjmWJybdcPSsD0++QssDsjcpe47g==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9" + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1605,12 +1655,12 @@ } }, "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", - "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.1.tgz", + "integrity": "sha512-9v0f1bRXgPVcPrngOQvLXeGNNVLc8UjMVfebo9ka0WF3/7+aVUHmaJVT3sa0XCzEFioPfPHZiOcYG9qOsH63cw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1620,12 +1670,12 @@ } }, "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", - "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.1.tgz", + "integrity": "sha512-WRkhROsNzriarqECASCNu/nojeXCDTE/F2HmRgOzi7NGvyfYGq1NEjKBK3ckLfRgGc6/lPAqP0vDOSw3YtG34g==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1635,12 +1685,12 @@ } }, "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", - "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.1.tgz", + "integrity": "sha512-CBfU4l/A+KruSUoW+vTQthwcAdwuqbpRNB8HQKlZABwHRhsdHZ9fezp4Sn18PeAlYxTNiLMlx4xUBV3AWfg1BA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1650,14 +1700,15 @@ } }, "node_modules/@babel/plugin-transform-typescript": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.18.8.tgz", - "integrity": "sha512-p2xM8HI83UObjsZGofMV/EdYjamsDm6MoN3hXPYIT0+gxIoopE+B7rPYKAxfrz9K9PK7JafTTjqYC6qipLExYA==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.24.4.tgz", + "integrity": "sha512-79t3CQ8+oBGk/80SQ8MN3Bs3obf83zJ0YZjDmDaEZN8MqhMI760apl5z6a20kFeMXBwJX99VpKT8CKxEBp5H1g==", "dev": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-typescript": "^7.18.6" + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.24.4", + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/plugin-syntax-typescript": "^7.24.1" }, "engines": { "node": ">=6.9.0" @@ -1667,12 +1718,28 @@ } }, "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz", - "integrity": "sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.1.tgz", + "integrity": "sha512-RlkVIcWT4TLI96zM660S877E7beKlQw7Ig+wqkKBiWfj0zH5Q4h50q6er4wzZKRNSYpfo6ILJ+hrJAGSX2qcNw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.1.tgz", + "integrity": "sha512-Ss4VvlfYV5huWApFsF8/Sq0oXnGO+jB+rijFEFugTd3cwSObUSnUi88djgR5528Csl0uKlrI331kRqe56Ov2Ng==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1682,13 +1749,13 @@ } }, "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", - "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.1.tgz", + "integrity": "sha512-2A/94wgZgxfTsiLaQ2E36XAOdcZmGAaEEgVmxQWwZXWkGhvoHbaqXcKnU8zny4ycpu3vNqg0L/PcCiYtHtA13g==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1697,39 +1764,45 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.1.tgz", + "integrity": "sha512-fqj4WuzzS+ukpgerpAoOnMfQXwUHFxXUZUE84oL2Kao2N8uSlvcpnAidKASgsNgzZHBsHWvcm8s9FPWUhAb8fA==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, "node_modules/@babel/preset-env": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.20.2.tgz", - "integrity": "sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.20.1", - "@babel/helper-compilation-targets": "^7.20.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-async-generator-functions": "^7.20.1", - "@babel/plugin-proposal-class-properties": "^7.18.6", - "@babel/plugin-proposal-class-static-block": "^7.18.6", - "@babel/plugin-proposal-dynamic-import": "^7.18.6", - "@babel/plugin-proposal-export-namespace-from": "^7.18.9", - "@babel/plugin-proposal-json-strings": "^7.18.6", - "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", - "@babel/plugin-proposal-numeric-separator": "^7.18.6", - "@babel/plugin-proposal-object-rest-spread": "^7.20.2", - "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", - "@babel/plugin-proposal-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-private-methods": "^7.18.6", - "@babel/plugin-proposal-private-property-in-object": "^7.18.6", - "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.24.4.tgz", + "integrity": "sha512-7Kl6cSmYkak0FK/FXjSEnLJ1N9T/WA2RkMhu17gZ/dsxKJUuTYNIylahPTzqpLyJN4WhDif8X0XK1R8Wsguo/A==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.24.4", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-validator-option": "^7.23.5", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.24.4", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.24.1", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.1", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.24.1", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-class-properties": "^7.12.13", "@babel/plugin-syntax-class-static-block": "^7.14.5", "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.20.0", + "@babel/plugin-syntax-import-assertions": "^7.24.1", + "@babel/plugin-syntax-import-attributes": "^7.24.1", + "@babel/plugin-syntax-import-meta": "^7.10.4", "@babel/plugin-syntax-json-strings": "^7.8.3", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", @@ -1739,45 +1812,61 @@ "@babel/plugin-syntax-optional-chaining": "^7.8.3", "@babel/plugin-syntax-private-property-in-object": "^7.14.5", "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-transform-arrow-functions": "^7.18.6", - "@babel/plugin-transform-async-to-generator": "^7.18.6", - "@babel/plugin-transform-block-scoped-functions": "^7.18.6", - "@babel/plugin-transform-block-scoping": "^7.20.2", - "@babel/plugin-transform-classes": "^7.20.2", - "@babel/plugin-transform-computed-properties": "^7.18.9", - "@babel/plugin-transform-destructuring": "^7.20.2", - "@babel/plugin-transform-dotall-regex": "^7.18.6", - "@babel/plugin-transform-duplicate-keys": "^7.18.9", - "@babel/plugin-transform-exponentiation-operator": "^7.18.6", - "@babel/plugin-transform-for-of": "^7.18.8", - "@babel/plugin-transform-function-name": "^7.18.9", - "@babel/plugin-transform-literals": "^7.18.9", - "@babel/plugin-transform-member-expression-literals": "^7.18.6", - "@babel/plugin-transform-modules-amd": "^7.19.6", - "@babel/plugin-transform-modules-commonjs": "^7.19.6", - "@babel/plugin-transform-modules-systemjs": "^7.19.6", - "@babel/plugin-transform-modules-umd": "^7.18.6", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.19.1", - "@babel/plugin-transform-new-target": "^7.18.6", - "@babel/plugin-transform-object-super": "^7.18.6", - "@babel/plugin-transform-parameters": "^7.20.1", - "@babel/plugin-transform-property-literals": "^7.18.6", - "@babel/plugin-transform-regenerator": "^7.18.6", - "@babel/plugin-transform-reserved-words": "^7.18.6", - "@babel/plugin-transform-shorthand-properties": "^7.18.6", - "@babel/plugin-transform-spread": "^7.19.0", - "@babel/plugin-transform-sticky-regex": "^7.18.6", - "@babel/plugin-transform-template-literals": "^7.18.9", - "@babel/plugin-transform-typeof-symbol": "^7.18.9", - "@babel/plugin-transform-unicode-escapes": "^7.18.10", - "@babel/plugin-transform-unicode-regex": "^7.18.6", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.20.2", - "babel-plugin-polyfill-corejs2": "^0.3.3", - "babel-plugin-polyfill-corejs3": "^0.6.0", - "babel-plugin-polyfill-regenerator": "^0.4.1", - "core-js-compat": "^3.25.1", - "semver": "^6.3.0" + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.24.1", + "@babel/plugin-transform-async-generator-functions": "^7.24.3", + "@babel/plugin-transform-async-to-generator": "^7.24.1", + "@babel/plugin-transform-block-scoped-functions": "^7.24.1", + "@babel/plugin-transform-block-scoping": "^7.24.4", + "@babel/plugin-transform-class-properties": "^7.24.1", + "@babel/plugin-transform-class-static-block": "^7.24.4", + "@babel/plugin-transform-classes": "^7.24.1", + "@babel/plugin-transform-computed-properties": "^7.24.1", + "@babel/plugin-transform-destructuring": "^7.24.1", + "@babel/plugin-transform-dotall-regex": "^7.24.1", + "@babel/plugin-transform-duplicate-keys": "^7.24.1", + "@babel/plugin-transform-dynamic-import": "^7.24.1", + "@babel/plugin-transform-exponentiation-operator": "^7.24.1", + "@babel/plugin-transform-export-namespace-from": "^7.24.1", + "@babel/plugin-transform-for-of": "^7.24.1", + "@babel/plugin-transform-function-name": "^7.24.1", + "@babel/plugin-transform-json-strings": "^7.24.1", + "@babel/plugin-transform-literals": "^7.24.1", + "@babel/plugin-transform-logical-assignment-operators": "^7.24.1", + "@babel/plugin-transform-member-expression-literals": "^7.24.1", + "@babel/plugin-transform-modules-amd": "^7.24.1", + "@babel/plugin-transform-modules-commonjs": "^7.24.1", + "@babel/plugin-transform-modules-systemjs": "^7.24.1", + "@babel/plugin-transform-modules-umd": "^7.24.1", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", + "@babel/plugin-transform-new-target": "^7.24.1", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.1", + "@babel/plugin-transform-numeric-separator": "^7.24.1", + "@babel/plugin-transform-object-rest-spread": "^7.24.1", + "@babel/plugin-transform-object-super": "^7.24.1", + "@babel/plugin-transform-optional-catch-binding": "^7.24.1", + "@babel/plugin-transform-optional-chaining": "^7.24.1", + "@babel/plugin-transform-parameters": "^7.24.1", + "@babel/plugin-transform-private-methods": "^7.24.1", + "@babel/plugin-transform-private-property-in-object": "^7.24.1", + "@babel/plugin-transform-property-literals": "^7.24.1", + "@babel/plugin-transform-regenerator": "^7.24.1", + "@babel/plugin-transform-reserved-words": "^7.24.1", + "@babel/plugin-transform-shorthand-properties": "^7.24.1", + "@babel/plugin-transform-spread": "^7.24.1", + "@babel/plugin-transform-sticky-regex": "^7.24.1", + "@babel/plugin-transform-template-literals": "^7.24.1", + "@babel/plugin-transform-typeof-symbol": "^7.24.1", + "@babel/plugin-transform-unicode-escapes": "^7.24.1", + "@babel/plugin-transform-unicode-property-regex": "^7.24.1", + "@babel/plugin-transform-unicode-regex": "^7.24.1", + "@babel/plugin-transform-unicode-sets-regex": "^7.24.1", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.10.4", + "babel-plugin-polyfill-regenerator": "^0.6.1", + "core-js-compat": "^3.31.0", + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" @@ -1787,14 +1876,14 @@ } }, "node_modules/@babel/preset-flow": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.18.6.tgz", - "integrity": "sha512-E7BDhL64W6OUqpuyHnSroLnqyRTcG6ZdOBl1OKI/QK/HJfplqK/S3sq1Cckx7oTodJ5yOXyfw7rEADJ6UjoQDQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.24.1.tgz", + "integrity": "sha512-sWCV2G9pcqZf+JHyv/RyqEIpFypxdCSxWIxQjpdaQxenNog7cN1pr76hg8u0Fz8Qgg0H4ETkGcJnXL8d4j0PPA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-transform-flow-strip-types": "^7.18.6" + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-validator-option": "^7.23.5", + "@babel/plugin-transform-flow-strip-types": "^7.24.1" }, "engines": { "node": ">=6.9.0" @@ -1804,30 +1893,30 @@ } }, "node_modules/@babel/preset-modules": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", - "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", "@babel/types": "^7.4.4", "esutils": "^2.0.2" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" } }, "node_modules/@babel/preset-typescript": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.18.6.tgz", - "integrity": "sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.24.1.tgz", + "integrity": "sha512-1DBaMmRDpuYQBPWD8Pf/WEwCrtgRHxsZnP4mIy9G/X+hFfbI47Q2G4t1Paakld84+qsk2fSsUPMKg71jkoOOaQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-transform-typescript": "^7.18.6" + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-validator-option": "^7.23.5", + "@babel/plugin-syntax-jsx": "^7.24.1", + "@babel/plugin-transform-modules-commonjs": "^7.24.1", + "@babel/plugin-transform-typescript": "^7.24.1" }, "engines": { "node": ">=6.9.0" @@ -1836,46 +1925,52 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", + "dev": true + }, "node_modules/@babel/runtime": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.1.tgz", - "integrity": "sha512-mrzLkl6U9YLF8qpqI7TB82PESyEGjm/0Ly91jG575eVxMMlb8fYfOXFZIJ8XfLrJZQbm7dlKry2bJmXBUEkdFg==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.4.tgz", + "integrity": "sha512-dkxf7+hn8mFBwKjs9bvBlArzLVxVbS8usaPUDd5p2a9JCL9tB8OaOVN1isD4+Xyk4ns89/xeOmbQvgdK7IIVdA==", "dependencies": { - "regenerator-runtime": "^0.13.10" + "regenerator-runtime": "^0.14.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/template": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", - "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz", + "integrity": "sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.18.10", - "@babel/types": "^7.18.10" + "@babel/code-frame": "^7.23.5", + "@babel/parser": "^7.24.0", + "@babel/types": "^7.24.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.1.tgz", - "integrity": "sha512-d3tN8fkVJwFLkHkBN479SOsw4DMZnz8cdbL/gvuDuzy3TS6Nfw80HuQqhw1pITbIruHyh7d1fMA47kWzmcUEGA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.1", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.20.1", - "@babel/types": "^7.20.0", - "debug": "^4.1.0", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.1.tgz", + "integrity": "sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.24.1", + "@babel/generator": "^7.24.1", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.24.1", + "@babel/types": "^7.24.0", + "debug": "^4.3.1", "globals": "^11.1.0" }, "engines": { @@ -1883,13 +1978,13 @@ } }, "node_modules/@babel/types": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.2.tgz", - "integrity": "sha512-FnnvsNWgZCr232sqtXggapvlkk/tuwR/qhGzcmxI0GXLCjmPYQPzio2FbdlWuY6y1sHFfQKk+rRbUZ9VStQMog==", + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.0.tgz", + "integrity": "sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==", "dev": true, "dependencies": { - "@babel/helper-string-parser": "^7.19.4", - "@babel/helper-validator-identifier": "^7.19.1", + "@babel/helper-string-parser": "^7.23.4", + "@babel/helper-validator-identifier": "^7.22.20", "to-fast-properties": "^2.0.0" }, "engines": { @@ -1911,16 +2006,52 @@ "node": ">=10.0.0" } }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, "node_modules/@eslint/eslintrc": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz", - "integrity": "sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dev": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.4.0", - "globals": "^13.15.0", + "espree": "^9.6.0", + "globals": "^13.19.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", @@ -1940,10 +2071,20 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, + "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.17.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", - "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -1967,32 +2108,75 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/@eslint/eslintrc/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "engines": { + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@eslint/eslintrc/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@eslint/js": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.7", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.7.tgz", - "integrity": "sha512-kBbPWzN8oVMLb0hOUYXhmxggL/1cJE6ydvjDIGi9EnAGUyA7cLVKQg+d/Dsm+KZwx2czGHrCmMVLiyg8s5JPKw==", + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", "dev": true, "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", "minimatch": "^3.0.5" }, "engines": { "node": ">=10.10.0" } }, + "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", @@ -2007,11 +2191,107 @@ } }, "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "dev": true + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", "dev": true }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", @@ -2038,20 +2318,20 @@ } }, "node_modules/@jest/console": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-28.1.3.tgz", - "integrity": "sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", + "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", "dev": true, "dependencies": { - "@jest/types": "^28.1.3", + "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", - "jest-message-util": "^28.1.3", - "jest-util": "^28.1.3", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", "slash": "^3.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/console/node_modules/ansi-styles": { @@ -2134,43 +2414,42 @@ } }, "node_modules/@jest/core": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-28.1.3.tgz", - "integrity": "sha512-CIKBrlaKOzA7YG19BEqCw3SLIsEwjZkeJzf5bdooVnW4bH5cktqe3JX+G2YV1aK5vP8N9na1IGWFzYaTp6k6NA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", + "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", "dev": true, "dependencies": { - "@jest/console": "^28.1.3", - "@jest/reporters": "^28.1.3", - "@jest/test-result": "^28.1.3", - "@jest/transform": "^28.1.3", - "@jest/types": "^28.1.3", + "@jest/console": "^29.7.0", + "@jest/reporters": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", "ci-info": "^3.2.0", "exit": "^0.1.2", "graceful-fs": "^4.2.9", - "jest-changed-files": "^28.1.3", - "jest-config": "^28.1.3", - "jest-haste-map": "^28.1.3", - "jest-message-util": "^28.1.3", - "jest-regex-util": "^28.0.2", - "jest-resolve": "^28.1.3", - "jest-resolve-dependencies": "^28.1.3", - "jest-runner": "^28.1.3", - "jest-runtime": "^28.1.3", - "jest-snapshot": "^28.1.3", - "jest-util": "^28.1.3", - "jest-validate": "^28.1.3", - "jest-watcher": "^28.1.3", + "jest-changed-files": "^29.7.0", + "jest-config": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-resolve-dependencies": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "jest-watcher": "^29.7.0", "micromatch": "^4.0.4", - "pretty-format": "^28.1.3", - "rimraf": "^3.0.0", + "pretty-format": "^29.7.0", "slash": "^3.0.0", "strip-ansi": "^6.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" @@ -2261,88 +2540,89 @@ } }, "node_modules/@jest/environment": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-28.1.3.tgz", - "integrity": "sha512-1bf40cMFTEkKyEf585R9Iz1WayDjHoHqvts0XFYEqyKM3cFWDpeMoqKKTAF9LSYQModPUlh8FKptoM2YcMWAXA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", + "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", "dev": true, "dependencies": { - "@jest/fake-timers": "^28.1.3", - "@jest/types": "^28.1.3", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", "@types/node": "*", - "jest-mock": "^28.1.3" + "jest-mock": "^29.7.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/expect": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-28.1.3.tgz", - "integrity": "sha512-lzc8CpUbSoE4dqT0U+g1qODQjBRHPpCPXissXD4mS9+sWQdmmpeJ9zSH1rS1HEkrsMN0fb7nKrJ9giAR1d3wBw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", "dev": true, "dependencies": { - "expect": "^28.1.3", - "jest-snapshot": "^28.1.3" + "expect": "^29.7.0", + "jest-snapshot": "^29.7.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/expect-utils": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-28.1.3.tgz", - "integrity": "sha512-wvbi9LUrHJLn3NlDW6wF2hvIMtd4JUl2QNVrjq+IBSHirgfrR3o9RnVtxzdEGO2n9JyIWwHnLfby5KzqBGg2YA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", + "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", "dev": true, "dependencies": { - "jest-get-type": "^28.0.2" + "jest-get-type": "^29.6.3" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/fake-timers": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-28.1.3.tgz", - "integrity": "sha512-D/wOkL2POHv52h+ok5Oj/1gOG9HSywdoPtFsRCUmlCILXNn5eIWmcnd3DIiWlJnpGvQtmajqBP95Ei0EimxfLw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", + "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", "dev": true, "dependencies": { - "@jest/types": "^28.1.3", - "@sinonjs/fake-timers": "^9.1.2", + "@jest/types": "^29.6.3", + "@sinonjs/fake-timers": "^10.0.2", "@types/node": "*", - "jest-message-util": "^28.1.3", - "jest-mock": "^28.1.3", - "jest-util": "^28.1.3" + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/globals": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-28.1.3.tgz", - "integrity": "sha512-XFU4P4phyryCXu1pbcqMO0GSQcYe1IsalYCDzRNyhetyeyxMcIxa11qPNDpVNLeretItNqEmYYQn1UYz/5x1NA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", + "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", "dev": true, "dependencies": { - "@jest/environment": "^28.1.3", - "@jest/expect": "^28.1.3", - "@jest/types": "^28.1.3" + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/types": "^29.6.3", + "jest-mock": "^29.7.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/reporters": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-28.1.3.tgz", - "integrity": "sha512-JuAy7wkxQZVNU/V6g9xKzCGC5LVXx9FDcABKsSXp5MiKPEE2144a/vXTEDoyzjUpZKfVwp08Wqg5A4WfTMAzjg==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", + "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", "dev": true, "dependencies": { "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^28.1.3", - "@jest/test-result": "^28.1.3", - "@jest/transform": "^28.1.3", - "@jest/types": "^28.1.3", - "@jridgewell/trace-mapping": "^0.3.13", + "@jest/console": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", "@types/node": "*", "chalk": "^4.0.0", "collect-v8-coverage": "^1.0.0", @@ -2350,21 +2630,20 @@ "glob": "^7.1.3", "graceful-fs": "^4.2.9", "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-instrument": "^6.0.0", "istanbul-lib-report": "^3.0.0", "istanbul-lib-source-maps": "^4.0.0", "istanbul-reports": "^3.1.3", - "jest-message-util": "^28.1.3", - "jest-util": "^28.1.3", - "jest-worker": "^28.1.3", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", "slash": "^3.0.0", "string-length": "^4.0.1", "strip-ansi": "^6.0.0", - "terminal-link": "^2.0.0", "v8-to-istanbul": "^9.0.1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" @@ -2433,33 +2712,47 @@ "node": ">=8" } }, - "node_modules/@jest/reporters/node_modules/jest-worker": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz", - "integrity": "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==", + "node_modules/@jest/reporters/node_modules/istanbul-lib-instrument": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.2.tgz", + "integrity": "sha512-1WUsZ9R1lA0HtBSohTkm39WTPlNKSJ5iFk7UwqXkBLoHQT+hfqPsfsTDVuZdKGaBwn7din9bS7SsnoAr943hvw==", "dev": true, "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": ">=10" } }, - "node_modules/@jest/reporters/node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "node_modules/@jest/reporters/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "dependencies": { - "has-flag": "^4.0.0" + "yallist": "^4.0.0" }, "engines": { "node": ">=10" + } + }, + "node_modules/@jest/reporters/node_modules/semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, "node_modules/@jest/reporters/node_modules/slash": { @@ -2483,60 +2776,66 @@ "node": ">=8" } }, + "node_modules/@jest/reporters/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/@jest/schemas": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", - "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", "dev": true, "dependencies": { - "@sinclair/typebox": "^0.24.1" + "@sinclair/typebox": "^0.27.8" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/source-map": { - "version": "28.1.2", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-28.1.2.tgz", - "integrity": "sha512-cV8Lx3BeStJb8ipPHnqVw/IM2VCMWO3crWZzYodSIkxXnRcXJipCdx1JCK0K5MsJJouZQTH73mzf4vgxRaH9ww==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", + "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", "dev": true, "dependencies": { - "@jridgewell/trace-mapping": "^0.3.13", + "@jridgewell/trace-mapping": "^0.3.18", "callsites": "^3.0.0", "graceful-fs": "^4.2.9" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/test-result": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-28.1.3.tgz", - "integrity": "sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", + "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", "dev": true, "dependencies": { - "@jest/console": "^28.1.3", - "@jest/types": "^28.1.3", + "@jest/console": "^29.7.0", + "@jest/types": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", "collect-v8-coverage": "^1.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/test-sequencer": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-28.1.3.tgz", - "integrity": "sha512-NIMPEqqa59MWnDi1kvXXpYbqsfQmSJsIbnd85mdVGkiDfQ9WQQTXOLsvISUfonmnBT+w85WEgneCigEEdHDFxw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", + "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", "dev": true, "dependencies": { - "@jest/test-result": "^28.1.3", + "@jest/test-result": "^29.7.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^28.1.3", + "jest-haste-map": "^29.7.0", "slash": "^3.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/test-sequencer/node_modules/slash": { @@ -2549,29 +2848,29 @@ } }, "node_modules/@jest/transform": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-28.1.3.tgz", - "integrity": "sha512-u5dT5di+oFI6hfcLOHGTAfmUxFRrjK+vnaP0kkVow9Md/M7V/MxqQMOz/VV25UZO8pzeA9PjfTpOu6BDuwSPQA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", "dev": true, "dependencies": { "@babel/core": "^7.11.6", - "@jest/types": "^28.1.3", - "@jridgewell/trace-mapping": "^0.3.13", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", "babel-plugin-istanbul": "^6.1.1", "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^28.1.3", - "jest-regex-util": "^28.0.2", - "jest-util": "^28.1.3", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", "micromatch": "^4.0.4", "pirates": "^4.0.4", "slash": "^3.0.0", - "write-file-atomic": "^4.0.1" + "write-file-atomic": "^4.0.2" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/transform/node_modules/ansi-styles": { @@ -2654,12 +2953,12 @@ } }, "node_modules/@jest/types": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", - "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", "dev": true, "dependencies": { - "@jest/schemas": "^28.1.3", + "@jest/schemas": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", @@ -2667,7 +2966,7 @@ "chalk": "^4.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/types/node_modules/ansi-styles": { @@ -2741,80 +3040,124 @@ } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", "dev": true, "dependencies": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "dev": true, "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", "dev": true, "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/source-map": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", - "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", "dev": true, "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" } }, - "node_modules/@jridgewell/source-map/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "dev": true, "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@jsonjoy.com/base64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-1.1.1.tgz", + "integrity": "sha512-LnFjVChaGY8cZVMwAIMjvA1XwQjZ/zIXHyh28IyJkyNkzof4Dkm1+KN9UIm3lHhREH4vs7XwZ0NpkZKnwOtEfg==", + "dev": true, "engines": { - "node": ">=6.0.0" + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true + "node_modules/@jsonjoy.com/json-pack": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.0.2.tgz", + "integrity": "sha512-4KMApTgb1Hvjz9Ue7unziJ1xNy3k6d2erp0hz1iXryXsf6LEM3KwN6YrfbqT0vqkUO8Tu+CSnvMia9cWX6YGVw==", + "dev": true, + "dependencies": { + "@jsonjoy.com/base64": "^1.1.1", + "@jsonjoy.com/util": "^1.0.0", + "hyperdyperid": "^1.2.0", + "thingies": "^1.20.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.14", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz", - "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==", + "node_modules/@jsonjoy.com/util": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.1.0.tgz", + "integrity": "sha512-Yz+xITJ3Y/w0DBISwPkBETP5/cITHXscjgQNZIkfrVz1V7/ahJY8vw+T+LZy/KtXgKuUWqu4GALAQ3bhGt9J8A==", "dev": true, "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "hyperdyperid": "^1.2.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, "node_modules/@leichtgewicht/ip-codec": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", - "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", + "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", "dev": true }, "node_modules/@nicolo-ribaudo/chokidar-2": { @@ -2868,28 +3211,38 @@ "node": ">= 8" } }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=14" + } + }, "node_modules/@sinclair/typebox": { - "version": "0.24.20", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.20.tgz", - "integrity": "sha512-kVaO5aEFZb33nPMTZBxiPEkY+slxiPtqC7QX8f9B3eGOMBvEfuMfxp9DSTTCsRJPumPKjrge4yagyssO4q6qzQ==", + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", "dev": true }, "node_modules/@sinonjs/commons": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", - "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", "dev": true, "dependencies": { "type-detect": "4.0.8" } }, "node_modules/@sinonjs/fake-timers": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz", - "integrity": "sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==", + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", "dev": true, "dependencies": { - "@sinonjs/commons": "^1.7.0" + "@sinonjs/commons": "^3.0.0" } }, "node_modules/@tootallnate/once": { @@ -2911,31 +3264,31 @@ } }, "node_modules/@types/babel__core": { - "version": "7.1.19", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.19.tgz", - "integrity": "sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw==", + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", "dev": true, "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", "@types/babel__generator": "*", "@types/babel__template": "*", "@types/babel__traverse": "*" } }, "node_modules/@types/babel__generator": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", - "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", "dev": true, "dependencies": { "@babel/types": "^7.0.0" } }, "node_modules/@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", "dev": true, "dependencies": { "@babel/parser": "^7.1.0", @@ -2943,18 +3296,18 @@ } }, "node_modules/@types/babel__traverse": { - "version": "7.17.1", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.17.1.tgz", - "integrity": "sha512-kVzjari1s2YVi77D3w1yuvohV2idweYXMCDzqBiVNN63TcDWrIlTVOYpqVrvbbyOE/IyzBoTKF0fdnLPEORFxA==", + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.5.tgz", + "integrity": "sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==", "dev": true, "dependencies": { - "@babel/types": "^7.3.0" + "@babel/types": "^7.20.7" } }, "node_modules/@types/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", + "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", "dev": true, "dependencies": { "@types/connect": "*", @@ -2962,27 +3315,27 @@ } }, "node_modules/@types/bonjour": { - "version": "3.5.10", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", - "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", + "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", "dev": true, "dependencies": { "@types/node": "*" } }, "node_modules/@types/connect": { - "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", "dev": true, "dependencies": { "@types/node": "*" } }, "node_modules/@types/connect-history-api-fallback": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz", - "integrity": "sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", + "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", "dev": true, "dependencies": { "@types/express-serve-static-core": "*", @@ -2990,9 +3343,9 @@ } }, "node_modules/@types/eslint": { - "version": "8.4.5", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.5.tgz", - "integrity": "sha512-dhsC09y1gpJWnK+Ff4SGvCuSnk9DaU0BJZSzOwa6GVSg65XtTugLBITDAAzRU5duGBoXBHpdR/9jHGxJjNflJQ==", + "version": "8.56.10", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.10.tgz", + "integrity": "sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==", "dev": true, "dependencies": { "@types/estree": "*", @@ -3000,9 +3353,9 @@ } }, "node_modules/@types/eslint-scope": { - "version": "3.7.4", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", - "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", "dev": true, "dependencies": { "@types/eslint": "*", @@ -3010,38 +3363,39 @@ } }, "node_modules/@types/estree": { - "version": "0.0.51", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", - "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", "dev": true }, "node_modules/@types/express": { - "version": "4.17.13", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", - "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", + "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", "dev": true, "dependencies": { "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.18", + "@types/express-serve-static-core": "^4.17.33", "@types/qs": "*", "@types/serve-static": "*" } }, "node_modules/@types/express-serve-static-core": { - "version": "4.17.29", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.29.tgz", - "integrity": "sha512-uMd++6dMKS32EOuw1Uli3e3BPgdLIXmezcfHv7N4c1s3gkhikBplORPpMq3fuWkxncZN1reb16d5n8yhQ80x7Q==", + "version": "4.19.0", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.0.tgz", + "integrity": "sha512-bGyep3JqPCRry1wq+O5n7oiBgGWmeIJXPjXXCo8EK0u8duZGSYar7cGqd3ML2JUsLGeB7fmc06KYo9fLGWqPvQ==", "dev": true, "dependencies": { "@types/node": "*", "@types/qs": "*", - "@types/range-parser": "*" + "@types/range-parser": "*", + "@types/send": "*" } }, "node_modules/@types/graceful-fs": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", - "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", + "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", "dev": true, "dependencies": { "@types/node": "*" @@ -3053,210 +3407,223 @@ "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", "dev": true }, + "node_modules/@types/http-errors": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", + "dev": true + }, "node_modules/@types/http-proxy": { - "version": "1.17.9", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.9.tgz", - "integrity": "sha512-QsbSjA/fSk7xB+UXlCT3wHBy5ai9wOcNDWwZAtud+jXhwOM3l+EYZh8Lng4+/6n8uar0J7xILzqftJdJ/Wdfkw==", + "version": "1.17.14", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.14.tgz", + "integrity": "sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==", "dev": true, "dependencies": { "@types/node": "*" } }, "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", "dev": true }, "node_modules/@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", "dev": true, "dependencies": { "@types/istanbul-lib-coverage": "*" } }, "node_modules/@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", "dev": true, "dependencies": { "@types/istanbul-lib-report": "*" } }, "node_modules/@types/jest": { - "version": "28.1.6", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-28.1.6.tgz", - "integrity": "sha512-0RbGAFMfcBJKOmqRazM8L98uokwuwD5F8rHrv/ZMbrZBwVOWZUyPG6VFNscjYr/vjM3Vu4fRrCPbOs42AfemaQ==", + "version": "29.5.12", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.12.tgz", + "integrity": "sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw==", "dev": true, "dependencies": { - "jest-matcher-utils": "^28.0.0", - "pretty-format": "^28.0.0" + "expect": "^29.0.0", + "pretty-format": "^29.0.0" } }, "node_modules/@types/jsdom": { - "version": "16.2.14", - "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-16.2.14.tgz", - "integrity": "sha512-6BAy1xXEmMuHeAJ4Fv4yXKwBDTGTOseExKE3OaHiNycdHdZw59KfYzrt0DkDluvwmik1HRt6QS7bImxUmpSy+w==", + "version": "20.0.1", + "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-20.0.1.tgz", + "integrity": "sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==", "dev": true, "dependencies": { "@types/node": "*", - "@types/parse5": "*", - "@types/tough-cookie": "*" + "@types/tough-cookie": "*", + "parse5": "^7.0.0" } }, "node_modules/@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", "dev": true }, "node_modules/@types/mime": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", - "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", "dev": true }, "node_modules/@types/node": { - "version": "18.0.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.0.6.tgz", - "integrity": "sha512-/xUq6H2aQm261exT6iZTMifUySEt4GR5KX8eYyY+C4MSNPqSh9oNIP7tz2GLKTlFaiBbgZNxffoR3CVRG+cljw==", - "dev": true - }, - "node_modules/@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", - "dev": true - }, - "node_modules/@types/parse5": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-6.0.3.tgz", - "integrity": "sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==", - "dev": true + "version": "20.12.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.7.tgz", + "integrity": "sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } }, - "node_modules/@types/prettier": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.6.3.tgz", - "integrity": "sha512-ymZk3LEC/fsut+/Q5qejp6R9O1rMxz3XaRHDV6kX8MrGAhOSPqVARbDi+EZvInBpw+BnCX3TD240byVkOfQsHg==", - "dev": true + "node_modules/@types/node-forge": { + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", + "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } }, "node_modules/@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", + "version": "6.9.15", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.15.tgz", + "integrity": "sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==", "dev": true }, "node_modules/@types/range-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", "dev": true }, "node_modules/@types/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", + "version": "0.12.2", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.2.tgz", + "integrity": "sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==", "dev": true }, "node_modules/@types/semver": { - "version": "7.3.13", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", - "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", + "version": "7.5.8", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", + "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", "dev": true }, + "node_modules/@types/send": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "dev": true, + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, "node_modules/@types/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", + "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", "dev": true, "dependencies": { "@types/express": "*" } }, "node_modules/@types/serve-static": { - "version": "1.13.10", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz", - "integrity": "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==", + "version": "1.15.7", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", + "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", "dev": true, "dependencies": { - "@types/mime": "^1", - "@types/node": "*" + "@types/http-errors": "*", + "@types/node": "*", + "@types/send": "*" } }, "node_modules/@types/sockjs": { - "version": "0.3.33", - "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", - "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", + "version": "0.3.36", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", + "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", "dev": true, "dependencies": { "@types/node": "*" } }, "node_modules/@types/stack-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", "dev": true }, "node_modules/@types/tough-cookie": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.2.tgz", - "integrity": "sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz", + "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==", "dev": true }, "node_modules/@types/ws": { - "version": "8.5.3", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz", - "integrity": "sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==", + "version": "8.5.10", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz", + "integrity": "sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==", "dev": true, "dependencies": { "@types/node": "*" } }, "node_modules/@types/yargs": { - "version": "17.0.10", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", - "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", + "version": "17.0.32", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", + "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", "dev": true, "dependencies": { "@types/yargs-parser": "*" } }, "node_modules/@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.42.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.42.1.tgz", - "integrity": "sha512-LyR6x784JCiJ1j6sH5Y0K6cdExqCCm8DJUTcwG5ThNXJj/G8o5E56u5EdG4SLy+bZAwZBswC+GYn3eGdttBVCg==", + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.7.1.tgz", + "integrity": "sha512-KwfdWXJBOviaBVhxO3p5TJiLpNuh2iyXyjmWN0f1nU87pwyvfS0EmjC6ukQVYVFJd/K1+0NWGPDXiyEyQorn0Q==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.42.1", - "@typescript-eslint/type-utils": "5.42.1", - "@typescript-eslint/utils": "5.42.1", + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "7.7.1", + "@typescript-eslint/type-utils": "7.7.1", + "@typescript-eslint/utils": "7.7.1", + "@typescript-eslint/visitor-keys": "7.7.1", "debug": "^4.3.4", - "ignore": "^5.2.0", - "natural-compare-lite": "^1.4.0", - "regexpp": "^3.2.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "graphemer": "^1.4.0", + "ignore": "^5.3.1", + "natural-compare": "^1.4.0", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "@typescript-eslint/parser": "^7.0.0", + "eslint": "^8.56.0" }, "peerDependenciesMeta": { "typescript": { @@ -3264,41 +3631,60 @@ } } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "node_modules/@typescript-eslint/eslint-plugin/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "dependencies": { - "lru-cache": "^6.0.0" + "yallist": "^4.0.0" }, - "bin": { - "semver": "bin/semver.js" + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" }, "engines": { "node": ">=10" } }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/@typescript-eslint/parser": { - "version": "5.42.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.42.1.tgz", - "integrity": "sha512-kAV+NiNBWVQDY9gDJDToTE/NO8BHi4f6b7zTsVAJoTkmB/zlfOpiEVBzHOKtlgTndCKe8vj9F/PuolemZSh50Q==", + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.7.1.tgz", + "integrity": "sha512-vmPzBOOtz48F6JAGVS/kZYk4EkXao6iGrD838sp1w3NQQC0W8ry/q641KU4PrG7AKNAf56NOcR8GOpH8l9FPCw==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.42.1", - "@typescript-eslint/types": "5.42.1", - "@typescript-eslint/typescript-estree": "5.42.1", + "@typescript-eslint/scope-manager": "7.7.1", + "@typescript-eslint/types": "7.7.1", + "@typescript-eslint/typescript-estree": "7.7.1", + "@typescript-eslint/visitor-keys": "7.7.1", "debug": "^4.3.4" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "eslint": "^8.56.0" }, "peerDependenciesMeta": { "typescript": { @@ -3307,16 +3693,16 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "5.42.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.42.1.tgz", - "integrity": "sha512-QAZY/CBP1Emx4rzxurgqj3rUinfsh/6mvuKbLNMfJMMKYLRBfweus8brgXF8f64ABkIZ3zdj2/rYYtF8eiuksQ==", + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.7.1.tgz", + "integrity": "sha512-PytBif2SF+9SpEUKynYn5g1RHFddJUcyynGpztX3l/ik7KmZEv19WCMhUBkHXPU9es/VWGD3/zg3wg90+Dh2rA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.42.1", - "@typescript-eslint/visitor-keys": "5.42.1" + "@typescript-eslint/types": "7.7.1", + "@typescript-eslint/visitor-keys": "7.7.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", @@ -3324,25 +3710,25 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "5.42.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.42.1.tgz", - "integrity": "sha512-WWiMChneex5w4xPIX56SSnQQo0tEOy5ZV2dqmj8Z371LJ0E+aymWD25JQ/l4FOuuX+Q49A7pzh/CGIQflxMVXg==", + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.7.1.tgz", + "integrity": "sha512-ZksJLW3WF7o75zaBPScdW1Gbkwhd/lyeXGf1kQCxJaOeITscoSl0MjynVvCzuV5boUz/3fOI06Lz8La55mu29Q==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "5.42.1", - "@typescript-eslint/utils": "5.42.1", + "@typescript-eslint/typescript-estree": "7.7.1", + "@typescript-eslint/utils": "7.7.1", "debug": "^4.3.4", - "tsutils": "^3.21.0" + "ts-api-utils": "^1.3.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "*" + "eslint": "^8.56.0" }, "peerDependenciesMeta": { "typescript": { @@ -3351,12 +3737,12 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "5.42.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.42.1.tgz", - "integrity": "sha512-Qrco9dsFF5lhalz+lLFtxs3ui1/YfC6NdXu+RAGBa8uSfn01cjO7ssCsjIsUs484vny9Xm699FSKwpkCcqwWwA==", + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.7.1.tgz", + "integrity": "sha512-AmPmnGW1ZLTpWa+/2omPrPfR7BcbUU4oha5VIbSbS1a1Tv966bklvLNXxp3mrbc+P2j4MNOTfDffNsk4o0c6/w==", "dev": true, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", @@ -3364,21 +3750,22 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.42.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.42.1.tgz", - "integrity": "sha512-qElc0bDOuO0B8wDhhW4mYVgi/LZL+igPwXtV87n69/kYC/7NG3MES0jHxJNCr4EP7kY1XVsRy8C/u3DYeTKQmw==", + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.7.1.tgz", + "integrity": "sha512-CXe0JHCXru8Fa36dteXqmH2YxngKJjkQLjxzoj6LYwzZ7qZvgsLSc+eqItCrqIop8Vl2UKoAi0StVWu97FQZIQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.42.1", - "@typescript-eslint/visitor-keys": "5.42.1", + "@typescript-eslint/types": "7.7.1", + "@typescript-eslint/visitor-keys": "7.7.1", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", @@ -3390,10 +3777,22 @@ } } }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -3405,36 +3804,53 @@ "node": ">=10" } }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/@typescript-eslint/utils": { - "version": "5.42.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.42.1.tgz", - "integrity": "sha512-Gxvf12xSp3iYZd/fLqiQRD4uKZjDNR01bQ+j8zvhPjpsZ4HmvEFL/tC4amGNyxN9Rq+iqvpHLhlqx6KTxz9ZyQ==", + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.7.1.tgz", + "integrity": "sha512-QUvBxPEaBXf41ZBbaidKICgVL8Hin0p6prQDu6bbetWo39BKbWJxRsErOzMNT1rXvTll+J7ChrbmMCXM9rsvOQ==", "dev": true, "dependencies": { - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.42.1", - "@typescript-eslint/types": "5.42.1", - "@typescript-eslint/typescript-estree": "5.42.1", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0", - "semver": "^7.3.7" + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.15", + "@types/semver": "^7.5.8", + "@typescript-eslint/scope-manager": "7.7.1", + "@typescript-eslint/types": "7.7.1", + "@typescript-eslint/typescript-estree": "7.7.1", + "semver": "^7.6.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "eslint": "^8.56.0" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" } }, "node_modules/@typescript-eslint/utils/node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -3446,17 +3862,23 @@ "node": ">=10" } }, + "node_modules/@typescript-eslint/utils/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.42.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.42.1.tgz", - "integrity": "sha512-LOQtSF4z+hejmpUvitPlc4hA7ERGoj2BVkesOcG91HCn8edLGUXbTrErmutmPbl8Bo9HjAvOO/zBKQHExXNA2A==", + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.7.1.tgz", + "integrity": "sha512-gBL3Eq25uADw1LQ9kVpf3hRM+DWzs0uZknHYK3hq4jcTPqVCClHGDnB6UUUV2SFeBeA4KWHWbbLqmbGcZ4FYbw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.42.1", - "eslint-visitor-keys": "^3.3.0" + "@typescript-eslint/types": "7.7.1", + "eslint-visitor-keys": "^3.4.3" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", @@ -3464,189 +3886,206 @@ } }, "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, "node_modules/@webassemblyjs/ast": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", - "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", + "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", "dev": true, "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" } }, "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", - "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", "dev": true }, "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", - "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", "dev": true }, "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", - "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", + "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", "dev": true }, "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", - "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", "dev": true, "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", "@xtuc/long": "4.2.2" } }, "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", - "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", "dev": true }, "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", - "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", + "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1" + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.12.1" } }, "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", - "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", "dev": true, "dependencies": { "@xtuc/ieee754": "^1.2.0" } }, "node_modules/@webassemblyjs/leb128": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", - "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", "dev": true, "dependencies": { "@xtuc/long": "4.2.2" } }, "node_modules/@webassemblyjs/utf8": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", - "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", "dev": true }, "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", - "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", + "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/helper-wasm-section": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-opt": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "@webassemblyjs/wast-printer": "1.11.1" + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-opt": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1", + "@webassemblyjs/wast-printer": "1.12.1" } }, "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", - "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", + "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" } }, "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", - "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", + "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1" + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1" } }, "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", - "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", + "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" } }, "node_modules/@webassemblyjs/wast-printer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", - "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", + "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/ast": "1.12.1", "@xtuc/long": "4.2.2" } }, "node_modules/@webpack-cli/configtest": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.2.0.tgz", - "integrity": "sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.1.1.tgz", + "integrity": "sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==", "dev": true, + "engines": { + "node": ">=14.15.0" + }, "peerDependencies": { - "webpack": "4.x.x || 5.x.x", - "webpack-cli": "4.x.x" + "webpack": "5.x.x", + "webpack-cli": "5.x.x" } }, "node_modules/@webpack-cli/info": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.5.0.tgz", - "integrity": "sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.2.tgz", + "integrity": "sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==", "dev": true, - "dependencies": { - "envinfo": "^7.7.3" + "engines": { + "node": ">=14.15.0" }, "peerDependencies": { - "webpack-cli": "4.x.x" + "webpack": "5.x.x", + "webpack-cli": "5.x.x" } }, "node_modules/@webpack-cli/serve": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.7.0.tgz", - "integrity": "sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.5.tgz", + "integrity": "sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==", "dev": true, + "engines": { + "node": ">=14.15.0" + }, "peerDependencies": { - "webpack-cli": "4.x.x" + "webpack": "5.x.x", + "webpack-cli": "5.x.x" }, "peerDependenciesMeta": { "webpack-dev-server": { @@ -3670,6 +4109,7 @@ "version": "2.0.6", "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", + "deprecated": "Use your platform's native atob() and btoa() methods instead", "dev": true }, "node_modules/accepts": { @@ -3686,9 +4126,9 @@ } }, "node_modules/acorn": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", - "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -3698,31 +4138,19 @@ } }, "node_modules/acorn-globals": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", - "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-7.0.1.tgz", + "integrity": "sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==", "dev": true, "dependencies": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1" - } - }, - "node_modules/acorn-globals/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" + "acorn": "^8.1.0", + "acorn-walk": "^8.0.2" } }, "node_modules/acorn-import-assertions": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", - "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", + "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", "dev": true, "peerDependencies": { "acorn": "^8" @@ -3738,9 +4166,9 @@ } }, "node_modules/acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", + "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", "dev": true, "engines": { "node": ">=0.4.0" @@ -3792,9 +4220,9 @@ } }, "node_modules/ajv-formats/node_modules/ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "dev": true, "dependencies": { "fast-deep-equal": "^3.1.1", @@ -3871,9 +4299,9 @@ } }, "node_modules/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, "dependencies": { "normalize-path": "^3.0.0", @@ -3892,10 +4320,26 @@ "sprintf-js": "~1.0.2" } }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", "dev": true }, "node_modules/array-union": { @@ -3907,10 +4351,32 @@ "node": ">=8" } }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/async": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", + "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==", "dev": true }, "node_modules/asynckit": { @@ -3919,6 +4385,21 @@ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", "dev": true }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/babel-code-frame": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", @@ -3992,21 +4473,21 @@ } }, "node_modules/babel-jest": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-28.1.3.tgz", - "integrity": "sha512-epUaPOEWMk3cWX0M/sPvCHHCe9fMFAa/9hXEgKP8nFfNl/jlGkE9ucq9NqkZGXLDduCJYS0UvSlPUwC0S+rH6Q==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", + "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", "dev": true, "dependencies": { - "@jest/transform": "^28.1.3", + "@jest/transform": "^29.7.0", "@types/babel__core": "^7.1.14", "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^28.1.3", + "babel-preset-jest": "^29.6.3", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "slash": "^3.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { "@babel/core": "^7.8.0" @@ -4092,12 +4573,12 @@ } }, "node_modules/babel-loader": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.1.0.tgz", - "integrity": "sha512-Antt61KJPinUMwHwIIz9T5zfMgevnfZkEVWYDWlG888fgdvRRGD0JTuf/fFozQnfT+uq64sk1bmdHDy/mOEWnA==", + "version": "9.1.3", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.1.3.tgz", + "integrity": "sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==", "dev": true, "dependencies": { - "find-cache-dir": "^3.3.2", + "find-cache-dir": "^4.0.0", "schema-utils": "^4.0.0" }, "engines": { @@ -4147,9 +4628,9 @@ } }, "node_modules/babel-plugin-jest-hoist": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-28.1.3.tgz", - "integrity": "sha512-Ys3tUKAmfnkRUpPdpa98eYrAR0nV+sSFUZZEGuQ2EbFd1y4SOLtD5QDNHAq+bb9a+bbXvYQC4b+ID/THIMcU6Q==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", + "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", "dev": true, "dependencies": { "@babel/template": "^7.3.3", @@ -4158,46 +4639,46 @@ "@types/babel__traverse": "^7.0.6" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", - "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", + "version": "0.4.11", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz", + "integrity": "sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.17.7", - "@babel/helper-define-polyfill-provider": "^0.3.3", - "semver": "^6.1.1" + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.6.2", + "semver": "^6.3.1" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", - "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==", + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.4.tgz", + "integrity": "sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg==", "dev": true, "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.3", - "core-js-compat": "^3.25.1" + "@babel/helper-define-polyfill-provider": "^0.6.1", + "core-js-compat": "^3.36.1" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", - "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==", + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz", + "integrity": "sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==", "dev": true, "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.3" + "@babel/helper-define-polyfill-provider": "^0.6.2" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/babel-preset-current-node-syntax": { @@ -4224,16 +4705,16 @@ } }, "node_modules/babel-preset-jest": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-28.1.3.tgz", - "integrity": "sha512-L+fupJvlWAHbQfn74coNX3zf60LXMJsezNvvx8eIh7iOR1luJ1poxYgQk1F8PYtNq/6QODDHCqsSnTFSWC491A==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", + "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", "dev": true, "dependencies": { - "babel-plugin-jest-hoist": "^28.1.3", + "babel-plugin-jest-hoist": "^29.6.3", "babel-preset-current-node-syntax": "^1.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { "@babel/core": "^7.0.0" @@ -4249,14 +4730,6 @@ "regenerator-runtime": "^0.11.0" } }, - "node_modules/babel-runtime/node_modules/core-js": { - "version": "2.6.12", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", - "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", - "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.", - "dev": true, - "hasInstallScript": true - }, "node_modules/babel-runtime/node_modules/regenerator-runtime": { "version": "0.11.1", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", @@ -4353,15 +4826,6 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, - "node_modules/base64-arraybuffer-es6": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/base64-arraybuffer-es6/-/base64-arraybuffer-es6-0.7.0.tgz", - "integrity": "sha512-ESyU/U1CFZDJUdr+neHRhNozeCv72Y7Vm0m1DCbjX3KBjT6eYocvAJlSk6+8+HkVwXlT1FNxhGW6q3UKAlCvvw==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/batch": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", @@ -4369,30 +4833,33 @@ "dev": true }, "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", "dev": true, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/body-parser": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", - "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", "dev": true, "dependencies": { "bytes": "3.1.2", - "content-type": "~1.0.4", + "content-type": "~1.0.5", "debug": "2.6.9", "depd": "2.0.0", "destroy": "1.2.0", "http-errors": "2.0.0", "iconv-lite": "0.4.24", "on-finished": "2.4.1", - "qs": "6.10.3", - "raw-body": "2.5.1", + "qs": "6.11.0", + "raw-body": "2.5.2", "type-is": "~1.6.18", "unpipe": "1.0.0" }, @@ -4426,13 +4893,11 @@ "dev": true }, "node_modules/bonjour-service": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.0.13.tgz", - "integrity": "sha512-LWKRU/7EqDUC9CTAQtuZl5HzBALoCYwtLhffW3et7vZMwv3bWLpJf8bRYlMD5OCcDpTfnPgNCV4yo9ZIaJGMiA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.2.1.tgz", + "integrity": "sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw==", "dev": true, "dependencies": { - "array-flatten": "^2.1.2", - "dns-equal": "^1.0.0", "fast-deep-equal": "^3.1.3", "multicast-dns": "^7.2.5" } @@ -4444,13 +4909,12 @@ "dev": true }, "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "balanced-match": "^1.0.0" } }, "node_modules/braces": { @@ -4465,16 +4929,10 @@ "node": ">=8" } }, - "node_modules/browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", - "dev": true - }, "node_modules/browserslist": { - "version": "4.21.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", - "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", + "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", "dev": true, "funding": [ { @@ -4484,13 +4942,17 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ], "dependencies": { - "caniuse-lite": "^1.0.30001400", - "electron-to-chromium": "^1.4.251", - "node-releases": "^2.0.6", - "update-browserslist-db": "^1.0.9" + "caniuse-lite": "^1.0.30001587", + "electron-to-chromium": "^1.4.668", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.13" }, "bin": { "browserslist": "cli.js" @@ -4526,6 +4988,21 @@ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, + "node_modules/bundle-name": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "dev": true, + "dependencies": { + "run-applescript": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/bytes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", @@ -4536,13 +5013,19 @@ } }, "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", "dev": true, "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -4589,9 +5072,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001431", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001431.tgz", - "integrity": "sha512-zBUoFU0ZcxpvSt9IU66dXVT/3ctO1cy4y9cscs1szkPlcWb6pasYM144GqrUygUbT+k7cmUCW61cvskjcv0enQ==", + "version": "1.0.30001614", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001614.tgz", + "integrity": "sha512-jmZQ1VpmlRwHgdP1/uiKzgiAuGOfLEJsYFP4+GBou/QQ4U6IOJCB4NP1c+1p9RGLpwObcT94jA5/uO+F1vBbog==", "dev": true, "funding": [ { @@ -4601,6 +5084,10 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ] }, @@ -4628,16 +5115,10 @@ } }, "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -4650,6 +5131,9 @@ "engines": { "node": ">= 8.10.0" }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, "optionalDependencies": { "fsevents": "~2.3.2" } @@ -4664,21 +5148,30 @@ } }, "node_modules/ci-info": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz", - "integrity": "sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==", - "dev": true + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } }, "node_modules/cjs-module-lexer": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", - "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.3.1.tgz", + "integrity": "sha512-a3KdPAANPbNE4ZUv9h6LckSl9zLsYOP4MBmhIPkRaeyybt+r4UghLvq+xw/YwUcC1gqylCkL4rdVs3Lwupjm4Q==", "dev": true }, "node_modules/clean-css": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.1.tgz", - "integrity": "sha512-lCr8OHhiWCTw4v8POJovCoh4T7I9U11yVsPjMWWnnMmp9ZowCxyad1Pathle/9HjaDp+fdQKjO9fQydE6RHTZg==", + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", + "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", "dev": true, "dependencies": { "source-map": "~0.6.0" @@ -4688,14 +5181,17 @@ } }, "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, "dependencies": { "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", + "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" } }, "node_modules/clone-deep": { @@ -4723,9 +5219,9 @@ } }, "node_modules/collect-v8-coverage": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", - "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", + "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", "dev": true }, "node_modules/color-convert": { @@ -4744,15 +5240,15 @@ "dev": true }, "node_modules/colord": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.2.tgz", - "integrity": "sha512-Uqbg+J445nc1TKn4FoDPS6ZZqAvEDnwrH42yo8B40JSOgSLxMZ/gt3h4nmCtPLQeXhjJJkqBx7SCY35WnIixaQ==", + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", "dev": true }, "node_modules/colorette": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", - "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", "dev": true }, "node_modules/combined-stream": { @@ -4776,10 +5272,10 @@ "node": ">= 6" } }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "node_modules/common-path-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", + "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", "dev": true }, "node_modules/compressible": { @@ -4827,6 +5323,12 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, + "node_modules/compression/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -4854,48 +5356,25 @@ "node": ">= 0.6" } }, - "node_modules/content-disposition/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", "dev": true, "engines": { "node": ">= 0.6" } }, "node_modules/convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.1" - } + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true }, "node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", "dev": true, "engines": { "node": ">= 0.6" @@ -4907,13 +5386,21 @@ "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", "dev": true }, + "node_modules/core-js": { + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", + "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", + "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.", + "dev": true, + "hasInstallScript": true + }, "node_modules/core-js-compat": { - "version": "3.26.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.26.0.tgz", - "integrity": "sha512-piOX9Go+Z4f9ZiBFLnZ5VrOpBl0h7IGCkiFUN11QTe6LjAvOT3ifL/5TdoizMh99hcGy5SoLyWbapIY/PIb/3A==", + "version": "3.37.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.37.0.tgz", + "integrity": "sha512-vYq4L+T8aS5UuFg4UwDhc7YNRWVeVZwltad9C/jV3R2LgVOpS9BDr7l/WL6BN0dbV3k1XejPTHqqEzJgsa0frA==", "dev": true, "dependencies": { - "browserslist": "^4.21.4" + "browserslist": "^4.23.0" }, "funding": { "type": "opencollective", @@ -4927,19 +5414,138 @@ "dev": true }, "node_modules/cosmiconfig": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", - "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", + "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", "dev": true, "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0", + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/cosmiconfig/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/cosmiconfig/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/create-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", + "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "prompts": "^2.0.1" + }, + "bin": { + "create-jest": "bin/create-jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/create-jest/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/create-jest/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/create-jest/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/create-jest/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/create-jest/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/create-jest/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, "node_modules/cross-spawn": { @@ -4957,21 +5563,21 @@ } }, "node_modules/css-declaration-sorter": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.3.0.tgz", - "integrity": "sha512-OGT677UGHJTAVMRhPO+HJ4oKln3wkBTwtDFH0ojbqm+MJm6xuDMHp2nkhh/ThaBqq20IbraBQSWKfSLNHQO9Og==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-7.2.0.tgz", + "integrity": "sha512-h70rUM+3PNFuaBDTLe8wF/cdWu+dOZmb7pJt8Z2sedYbAcQVQV/tEchueg3GWxwqS0cxtbxmaHEdkNACqcvsow==", "dev": true, "engines": { - "node": "^10 || ^12 || >=14" + "node": "^14 || ^16 || >=18" }, "peerDependencies": { "postcss": "^8.0.9" } }, "node_modules/css-loader": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.11.0.tgz", - "integrity": "sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-7.1.1.tgz", + "integrity": "sha512-OxIR5P2mjO1PSXk44bWuQ8XtMK4dpEqpIyERCx3ewOo3I8EmbcxMPUc5ScLtQfgXtOojoMv57So4V/C02HQLsw==", "dev": true, "dependencies": { "icss-utils": "^5.1.0", @@ -4984,7 +5590,7 @@ "semver": "^7.5.4" }, "engines": { - "node": ">= 12.13.0" + "node": ">= 18.12.0" }, "funding": { "type": "opencollective", @@ -4992,7 +5598,7 @@ }, "peerDependencies": { "@rspack/core": "0.x || 1.x", - "webpack": "^5.0.0" + "webpack": "^5.27.0" }, "peerDependenciesMeta": { "@rspack/core": { @@ -5003,6 +5609,18 @@ } } }, + "node_modules/css-loader/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/css-loader/node_modules/semver": { "version": "7.6.0", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", @@ -5018,21 +5636,27 @@ "node": ">=10" } }, + "node_modules/css-loader/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/css-minimizer-webpack-plugin": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-4.2.2.tgz", - "integrity": "sha512-s3Of/4jKfw1Hj9CxEO1E5oXhQAxlayuHO2y/ML+C6I9sQ7FdzfEV6QgMLN3vI+qFsjJGIAFLKtQK7t8BOXAIyA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-6.0.0.tgz", + "integrity": "sha512-BLpR9CCDkKvhO3i0oZQgad6v9pCxUuhSc5RT6iUEy9M8hBXi4TJb5vqF2GQ2deqYHmRi3O6IR9hgAZQWg0EBwA==", "dev": true, "dependencies": { - "cssnano": "^5.1.8", - "jest-worker": "^29.1.2", - "postcss": "^8.4.17", - "schema-utils": "^4.0.0", - "serialize-javascript": "^6.0.0", - "source-map": "^0.6.1" + "@jridgewell/trace-mapping": "^0.3.21", + "cssnano": "^6.0.3", + "jest-worker": "^29.7.0", + "postcss": "^8.4.33", + "schema-utils": "^4.2.0", + "serialize-javascript": "^6.0.2" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 18.12.0" }, "funding": { "type": "opencollective", @@ -5062,292 +5686,167 @@ } } }, - "node_modules/css-minimizer-webpack-plugin/node_modules/@jest/schemas": { - "version": "29.0.0", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.0.0.tgz", - "integrity": "sha512-3Ab5HgYIIAnS0HjqJHQYZS+zXc4tUmTmBH3z83ajI6afXp8X3ZtdLX+nXx+I7LNkJD7uN9LAVhgnjDgZa2z0kA==", + "node_modules/css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", "dev": true, "dependencies": { - "@sinclair/typebox": "^0.24.1" + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "funding": { + "url": "https://github.com/sponsors/fb55" } }, - "node_modules/css-minimizer-webpack-plugin/node_modules/@jest/types": { - "version": "29.3.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.3.1.tgz", - "integrity": "sha512-d0S0jmmTpjnhCmNpApgX3jrUZgZ22ivKJRvL2lli5hpCRoNnp1f85r2/wpKfXuYu8E7Jjh1hGfhPyup1NM5AmA==", + "node_modules/css-tree": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", + "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", "dev": true, "dependencies": { - "@jest/schemas": "^29.0.0", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" + "mdn-data": "2.0.30", + "source-map-js": "^1.0.1" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" } }, - "node_modules/css-minimizer-webpack-plugin/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, "engines": { - "node": ">=8" + "node": ">= 6" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/fb55" } }, - "node_modules/css-minimizer-webpack-plugin/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "bin": { + "cssesc": "bin/cssesc" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=4" } }, - "node_modules/css-minimizer-webpack-plugin/node_modules/chalk/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/cssnano": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-6.1.2.tgz", + "integrity": "sha512-rYk5UeX7VAM/u0lNqewCdasdtPK81CgX8wJFLEIXHbV2oldWRgJAsZrdhRXkV1NJzA2g850KiFm9mMU2HxNxMA==", "dev": true, "dependencies": { - "has-flag": "^4.0.0" + "cssnano-preset-default": "^6.1.2", + "lilconfig": "^3.1.1" }, "engines": { - "node": ">=8" - } - }, - "node_modules/css-minimizer-webpack-plugin/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" + "node": "^14 || ^16 || >=18.0" }, - "engines": { - "node": ">=7.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/cssnano" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/css-minimizer-webpack-plugin/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "node_modules/cssnano-preset-default": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-6.1.2.tgz", + "integrity": "sha512-1C0C+eNaeN8OcHQa193aRgYexyJtU8XwbdieEjClw+J9d94E41LwT6ivKH0WT+fYwYWB0Zp3I3IZ7tI/BbUbrg==", + "dev": true, + "dependencies": { + "browserslist": "^4.23.0", + "css-declaration-sorter": "^7.2.0", + "cssnano-utils": "^4.0.2", + "postcss-calc": "^9.0.1", + "postcss-colormin": "^6.1.0", + "postcss-convert-values": "^6.1.0", + "postcss-discard-comments": "^6.0.2", + "postcss-discard-duplicates": "^6.0.3", + "postcss-discard-empty": "^6.0.3", + "postcss-discard-overridden": "^6.0.2", + "postcss-merge-longhand": "^6.0.5", + "postcss-merge-rules": "^6.1.1", + "postcss-minify-font-values": "^6.1.0", + "postcss-minify-gradients": "^6.0.3", + "postcss-minify-params": "^6.1.0", + "postcss-minify-selectors": "^6.0.4", + "postcss-normalize-charset": "^6.0.2", + "postcss-normalize-display-values": "^6.0.2", + "postcss-normalize-positions": "^6.0.2", + "postcss-normalize-repeat-style": "^6.0.2", + "postcss-normalize-string": "^6.0.2", + "postcss-normalize-timing-functions": "^6.0.2", + "postcss-normalize-unicode": "^6.1.0", + "postcss-normalize-url": "^6.0.2", + "postcss-normalize-whitespace": "^6.0.2", + "postcss-ordered-values": "^6.0.2", + "postcss-reduce-initial": "^6.1.0", + "postcss-reduce-transforms": "^6.0.2", + "postcss-svgo": "^6.0.3", + "postcss-unique-selectors": "^6.0.4" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } }, - "node_modules/css-minimizer-webpack-plugin/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/cssnano-utils": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-4.0.2.tgz", + "integrity": "sha512-ZR1jHg+wZ8o4c3zqf1SIUSTIvm/9mU343FMR6Obe/unskbvpGhZOo1J6d/r8D1pzkRQYuwbcH3hToOuoA2G7oQ==", "dev": true, "engines": { - "node": ">=8" + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/css-minimizer-webpack-plugin/node_modules/jest-util": { - "version": "29.3.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.3.1.tgz", - "integrity": "sha512-7YOVZaiX7RJLv76ZfHt4nbNEzzTRiMW/IiOG7ZOKmTXmoGBxUDefgMAxQubu6WPVqP5zSzAdZG0FfLcC7HOIFQ==", + "node_modules/csso": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", + "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", "dev": true, "dependencies": { - "@jest/types": "^29.3.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" + "css-tree": "~2.2.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" } }, - "node_modules/css-minimizer-webpack-plugin/node_modules/jest-worker": { - "version": "29.3.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.3.1.tgz", - "integrity": "sha512-lY4AnnmsEWeiXirAIA0c9SDPbuCBq8IYuDVL8PMm0MZ2PEs2yPvRA/J64QBXuZp7CYKrDM/rmNrc9/i3KJQncw==", + "node_modules/csso/node_modules/css-tree": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", + "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", "dev": true, "dependencies": { - "@types/node": "*", - "jest-util": "^29.3.1", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" + "mdn-data": "2.0.28", + "source-map-js": "^1.0.1" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" } }, - "node_modules/css-minimizer-webpack-plugin/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", - "dev": true, - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "dev": true, - "dependencies": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "dev": true, - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true, - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cssnano": { - "version": "5.1.12", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.12.tgz", - "integrity": "sha512-TgvArbEZu0lk/dvg2ja+B7kYoD7BBCmn3+k58xD0qjrGHsFzXY/wKTo9M5egcUCabPol05e/PVoIu79s2JN4WQ==", - "dev": true, - "dependencies": { - "cssnano-preset-default": "^5.2.12", - "lilconfig": "^2.0.3", - "yaml": "^1.10.2" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/cssnano" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/cssnano-preset-default": { - "version": "5.2.12", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.12.tgz", - "integrity": "sha512-OyCBTZi+PXgylz9HAA5kHyoYhfGcYdwFmyaJzWnzxuGRtnMw/kR6ilW9XzlzlRAtB6PLT/r+prYgkef7hngFew==", - "dev": true, - "dependencies": { - "css-declaration-sorter": "^6.3.0", - "cssnano-utils": "^3.1.0", - "postcss-calc": "^8.2.3", - "postcss-colormin": "^5.3.0", - "postcss-convert-values": "^5.1.2", - "postcss-discard-comments": "^5.1.2", - "postcss-discard-duplicates": "^5.1.0", - "postcss-discard-empty": "^5.1.1", - "postcss-discard-overridden": "^5.1.0", - "postcss-merge-longhand": "^5.1.6", - "postcss-merge-rules": "^5.1.2", - "postcss-minify-font-values": "^5.1.0", - "postcss-minify-gradients": "^5.1.1", - "postcss-minify-params": "^5.1.3", - "postcss-minify-selectors": "^5.2.1", - "postcss-normalize-charset": "^5.1.0", - "postcss-normalize-display-values": "^5.1.0", - "postcss-normalize-positions": "^5.1.1", - "postcss-normalize-repeat-style": "^5.1.1", - "postcss-normalize-string": "^5.1.0", - "postcss-normalize-timing-functions": "^5.1.0", - "postcss-normalize-unicode": "^5.1.0", - "postcss-normalize-url": "^5.1.0", - "postcss-normalize-whitespace": "^5.1.1", - "postcss-ordered-values": "^5.1.3", - "postcss-reduce-initial": "^5.1.0", - "postcss-reduce-transforms": "^5.1.0", - "postcss-svgo": "^5.1.0", - "postcss-unique-selectors": "^5.1.1" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/cssnano-utils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", - "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/csso": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", - "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", - "dev": true, - "dependencies": { - "css-tree": "^1.1.2" - }, - "engines": { - "node": ">=8.0.0" - } + "node_modules/csso/node_modules/mdn-data": { + "version": "2.0.28", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", + "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", + "dev": true }, "node_modules/cssom": { "version": "0.5.0", @@ -5387,17 +5886,55 @@ "node": ">=12" } }, - "node_modules/data-urls/node_modules/whatwg-url": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", - "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", + "node_modules/data-view-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", "dev": true, "dependencies": { - "tr46": "^3.0.0", - "webidl-conversions": "^7.0.0" + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" }, "engines": { - "node": ">=12" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/debug": { @@ -5418,16 +5955,24 @@ } }, "node_modules/decimal.js": { - "version": "10.3.1", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", - "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==", + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", + "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==", "dev": true }, "node_modules/dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", - "dev": true + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz", + "integrity": "sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==", + "dev": true, + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" + }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } + } }, "node_modules/deep-is": { "version": "0.1.4", @@ -5436,14 +5981,42 @@ "dev": true }, "node_modules/deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", "dev": true, "engines": { "node": ">=0.10.0" } }, + "node_modules/default-browser": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz", + "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==", + "dev": true, + "dependencies": { + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser-id": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz", + "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/default-gateway": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", @@ -5456,21 +6029,42 @@ "node": ">= 10" } }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", "dev": true, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "dev": true, "dependencies": { + "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" }, @@ -5525,12 +6119,12 @@ "dev": true }, "node_modules/diff-sequences": { - "version": "28.1.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.1.1.tgz", - "integrity": "sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", "dev": true, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/dir-glob": { @@ -5545,16 +6139,10 @@ "node": ">=8" } }, - "node_modules/dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==", - "dev": true - }, "node_modules/dns-packet": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.4.0.tgz", - "integrity": "sha512-EgqGeaBB8hLiHLZtp/IbaDQTL8pZ0+IvwzSHA6d7VyMDM+B9hgddEMa9xjK5oYnw0ci0JQ6g2XCD7/f6cafU6g==", + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", + "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", "dev": true, "dependencies": { "@leichtgewicht/ip-codec": "^2.0.1" @@ -5598,6 +6186,15 @@ "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" } }, + "node_modules/dom-serializer/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/domelementtype": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", @@ -5614,6 +6211,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", + "deprecated": "Use your platform's native DOMException instead", "dev": true, "dependencies": { "webidl-conversions": "^7.0.0" @@ -5661,6 +6259,12 @@ "tslib": "^2.0.3" } }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -5668,9 +6272,9 @@ "dev": true }, "node_modules/ejs": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.8.tgz", - "integrity": "sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==", + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", "dev": true, "dependencies": { "jake": "^10.8.5" @@ -5683,15 +6287,15 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.284", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", - "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==", + "version": "1.4.750", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.750.tgz", + "integrity": "sha512-9ItEpeu15hW5m8jKdriL+BQrgwDTXEL9pn4SkillWFu73ZNNNQ2BKKLS+ZHv2vC9UkNhosAeyfxOf/5OSeTCPA==", "dev": true }, "node_modules/emittery": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz", - "integrity": "sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==", + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", "dev": true, "engines": { "node": ">=12" @@ -5716,9 +6320,9 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz", - "integrity": "sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==", + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.16.0.tgz", + "integrity": "sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA==", "dev": true, "dependencies": { "graceful-fs": "^4.2.4", @@ -5729,18 +6333,21 @@ } }, "node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", "dev": true, + "engines": { + "node": ">=0.12" + }, "funding": { "url": "https://github.com/fb55/entities?sponsor=1" } }, "node_modules/envinfo": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", - "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.13.0.tgz", + "integrity": "sha512-cvcaMr7KqXVh4nyzGTVqTum+gAiL265x5jUWQIDLq//zOGbW+gSW/C+OWLleY/rs9Qole6AZLMXPbtIFQbqu+Q==", "dev": true, "bin": { "envinfo": "dist/cli.js" @@ -5759,34 +6366,57 @@ } }, "node_modules/es-abstract": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz", - "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", + "version": "1.23.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", + "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.1", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.2", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", + "is-shared-array-buffer": "^1.0.3", "is-string": "^1.0.7", + "is-typed-array": "^1.1.13", "is-weakref": "^1.0.2", - "object-inspect": "^1.12.0", + "object-inspect": "^1.13.1", "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "regexp.prototype.flags": "^1.4.3", - "string.prototype.trimend": "^1.0.5", - "string.prototype.trimstart": "^1.0.5", - "unbox-primitive": "^1.0.2" + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.15" }, "engines": { "node": ">= 0.4" @@ -5795,12 +6425,59 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es-module-lexer": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", - "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.2.tgz", + "integrity": "sha512-l60ETUTmLqbVbVHv1J4/qj+M8nq7AwMzEcg3kmJDt9dCNrTk+yHcYFf/Kw75pMDwd9mPcIGCG5LcS20SxYRzFA==", "dev": true }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", + "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es-to-primitive": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", @@ -5825,9 +6502,9 @@ "dev": true }, "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", "dev": true, "engines": { "node": ">=6" @@ -5849,15 +6526,14 @@ } }, "node_modules/escodegen": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", - "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", "dev": true, "dependencies": { "esprima": "^4.0.1", "estraverse": "^5.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1" + "esutils": "^2.0.2" }, "bin": { "escodegen": "bin/escodegen.js", @@ -5879,101 +6555,49 @@ "node": ">=4.0" } }, - "node_modules/escodegen/node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", - "dev": true, - "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "node_modules/eslint": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", "dev": true, "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", - "dev": true, - "dependencies": { - "prelude-ls": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/eslint": { - "version": "8.27.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.27.0.tgz", - "integrity": "sha512-0y1bfG2ho7mty+SiILVf9PfuRA49ek4Nc60Wmmu62QlobNR+CeXa4xXIJgcuwSQgZiWaPH+5BDsctpIW0PR/wQ==", - "dev": true, - "dependencies": { - "@eslint/eslintrc": "^1.3.3", - "@humanwhocodes/config-array": "^0.11.6", + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.10.0", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.3.2", "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.4.0", - "esquery": "^1.4.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "find-up": "^5.0.0", "glob-parent": "^6.0.2", - "globals": "^13.15.0", - "grapheme-splitter": "^1.0.4", + "globals": "^13.19.0", + "graphemer": "^1.4.0", "ignore": "^5.2.0", - "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "is-path-inside": "^3.0.3", - "js-sdsl": "^4.1.4", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "regexpp": "^3.2.0", + "optionator": "^0.9.3", "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", "text-table": "^0.2.0" }, "bin": { @@ -6005,19 +6629,20 @@ } }, "node_modules/eslint-plugin-jest": { - "version": "26.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-26.6.0.tgz", - "integrity": "sha512-f8n46/97ZFdU4KqeQYqO8AEVGIhHWvkpgNBWHH3jrM28/y8llnbf3IjfIKv6p2pZIMinK1PCqbbROxs9Eud02Q==", + "version": "28.3.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-28.3.0.tgz", + "integrity": "sha512-5LjCSSno8E+IUCOX4hJiIb/upPIgpkaDEcaN/40gOcw26t/5UTLHFc4JdxKjOOvGTh0XdCu+fNr0fpOVNvcxMA==", "dev": true, "dependencies": { - "@typescript-eslint/utils": "^5.10.0" + "@typescript-eslint/utils": "^6.0.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" }, "peerDependencies": { - "@typescript-eslint/eslint-plugin": "^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "@typescript-eslint/eslint-plugin": "^6.0.0 || ^7.0.0", + "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0", + "jest": "*" }, "peerDependenciesMeta": { "@typescript-eslint/eslint-plugin": { @@ -6028,106 +6653,210 @@ } } }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "node_modules/eslint-plugin-jest/node_modules/@typescript-eslint/scope-manager": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz", + "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==", "dev": true, "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0" }, "engines": { - "node": ">=8.0.0" + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "node_modules/eslint-plugin-jest/node_modules/@typescript-eslint/types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", + "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==", + "dev": true, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/eslint-plugin-jest/node_modules/@typescript-eslint/typescript-estree": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz", + "integrity": "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==", "dev": true, "dependencies": { - "eslint-visitor-keys": "^2.0.0" + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "9.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" }, "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { - "url": "https://github.com/sponsors/mysticatea" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" }, - "peerDependencies": { - "eslint": ">=5" + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "node_modules/eslint-plugin-jest/node_modules/@typescript-eslint/utils": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz", + "integrity": "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==", "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/typescript-estree": "6.21.0", + "semver": "^7.5.4" + }, "engines": { - "node": ">=10" + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" } }, - "node_modules/eslint-webpack-plugin": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-3.2.0.tgz", - "integrity": "sha512-avrKcGncpPbPSUHX6B3stNGzkKFto3eL+DKM4+VyMrVnhPc3vRczVlCq3uhuFOdRvDHTVXuzwk1ZKUrqDQHQ9w==", + "node_modules/eslint-plugin-jest/node_modules/@typescript-eslint/visitor-keys": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz", + "integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==", "dev": true, "dependencies": { - "@types/eslint": "^7.29.0 || ^8.4.1", - "jest-worker": "^28.0.2", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "schema-utils": "^4.0.0" + "@typescript-eslint/types": "6.21.0", + "eslint-visitor-keys": "^3.4.1" }, "engines": { - "node": ">= 12.13.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/webpack" + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/eslint-plugin-jest/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0", - "webpack": "^5.0.0" + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint-webpack-plugin/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/eslint-plugin-jest/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/eslint-webpack-plugin/node_modules/jest-worker": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz", - "integrity": "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==", + "node_modules/eslint-plugin-jest/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "dev": true, "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/eslint-plugin-jest/node_modules/semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": ">=10" } }, - "node_modules/eslint-webpack-plugin/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "node_modules/eslint-plugin-jest/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, "dependencies": { - "has-flag": "^4.0.0" + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, "engines": { "node": ">=10" + } + }, + "node_modules/eslint-webpack-plugin": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-4.1.0.tgz", + "integrity": "sha512-C3wAG2jyockIhN0YRLuKieKj2nx/gnE/VHmoHemD5ifnAtY6ZU+jNPfzPoX4Zd6RIbUyWTiZUh/ofUlBhoAX7w==", + "dev": true, + "dependencies": { + "@types/eslint": "^8.56.5", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "schema-utils": "^4.2.0" + }, + "engines": { + "node": ">= 14.15.0" }, "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "eslint": "^8.0.0", + "webpack": "^5.0.0" } }, "node_modules/eslint/node_modules/ansi-styles": { @@ -6151,6 +6880,16 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, + "node_modules/eslint/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, "node_modules/eslint/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -6198,9 +6937,9 @@ } }, "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, "dependencies": { "esrecurse": "^4.3.0", @@ -6208,15 +6947,21 @@ }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/eslint/node_modules/eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/eslint/node_modules/estraverse": { @@ -6257,9 +7002,9 @@ } }, "node_modules/eslint/node_modules/globals": { - "version": "13.17.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", - "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -6307,6 +7052,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/eslint/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/eslint/node_modules/p-locate": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", @@ -6347,14 +7104,14 @@ } }, "node_modules/espree": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", - "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, "dependencies": { - "acorn": "^8.8.0", + "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" + "eslint-visitor-keys": "^3.4.1" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -6364,12 +7121,15 @@ } }, "node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/esprima": { @@ -6386,9 +7146,9 @@ } }, "node_modules/esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", "dev": true, "dependencies": { "estraverse": "^5.1.0" @@ -6502,33 +7262,33 @@ } }, "node_modules/expect": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/expect/-/expect-28.1.3.tgz", - "integrity": "sha512-eEh0xn8HlsuOBxFgIss+2mX85VAS4Qy3OSkjV7rlBWljtA4oWH37glVGyOZSZvErDT/yBywZdPGwCXuTvSG85g==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", "dev": true, "dependencies": { - "@jest/expect-utils": "^28.1.3", - "jest-get-type": "^28.0.2", - "jest-matcher-utils": "^28.1.3", - "jest-message-util": "^28.1.3", - "jest-util": "^28.1.3" + "@jest/expect-utils": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/express": { - "version": "4.18.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", - "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", + "version": "4.19.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", + "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", "dev": true, "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.20.0", + "body-parser": "1.20.2", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.5.0", + "cookie": "0.6.0", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", @@ -6544,7 +7304,7 @@ "parseurl": "~1.3.3", "path-to-regexp": "0.1.7", "proxy-addr": "~2.0.7", - "qs": "6.10.3", + "qs": "6.11.0", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", "send": "0.18.0", @@ -6559,12 +7319,6 @@ "node": ">= 0.10.0" } }, - "node_modules/express/node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "dev": true - }, "node_modules/express/node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -6580,33 +7334,13 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, - "node_modules/express/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, "node_modules/fake-indexeddb": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fake-indexeddb/-/fake-indexeddb-4.0.0.tgz", - "integrity": "sha512-oCfWSJ/qvQn1XPZ8SHX6kY3zr1t+bN7faZ/lltGY0SBGhFOPXnWf0+pbO/MOAgfMx6khC2gK3S/bvAgQpuQHDQ==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/fake-indexeddb/-/fake-indexeddb-5.0.2.tgz", + "integrity": "sha512-cB507r5T3D55DfclY01GLkninZLfU7HXV/mhVRTnTRm5k2u+fY7Fof2dBkr80p5t7G7dlA/G5dI87QiMdPpMCQ==", "dev": true, - "dependencies": { - "realistic-structured-clone": "^3.0.0" + "engines": { + "node": ">=18" } }, "node_modules/fast-deep-equal": { @@ -6616,9 +7350,9 @@ "dev": true }, "node_modules/fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "dev": true, "dependencies": { "@nodelib/fs.stat": "^2.0.2", @@ -6644,15 +7378,18 @@ "dev": true }, "node_modules/fastest-levenshtein": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", - "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==", - "dev": true + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "dev": true, + "engines": { + "node": ">= 4.9.1" + } }, "node_modules/fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", "dev": true, "dependencies": { "reusify": "^1.0.4" @@ -6671,9 +7408,9 @@ } }, "node_modules/fb-watchman": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", - "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", "dev": true, "dependencies": { "bser": "2.1.1" @@ -6700,19 +7437,10 @@ "minimatch": "^5.0.1" } }, - "node_modules/filelist/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, "node_modules/filelist/node_modules/minimatch": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", - "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" @@ -6767,32 +7495,16 @@ "dev": true }, "node_modules/find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "dev": true, - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/avajs/find-cache-dir?sponsor=1" - } - }, - "node_modules/find-cache-dir/node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-4.0.0.tgz", + "integrity": "sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==", "dev": true, "dependencies": { - "semver": "^6.0.0" + "common-path-prefix": "^3.0.0", + "pkg-dir": "^7.0.0" }, "engines": { - "node": ">=8" + "node": ">=14.16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -6811,13 +7523,23 @@ "node": ">=8" } }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "bin": { + "flat": "cli.js" + } + }, "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", "dev": true, "dependencies": { - "flatted": "^3.1.0", + "flatted": "^3.2.9", + "keyv": "^4.5.3", "rimraf": "^3.0.2" }, "engines": { @@ -6825,15 +7547,15 @@ } }, "node_modules/flatted": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz", - "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", "dev": true }, "node_modules/flow-bin": { - "version": "0.192.0", - "resolved": "https://registry.npmjs.org/flow-bin/-/flow-bin-0.192.0.tgz", - "integrity": "sha512-RlHhXn9m1IRTB5yKhnLGgLWq9z4qJ76slum/DXvmTlrAUPaVcmU/IsTHiY4JpjqK7nFz4oyrnU/YES8xDVBoZg==", + "version": "0.235.1", + "resolved": "https://registry.npmjs.org/flow-bin/-/flow-bin-0.235.1.tgz", + "integrity": "sha512-SuXw5NQDIdSBMg/NgvS5mzdI6dPEYWubnucnYno9wWLd6xoK1nkH6t2Dn2GsML9bIoVqp3E/ni1jo18A4G4FrQ==", "dev": true, "bin": { "flow": "cli.js" @@ -6849,9 +7571,9 @@ "dev": true }, "node_modules/follow-redirects": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", - "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==", + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", "dev": true, "funding": [ { @@ -6868,16 +7590,53 @@ } } }, - "node_modules/fork-ts-checker-webpack-plugin": { - "version": "7.2.13", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-7.2.13.tgz", - "integrity": "sha512-fR3WRkOb4bQdWB/y7ssDUlVdrclvwtyCUIHCfivAoYxq9dF7XfrDKbMdZIfwJ7hxIAqkYSGeU7lLJE6xrxIBdg==", + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.16.7", - "chalk": "^4.1.2", - "chokidar": "^3.5.3", - "cosmiconfig": "^7.0.1", + "is-callable": "^1.1.3" + } + }, + "node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/fork-ts-checker-webpack-plugin": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-9.0.2.tgz", + "integrity": "sha512-Uochze2R8peoN1XqlSi/rGUkDQpRogtLFocP9+PGu68zk1BDAKXfdeCdyVZpgTk8V8WFVQXdEz426VKjXLO1Gg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.16.7", + "chalk": "^4.1.2", + "chokidar": "^3.5.3", + "cosmiconfig": "^8.2.0", "deepmerge": "^4.2.2", "fs-extra": "^10.0.0", "memfs": "^3.4.1", @@ -6893,13 +7652,7 @@ }, "peerDependencies": { "typescript": ">3.6.0", - "vue-template-compiler": "*", "webpack": "^5.11.0" - }, - "peerDependenciesMeta": { - "vue-template-compiler": { - "optional": true - } } }, "node_modules/fork-ts-checker-webpack-plugin/node_modules/ansi-styles": { @@ -6917,6 +7670,16 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, "node_modules/fork-ts-checker-webpack-plugin/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -6960,10 +7723,34 @@ "node": ">=8" } }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/fork-ts-checker-webpack-plugin/node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", "dev": true, "dependencies": { "@types/json-schema": "^7.0.8", @@ -6979,9 +7766,9 @@ } }, "node_modules/fork-ts-checker-webpack-plugin/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -7005,6 +7792,12 @@ "node": ">=8" } }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/form-data": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", @@ -7052,9 +7845,9 @@ } }, "node_modules/fs-monkey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", - "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.5.tgz", + "integrity": "sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew==", "dev": true }, "node_modules/fs-readdir-recursive": { @@ -7070,9 +7863,9 @@ "dev": true }, "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, "hasInstallScript": true, "optional": true, @@ -7084,21 +7877,24 @@ } }, "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" }, "engines": { "node": ">= 0.4" @@ -7135,14 +7931,19 @@ } }, "node_modules/get-intrinsic": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", - "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", "dev": true, "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -7170,13 +7971,14 @@ } }, "node_modules/get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" }, "engines": { "node": ">= 0.4" @@ -7223,6 +8025,28 @@ "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", "dev": true }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", @@ -7232,6 +8056,21 @@ "node": ">=4" } }, + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/globby": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", @@ -7261,16 +8100,28 @@ "node": ">=8" } }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "dev": true }, - "node_modules/grapheme-splitter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true }, "node_modules/handle-thing": { @@ -7279,18 +8130,6 @@ "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", "dev": true }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, "node_modules/has-ansi": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", @@ -7331,12 +8170,24 @@ } }, "node_modules/has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dev": true, "dependencies": { - "get-intrinsic": "^1.1.1" + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "dev": true, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -7355,12 +8206,12 @@ } }, "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dev": true, "dependencies": { - "has-symbols": "^1.0.2" + "has-symbols": "^1.0.3" }, "engines": { "node": ">= 0.4" @@ -7369,6 +8220,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", @@ -7396,10 +8259,16 @@ "wbuf": "^1.1.0" } }, + "node_modules/hpack.js/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, "node_modules/hpack.js/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, "dependencies": { "core-util-is": "~1.0.0", @@ -7411,6 +8280,21 @@ "util-deprecate": "~1.0.1" } }, + "node_modules/hpack.js/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/hpack.js/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/html-encoding-sniffer": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", @@ -7424,10 +8308,20 @@ } }, "node_modules/html-entities": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", - "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==", - "dev": true + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz", + "integrity": "sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ] }, "node_modules/html-escaper": { "version": "2.0.2", @@ -7436,16 +8330,16 @@ "dev": true }, "node_modules/html-loader": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/html-loader/-/html-loader-4.2.0.tgz", - "integrity": "sha512-OxCHD3yt+qwqng2vvcaPApCEvbx+nXWu+v69TYHx1FO8bffHn/JjHtE3TTQZmHjwvnJe4xxzuecetDVBrQR1Zg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/html-loader/-/html-loader-5.0.0.tgz", + "integrity": "sha512-puaGKdjdVVIFRtgIC2n5dt5bt0N5j6heXlAQZ4Do1MLjHmOT1gCE1Ogg7XZNeJlnOVHHsrZKGs5dfh+XwZ3XPw==", "dev": true, "dependencies": { - "html-minifier-terser": "^7.0.0", - "parse5": "^7.0.0" + "html-minifier-terser": "^7.2.0", + "parse5": "^7.1.2" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 18.12.0" }, "funding": { "type": "opencollective", @@ -7455,123 +8349,96 @@ "webpack": "^5.0.0" } }, - "node_modules/html-loader/node_modules/clean-css": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.2.0.tgz", - "integrity": "sha512-2639sWGa43EMmG7fn8mdVuBSs6HuWaSor+ZPoFWzenBc6oN+td8YhTfghWXZ25G1NiiSvz8bOFBS7PdSbTiqEA==", + "node_modules/html-minifier-terser": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-7.2.0.tgz", + "integrity": "sha512-tXgn3QfqPIpGl9o+K5tpcj3/MN4SfLtsx2GWwBC3SSd0tXQGyF3gsSqad8loJgKZGM3ZxbYDd5yhiBIdWpmvLA==", "dev": true, "dependencies": { - "source-map": "~0.6.0" + "camel-case": "^4.1.2", + "clean-css": "~5.3.2", + "commander": "^10.0.0", + "entities": "^4.4.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.15.1" + }, + "bin": { + "html-minifier-terser": "cli.js" }, "engines": { - "node": ">= 10.0" + "node": "^14.13.1 || >=16.0.0" } }, - "node_modules/html-loader/node_modules/commander": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.4.1.tgz", - "integrity": "sha512-5EEkTNyHNGFPD2H+c/dXXfQZYa/scCKasxWcXJaWnNJ99pnQN9Vnmqow+p+PlFPE63Q6mThaZws1T+HxfpgtPw==", + "node_modules/html-minifier-terser/node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", "dev": true, "engines": { - "node": "^12.20.0 || >=14" + "node": ">=14" } }, - "node_modules/html-loader/node_modules/entities": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.3.1.tgz", - "integrity": "sha512-o4q/dYJlmyjP2zfnaWDUC6A3BQFmVTX+tZPezK7k0GLSU9QYCauscf5Y+qcEPzKL+EixVouYDgLQK5H9GrLpkg==", + "node_modules/html-webpack-plugin": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.0.tgz", + "integrity": "sha512-iwaY4wzbe48AfKLZ/Cc8k0L+FKG6oSNRaZ8x5A/T/IVDGyXcbHncM9TdDa93wn0FsSm82FhTKW7f3vS61thXAw==", "dev": true, + "dependencies": { + "@types/html-minifier-terser": "^6.0.0", + "html-minifier-terser": "^6.0.2", + "lodash": "^4.17.21", + "pretty-error": "^4.0.0", + "tapable": "^2.0.0" + }, "engines": { - "node": ">=0.12" + "node": ">=10.13.0" }, "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/html-webpack-plugin" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "webpack": "^5.20.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } } }, - "node_modules/html-loader/node_modules/html-minifier-terser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-7.0.0.tgz", - "integrity": "sha512-Adqk0b/pWKIQiGvEAuzPKpBKNHiwblr3QSGS7TTr6v+xXKV9AI2k4vWW+6Oytt6Z5SeBnfvYypKOnz8r75pz3Q==", + "node_modules/html-webpack-plugin/node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/html-webpack-plugin/node_modules/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", "dev": true, "dependencies": { "camel-case": "^4.1.2", - "clean-css": "5.2.0", - "commander": "^9.4.0", - "entities": "^4.3.1", + "clean-css": "^5.2.2", + "commander": "^8.3.0", + "he": "^1.2.0", "param-case": "^3.0.4", "relateurl": "^0.2.7", - "terser": "^5.14.2" + "terser": "^5.10.0" }, "bin": { "html-minifier-terser": "cli.js" }, "engines": { - "node": "^14.13.1 || >=16.0.0" - } - }, - "node_modules/html-loader/node_modules/parse5": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.0.0.tgz", - "integrity": "sha512-y/t8IXSPWTuRZqXc0ajH/UwDj4mnqLEbSttNbThcFhGrZuOyoyvNBO85PBp2jQa55wY9d07PBNjsK8ZP3K5U6g==", - "dev": true, - "dependencies": { - "entities": "^4.3.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", - "dev": true, - "dependencies": { - "camel-case": "^4.1.2", - "clean-css": "^5.2.2", - "commander": "^8.3.0", - "he": "^1.2.0", - "param-case": "^3.0.4", - "relateurl": "^0.2.7", - "terser": "^5.10.0" - }, - "bin": { - "html-minifier-terser": "cli.js" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/html-minifier-terser/node_modules/commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "dev": true, - "engines": { - "node": ">= 12" - } - }, - "node_modules/html-webpack-plugin": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz", - "integrity": "sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==", - "dev": true, - "dependencies": { - "@types/html-minifier-terser": "^6.0.0", - "html-minifier-terser": "^6.0.2", - "lodash": "^4.17.21", - "pretty-error": "^4.0.0", - "tapable": "^2.0.0" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/html-webpack-plugin" - }, - "peerDependencies": { - "webpack": "^5.20.0" + "node": ">=12" } }, "node_modules/htmlparser2": { @@ -7593,6 +8460,15 @@ "entities": "^2.0.0" } }, + "node_modules/htmlparser2/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/http-deceiver": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", @@ -7695,6 +8571,15 @@ "node": ">=10.17.0" } }, + "node_modules/hyperdyperid": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/hyperdyperid/-/hyperdyperid-1.2.0.tgz", + "integrity": "sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==", + "dev": true, + "engines": { + "node": ">=10.18" + } + }, "node_modules/iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -7720,9 +8605,9 @@ } }, "node_modules/ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", "dev": true, "engines": { "node": ">= 4" @@ -7778,6 +8663,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/import-local/node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", @@ -7804,13 +8701,13 @@ "dev": true }, "node_modules/internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", "dev": true, "dependencies": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", + "es-errors": "^1.3.0", + "hasown": "^2.0.0", "side-channel": "^1.0.4" }, "engines": { @@ -7818,12 +8715,12 @@ } }, "node_modules/interpret": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", - "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", + "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", "dev": true, "engines": { - "node": ">= 0.10" + "node": ">=10.13.0" } }, "node_modules/invariant": { @@ -7836,14 +8733,30 @@ } }, "node_modules/ipaddr.js": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", - "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz", + "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==", "dev": true, "engines": { "node": ">= 10" } }, + "node_modules/is-array-buffer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -7891,9 +8804,9 @@ } }, "node_modules/is-callable": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true, "engines": { "node": ">= 0.4" @@ -7903,12 +8816,27 @@ } }, "node_modules/is-core-module": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", - "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "dev": true, + "dependencies": { + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", "dev": true, "dependencies": { - "has": "^1.0.3" + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -7930,15 +8858,15 @@ } }, "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", "dev": true, "bin": { "is-docker": "cli.js" }, "engines": { - "node": ">=8" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -7983,10 +8911,28 @@ "node": ">=0.10.0" } }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "dev": true, + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", "dev": true, "engines": { "node": ">= 0.4" @@ -7995,6 +8941,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-network-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.1.0.tgz", + "integrity": "sha512-tUdRRAnhT+OtCZR/LxZelH/C7QtjtFrTu5tXCA8pl55eTUElUHT+GPYV8MBMBvea/j+NxQqVt3LbWMRir7Gx9g==", + "dev": true, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -8075,12 +9033,15 @@ } }, "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2" + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -8128,6 +9089,21 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "dev": true, + "dependencies": { + "which-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-weakref": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", @@ -8141,21 +9117,24 @@ } }, "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", + "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", "dev": true, "dependencies": { - "is-docker": "^2.0.0" + "is-inside-container": "^1.0.0" }, "engines": { - "node": ">=8" + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", "dev": true }, "node_modules/isexe": { @@ -8174,18 +9153,18 @@ } }, "node_modules/istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/istanbul-lib-instrument": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.0.tgz", - "integrity": "sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", "dev": true, "dependencies": { "@babel/core": "^7.12.3", @@ -8199,17 +9178,17 @@ } }, "node_modules/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", "dev": true, "dependencies": { "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", + "make-dir": "^4.0.0", "supports-color": "^7.1.0" }, "engines": { - "node": ">=8" + "node": ">=10" } }, "node_modules/istanbul-lib-report/node_modules/has-flag": { @@ -8221,21 +9200,48 @@ "node": ">=8" } }, + "node_modules/istanbul-lib-report/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/istanbul-lib-report/node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", "dev": true, "dependencies": { - "semver": "^6.0.0" + "semver": "^7.5.3" }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/istanbul-lib-report/node_modules/semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/istanbul-lib-report/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -8248,6 +9254,12 @@ "node": ">=8" } }, + "node_modules/istanbul-lib-report/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/istanbul-lib-source-maps": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", @@ -8263,9 +9275,9 @@ } }, "node_modules/istanbul-reports": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", - "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", "dev": true, "dependencies": { "html-escaper": "^2.0.0", @@ -8275,16 +9287,34 @@ "node": ">=8" } }, + "node_modules/jackspeak": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "dev": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, "node_modules/jake": { - "version": "10.8.5", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz", - "integrity": "sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==", + "version": "10.8.7", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.7.tgz", + "integrity": "sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==", "dev": true, "dependencies": { "async": "^3.2.3", "chalk": "^4.0.2", - "filelist": "^1.0.1", - "minimatch": "^3.0.4" + "filelist": "^1.0.4", + "minimatch": "^3.1.2" }, "bin": { "jake": "bin/cli.js" @@ -8308,6 +9338,16 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/jake/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, "node_modules/jake/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -8351,6 +9391,18 @@ "node": ">=8" } }, + "node_modules/jake/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/jake/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -8364,21 +9416,21 @@ } }, "node_modules/jest": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest/-/jest-28.1.3.tgz", - "integrity": "sha512-N4GT5on8UkZgH0O5LUavMRV1EDEhNTL0KEfRmDIeZHSV7p2XgLoY9t9VDUgL6o+yfdgYHVxuz81G8oB9VG5uyA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", + "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", "dev": true, "dependencies": { - "@jest/core": "^28.1.3", - "@jest/types": "^28.1.3", + "@jest/core": "^29.7.0", + "@jest/types": "^29.6.3", "import-local": "^3.0.2", - "jest-cli": "^28.1.3" + "jest-cli": "^29.7.0" }, "bin": { "jest": "bin/jest.js" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" @@ -8390,46 +9442,48 @@ } }, "node_modules/jest-changed-files": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-28.1.3.tgz", - "integrity": "sha512-esaOfUWJXk2nfZt9SPyC8gA1kNfdKLkQWyzsMlqq8msYSlNKfmZxfRgZn4Cd4MGVUF+7v6dBs0d5TOAKa7iIiA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", + "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", "dev": true, "dependencies": { "execa": "^5.0.0", + "jest-util": "^29.7.0", "p-limit": "^3.1.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-circus": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-28.1.3.tgz", - "integrity": "sha512-cZ+eS5zc79MBwt+IhQhiEp0OeBddpc1n8MBo1nMB8A7oPMKEO+Sre+wHaLJexQUj9Ya/8NOBY0RESUgYjB6fow==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", + "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", "dev": true, "dependencies": { - "@jest/environment": "^28.1.3", - "@jest/expect": "^28.1.3", - "@jest/test-result": "^28.1.3", - "@jest/types": "^28.1.3", + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", - "dedent": "^0.7.0", + "dedent": "^1.0.0", "is-generator-fn": "^2.0.0", - "jest-each": "^28.1.3", - "jest-matcher-utils": "^28.1.3", - "jest-message-util": "^28.1.3", - "jest-runtime": "^28.1.3", - "jest-snapshot": "^28.1.3", - "jest-util": "^28.1.3", + "jest-each": "^29.7.0", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", "p-limit": "^3.1.0", - "pretty-format": "^28.1.3", + "pretty-format": "^29.7.0", + "pure-rand": "^6.0.0", "slash": "^3.0.0", "stack-utils": "^2.0.3" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-circus/node_modules/ansi-styles": { @@ -8512,29 +9566,28 @@ } }, "node_modules/jest-cli": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-28.1.3.tgz", - "integrity": "sha512-roY3kvrv57Azn1yPgdTebPAXvdR2xfezaKKYzVxZ6It/5NCxzJym6tUI5P1zkdWhfUYkxEI9uZWcQdaFLo8mJQ==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", + "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", "dev": true, "dependencies": { - "@jest/core": "^28.1.3", - "@jest/test-result": "^28.1.3", - "@jest/types": "^28.1.3", + "@jest/core": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", "chalk": "^4.0.0", + "create-jest": "^29.7.0", "exit": "^0.1.2", - "graceful-fs": "^4.2.9", "import-local": "^3.0.2", - "jest-config": "^28.1.3", - "jest-util": "^28.1.3", - "jest-validate": "^28.1.3", - "prompts": "^2.0.1", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", "yargs": "^17.3.1" }, "bin": { "jest": "bin/jest.js" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" @@ -8616,36 +9669,36 @@ } }, "node_modules/jest-config": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-28.1.3.tgz", - "integrity": "sha512-MG3INjByJ0J4AsNBm7T3hsuxKQqFIiRo/AUqb1q9LRKI5UU6Aar9JHbr9Ivn1TVwfUD9KirRoM/T6u8XlcQPHQ==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", + "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", "dev": true, "dependencies": { "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^28.1.3", - "@jest/types": "^28.1.3", - "babel-jest": "^28.1.3", + "@jest/test-sequencer": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-jest": "^29.7.0", "chalk": "^4.0.0", "ci-info": "^3.2.0", "deepmerge": "^4.2.2", "glob": "^7.1.3", "graceful-fs": "^4.2.9", - "jest-circus": "^28.1.3", - "jest-environment-node": "^28.1.3", - "jest-get-type": "^28.0.2", - "jest-regex-util": "^28.0.2", - "jest-resolve": "^28.1.3", - "jest-runner": "^28.1.3", - "jest-util": "^28.1.3", - "jest-validate": "^28.1.3", + "jest-circus": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", "micromatch": "^4.0.4", "parse-json": "^5.2.0", - "pretty-format": "^28.1.3", + "pretty-format": "^29.7.0", "slash": "^3.0.0", "strip-json-comments": "^3.1.1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { "@types/node": "*", @@ -8740,18 +9793,18 @@ } }, "node_modules/jest-diff": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.3.tgz", - "integrity": "sha512-8RqP1B/OXzjjTWkqMX67iqgwBVJRgCyKD3L9nq+6ZqJMdvjE8RgHktqZ6jNrkdMT+dJuYNI3rhQpxaz7drJHfw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", "dev": true, "dependencies": { "chalk": "^4.0.0", - "diff-sequences": "^28.1.1", - "jest-get-type": "^28.0.2", - "pretty-format": "^28.1.3" + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-diff/node_modules/ansi-styles": { @@ -8825,31 +9878,31 @@ } }, "node_modules/jest-docblock": { - "version": "28.1.1", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-28.1.1.tgz", - "integrity": "sha512-3wayBVNiOYx0cwAbl9rwm5kKFP8yHH3d/fkEaL02NPTkDojPtheGB7HZSFY4wzX+DxyrvhXz0KSCVksmCknCuA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", + "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", "dev": true, "dependencies": { "detect-newline": "^3.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-each": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-28.1.3.tgz", - "integrity": "sha512-arT1z4sg2yABU5uogObVPvSlSMQlDA48owx07BDPAiasW0yYpYHYOo4HHLz9q0BVzDVU4hILFjzJw0So9aCL/g==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", + "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", "dev": true, "dependencies": { - "@jest/types": "^28.1.3", + "@jest/types": "^29.6.3", "chalk": "^4.0.0", - "jest-get-type": "^28.0.2", - "jest-util": "^28.1.3", - "pretty-format": "^28.1.3" + "jest-get-type": "^29.6.3", + "jest-util": "^29.7.0", + "pretty-format": "^29.7.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-each/node_modules/ansi-styles": { @@ -8923,310 +9976,139 @@ } }, "node_modules/jest-environment-jsdom": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-28.1.3.tgz", - "integrity": "sha512-HnlGUmZRdxfCByd3GM2F100DgQOajUBzEitjGqIREcb45kGjZvRrKUdlaF6escXBdcXNl0OBh+1ZrfeZT3GnAg==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-29.7.0.tgz", + "integrity": "sha512-k9iQbsf9OyOfdzWH8HDmrRT0gSIcX+FLNW7IQq94tFX0gynPwqDTW0Ho6iMVNjGz/nb+l/vW3dWM2bbLLpkbXA==", "dev": true, "dependencies": { - "@jest/environment": "^28.1.3", - "@jest/fake-timers": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/jsdom": "^16.2.4", + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/jsdom": "^20.0.0", "@types/node": "*", - "jest-mock": "^28.1.3", - "jest-util": "^28.1.3", - "jsdom": "^19.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-environment-node": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-28.1.3.tgz", - "integrity": "sha512-ugP6XOhEpjAEhGYvp5Xj989ns5cB1K6ZdjBYuS30umT4CQEETaxSiPcZ/E1kFktX4GkrcM4qu07IIlDYX1gp+A==", - "dev": true, - "dependencies": { - "@jest/environment": "^28.1.3", - "@jest/fake-timers": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/node": "*", - "jest-mock": "^28.1.3", - "jest-util": "^28.1.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-extended": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/jest-extended/-/jest-extended-3.2.2.tgz", - "integrity": "sha512-hjnKdy3xBUTbe3CH8nc5WDDvX2btn5x04XXcN1AGqUKT48dzqeF4oWvz+wW21N66lV5+OFmJB387dU3YRZfOSA==", - "dev": true, - "dependencies": { - "jest-diff": "^29.0.0", - "jest-get-type": "^29.0.0" + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0", + "jsdom": "^20.0.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { - "jest": ">=27.2.5" + "canvas": "^2.5.0" }, "peerDependenciesMeta": { - "jest": { + "canvas": { "optional": true } } }, - "node_modules/jest-extended/node_modules/@jest/schemas": { - "version": "29.0.0", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.0.0.tgz", - "integrity": "sha512-3Ab5HgYIIAnS0HjqJHQYZS+zXc4tUmTmBH3z83ajI6afXp8X3ZtdLX+nXx+I7LNkJD7uN9LAVhgnjDgZa2z0kA==", - "dev": true, - "dependencies": { - "@sinclair/typebox": "^0.24.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-extended/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-extended/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-extended/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-extended/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-extended/node_modules/diff-sequences": { - "version": "29.3.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.3.1.tgz", - "integrity": "sha512-hlM3QR272NXCi4pq+N4Kok4kOp6EsgOM3ZSpJI7Da3UAs+Ttsi8MRmB6trM/lhyzUxGfOgnpkHtgqm5Q/CTcfQ==", - "dev": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-extended/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-extended/node_modules/jest-diff": { - "version": "29.3.1", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.3.1.tgz", - "integrity": "sha512-vU8vyiO7568tmin2lA3r2DP8oRvzhvRcD4DjpXc6uGveQodyk7CKLhQlCSiwgx3g0pFaE88/KLZ0yaTWMc4Uiw==", + "node_modules/jest-environment-node": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", + "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", "dev": true, "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^29.3.1", - "jest-get-type": "^29.2.0", - "pretty-format": "^29.3.1" + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-extended/node_modules/jest-get-type": { - "version": "29.2.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.2.0.tgz", - "integrity": "sha512-uXNJlg8hKFEnDgFsrCjznB+sTxdkuqiCL6zMgA75qEbAJjJYTs9XPrvDctrEig2GDow22T/LvHgO57iJhXB/UA==", - "dev": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-extended/node_modules/pretty-format": { - "version": "29.3.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.3.1.tgz", - "integrity": "sha512-FyLnmb1cYJV8biEIiRyzRFvs2lry7PPIvOqKVe1GCUEYg4YGmlx1qG9EJNMxArYm7piII4qb8UV1Pncq5dxmcg==", + "node_modules/jest-extended": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/jest-extended/-/jest-extended-4.0.2.tgz", + "integrity": "sha512-FH7aaPgtGYHc9mRjriS0ZEHYM5/W69tLrFTIdzm+yJgeoCmmrSB/luSfMSqWP9O29QWHPEmJ4qmU6EwsZideog==", "dev": true, "dependencies": { - "@jest/schemas": "^29.0.0", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" + "jest-diff": "^29.0.0", + "jest-get-type": "^29.0.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-extended/node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "engines": { - "node": ">=10" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-extended/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" + "peerDependencies": { + "jest": ">=27.2.5" }, - "engines": { - "node": ">=8" + "peerDependenciesMeta": { + "jest": { + "optional": true + } } }, "node_modules/jest-get-type": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", - "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", "dev": true, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-haste-map": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-28.1.3.tgz", - "integrity": "sha512-3S+RQWDXccXDKSWnkHa/dPwt+2qwA8CJzR61w3FoYCvoo3Pn8tvGcysmMF0Bj0EX5RYvAI2EIvC57OmotfdtKA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", "dev": true, "dependencies": { - "@jest/types": "^28.1.3", + "@jest/types": "^29.6.3", "@types/graceful-fs": "^4.1.3", "@types/node": "*", "anymatch": "^3.0.3", "fb-watchman": "^2.0.0", "graceful-fs": "^4.2.9", - "jest-regex-util": "^28.0.2", - "jest-util": "^28.1.3", - "jest-worker": "^28.1.3", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", "micromatch": "^4.0.4", "walker": "^1.0.8" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "optionalDependencies": { "fsevents": "^2.3.2" } }, - "node_modules/jest-haste-map/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-haste-map/node_modules/jest-worker": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz", - "integrity": "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==", - "dev": true, - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-haste-map/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, "node_modules/jest-leak-detector": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-28.1.3.tgz", - "integrity": "sha512-WFVJhnQsiKtDEo5lG2mM0v40QWnBM+zMdHHyJs8AWZ7J0QZJS59MsyKeJHWhpBZBH32S48FOVvGyOFT1h0DlqA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", + "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", "dev": true, "dependencies": { - "jest-get-type": "^28.0.2", - "pretty-format": "^28.1.3" + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-localstorage-mock": { - "version": "2.4.22", - "resolved": "https://registry.npmjs.org/jest-localstorage-mock/-/jest-localstorage-mock-2.4.22.tgz", - "integrity": "sha512-60PWSDFQOS5v7JzSmYLM3dPLg0JLl+2Vc4lIEz/rj2yrXJzegsFLn7anwc5IL0WzJbBa/Las064CHbFg491/DQ==", + "version": "2.4.26", + "resolved": "https://registry.npmjs.org/jest-localstorage-mock/-/jest-localstorage-mock-2.4.26.tgz", + "integrity": "sha512-owAJrYnjulVlMIXOYQIPRCCn3MmqI3GzgfZCXdD3/pmwrIvFMXcKVWZ+aMc44IzaASapg0Z4SEFxR+v5qxDA2w==", "dev": true, "engines": { "node": ">=6.16.0" } }, "node_modules/jest-matcher-utils": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.3.tgz", - "integrity": "sha512-kQeJ7qHemKfbzKoGjHHrRKH6atgxMk8Enkk2iPQ3XwO6oE/KYD8lMYOziCkeSB9G4adPM4nR1DE8Tf5JeWH6Bw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", "dev": true, "dependencies": { "chalk": "^4.0.0", - "jest-diff": "^28.1.3", - "jest-get-type": "^28.0.2", - "pretty-format": "^28.1.3" + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-matcher-utils/node_modules/ansi-styles": { @@ -9300,23 +10182,23 @@ } }, "node_modules/jest-message-util": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz", - "integrity": "sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", "dev": true, "dependencies": { "@babel/code-frame": "^7.12.13", - "@jest/types": "^28.1.3", + "@jest/types": "^29.6.3", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "micromatch": "^4.0.4", - "pretty-format": "^28.1.3", + "pretty-format": "^29.7.0", "slash": "^3.0.0", "stack-utils": "^2.0.3" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-message-util/node_modules/ansi-styles": { @@ -9399,22 +10281,23 @@ } }, "node_modules/jest-mock": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-28.1.3.tgz", - "integrity": "sha512-o3J2jr6dMMWYVH4Lh/NKmDXdosrsJgi4AviS8oXLujcjpCMBb1FMsblDnOXKZKfSiHLxYub1eS0IHuRXsio9eA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", "dev": true, "dependencies": { - "@jest/types": "^28.1.3", - "@types/node": "*" + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.7.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-pnp-resolver": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", - "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", "dev": true, "engines": { "node": ">=6" @@ -9429,45 +10312,45 @@ } }, "node_modules/jest-regex-util": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", - "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", "dev": true, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-resolve": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-28.1.3.tgz", - "integrity": "sha512-Z1W3tTjE6QaNI90qo/BJpfnvpxtaFTFw5CDgwpyE/Kz8U/06N1Hjf4ia9quUhCh39qIGWF1ZuxFiBiJQwSEYKQ==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", + "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", "dev": true, "dependencies": { "chalk": "^4.0.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^28.1.3", + "jest-haste-map": "^29.7.0", "jest-pnp-resolver": "^1.2.2", - "jest-util": "^28.1.3", - "jest-validate": "^28.1.3", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", "resolve": "^1.20.0", - "resolve.exports": "^1.1.0", + "resolve.exports": "^2.0.0", "slash": "^3.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-resolve-dependencies": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-28.1.3.tgz", - "integrity": "sha512-qa0QO2Q0XzQoNPouMbCc7Bvtsem8eQgVPNkwn9LnS+R2n8DaVDPL/U1gngC0LTl1RYXJU0uJa2BMC2DbTfFrHA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", + "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", "dev": true, "dependencies": { - "jest-regex-util": "^28.0.2", - "jest-snapshot": "^28.1.3" + "jest-regex-util": "^29.6.3", + "jest-snapshot": "^29.7.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-resolve/node_modules/ansi-styles": { @@ -9550,35 +10433,35 @@ } }, "node_modules/jest-runner": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-28.1.3.tgz", - "integrity": "sha512-GkMw4D/0USd62OVO0oEgjn23TM+YJa2U2Wu5zz9xsQB1MxWKDOlrnykPxnMsN0tnJllfLPinHTka61u0QhaxBA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", + "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", "dev": true, "dependencies": { - "@jest/console": "^28.1.3", - "@jest/environment": "^28.1.3", - "@jest/test-result": "^28.1.3", - "@jest/transform": "^28.1.3", - "@jest/types": "^28.1.3", + "@jest/console": "^29.7.0", + "@jest/environment": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", - "emittery": "^0.10.2", + "emittery": "^0.13.1", "graceful-fs": "^4.2.9", - "jest-docblock": "^28.1.1", - "jest-environment-node": "^28.1.3", - "jest-haste-map": "^28.1.3", - "jest-leak-detector": "^28.1.3", - "jest-message-util": "^28.1.3", - "jest-resolve": "^28.1.3", - "jest-runtime": "^28.1.3", - "jest-util": "^28.1.3", - "jest-watcher": "^28.1.3", - "jest-worker": "^28.1.3", + "jest-docblock": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-leak-detector": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-resolve": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-util": "^29.7.0", + "jest-watcher": "^29.7.0", + "jest-worker": "^29.7.0", "p-limit": "^3.1.0", "source-map-support": "0.5.13" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-runner/node_modules/ansi-styles": { @@ -9639,35 +10522,6 @@ "node": ">=8" } }, - "node_modules/jest-runner/node_modules/jest-worker": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz", - "integrity": "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==", - "dev": true, - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-runner/node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, "node_modules/jest-runner/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -9681,36 +10535,36 @@ } }, "node_modules/jest-runtime": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-28.1.3.tgz", - "integrity": "sha512-NU+881ScBQQLc1JHG5eJGU7Ui3kLKrmwCPPtYsJtBykixrM2OhVQlpMmFWJjMyDfdkGgBMNjXCGB/ebzsgNGQw==", - "dev": true, - "dependencies": { - "@jest/environment": "^28.1.3", - "@jest/fake-timers": "^28.1.3", - "@jest/globals": "^28.1.3", - "@jest/source-map": "^28.1.2", - "@jest/test-result": "^28.1.3", - "@jest/transform": "^28.1.3", - "@jest/types": "^28.1.3", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", + "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/globals": "^29.7.0", + "@jest/source-map": "^29.6.3", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", "chalk": "^4.0.0", "cjs-module-lexer": "^1.0.0", "collect-v8-coverage": "^1.0.0", - "execa": "^5.0.0", "glob": "^7.1.3", "graceful-fs": "^4.2.9", - "jest-haste-map": "^28.1.3", - "jest-message-util": "^28.1.3", - "jest-mock": "^28.1.3", - "jest-regex-util": "^28.0.2", - "jest-resolve": "^28.1.3", - "jest-snapshot": "^28.1.3", - "jest-util": "^28.1.3", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", "slash": "^3.0.0", "strip-bom": "^4.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-runtime/node_modules/ansi-styles": { @@ -9793,37 +10647,34 @@ } }, "node_modules/jest-snapshot": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-28.1.3.tgz", - "integrity": "sha512-4lzMgtiNlc3DU/8lZfmqxN3AYD6GGLbl+72rdBpXvcV+whX7mDrREzkPdp2RnmfIiWBg1YbuFSkXduF2JcafJg==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", + "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", "dev": true, "dependencies": { "@babel/core": "^7.11.6", "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/traverse": "^7.7.2", "@babel/types": "^7.3.3", - "@jest/expect-utils": "^28.1.3", - "@jest/transform": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/babel__traverse": "^7.0.6", - "@types/prettier": "^2.1.5", + "@jest/expect-utils": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", "babel-preset-current-node-syntax": "^1.0.0", "chalk": "^4.0.0", - "expect": "^28.1.3", + "expect": "^29.7.0", "graceful-fs": "^4.2.9", - "jest-diff": "^28.1.3", - "jest-get-type": "^28.0.2", - "jest-haste-map": "^28.1.3", - "jest-matcher-utils": "^28.1.3", - "jest-message-util": "^28.1.3", - "jest-util": "^28.1.3", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", "natural-compare": "^1.4.0", - "pretty-format": "^28.1.3", - "semver": "^7.3.5" + "pretty-format": "^29.7.0", + "semver": "^7.5.3" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-snapshot/node_modules/ansi-styles": { @@ -9884,10 +10735,22 @@ "node": ">=8" } }, + "node_modules/jest-snapshot/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/jest-snapshot/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -9911,13 +10774,19 @@ "node": ">=8" } }, + "node_modules/jest-snapshot/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/jest-util": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", - "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", "dev": true, "dependencies": { - "@jest/types": "^28.1.3", + "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -9925,7 +10794,7 @@ "picomatch": "^2.2.3" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-util/node_modules/ansi-styles": { @@ -9999,20 +10868,20 @@ } }, "node_modules/jest-validate": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-28.1.3.tgz", - "integrity": "sha512-SZbOGBWEsaTxBGCOpsRWlXlvNkvTkY0XxRfh7zYmvd8uL5Qzyg0CHAXiXKROflh801quA6+/DsT4ODDthOC/OA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", "dev": true, "dependencies": { - "@jest/types": "^28.1.3", + "@jest/types": "^29.6.3", "camelcase": "^6.2.0", "chalk": "^4.0.0", - "jest-get-type": "^28.0.2", + "jest-get-type": "^29.6.3", "leven": "^3.1.0", - "pretty-format": "^28.1.3" + "pretty-format": "^29.7.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-validate/node_modules/ansi-styles": { @@ -10098,22 +10967,22 @@ } }, "node_modules/jest-watcher": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.3.tgz", - "integrity": "sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", + "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", "dev": true, "dependencies": { - "@jest/test-result": "^28.1.3", - "@jest/types": "^28.1.3", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", - "emittery": "^0.10.2", - "jest-util": "^28.1.3", + "emittery": "^0.13.1", + "jest-util": "^29.7.0", "string-length": "^4.0.1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-watcher/node_modules/ansi-styles": { @@ -10187,17 +11056,18 @@ } }, "node_modules/jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", "dev": true, "dependencies": { "@types/node": "*", + "jest-util": "^29.7.0", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" }, "engines": { - "node": ">= 10.13.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-worker/node_modules/has-flag": { @@ -10224,12 +11094,6 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/js-sdsl": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.1.5.tgz", - "integrity": "sha512-08bOAKweV2NUC1wqTtf3qZlnpOX/R2DU9ikpjOHs0H+ibQv3zpncVQg6um4uYtRtrwIX8M4Nh3ytK4HGlYAq7Q==", - "dev": true - }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -10250,41 +11114,40 @@ } }, "node_modules/jsdom": { - "version": "19.0.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-19.0.0.tgz", - "integrity": "sha512-RYAyjCbxy/vri/CfnjUWJQQtZ3LKlLnDqj+9XLNnJPgEGeirZs3hllKR20re8LUZ6o1b1X4Jat+Qd26zmP41+A==", + "version": "20.0.3", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.3.tgz", + "integrity": "sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==", "dev": true, "dependencies": { - "abab": "^2.0.5", - "acorn": "^8.5.0", - "acorn-globals": "^6.0.0", + "abab": "^2.0.6", + "acorn": "^8.8.1", + "acorn-globals": "^7.0.0", "cssom": "^0.5.0", "cssstyle": "^2.3.0", - "data-urls": "^3.0.1", - "decimal.js": "^10.3.1", + "data-urls": "^3.0.2", + "decimal.js": "^10.4.2", "domexception": "^4.0.0", "escodegen": "^2.0.0", "form-data": "^4.0.0", "html-encoding-sniffer": "^3.0.0", "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.1", "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.0", - "parse5": "6.0.1", - "saxes": "^5.0.1", + "nwsapi": "^2.2.2", + "parse5": "^7.1.1", + "saxes": "^6.0.0", "symbol-tree": "^3.2.4", - "tough-cookie": "^4.0.0", - "w3c-hr-time": "^1.0.2", - "w3c-xmlserializer": "^3.0.0", + "tough-cookie": "^4.1.2", + "w3c-xmlserializer": "^4.0.0", "webidl-conversions": "^7.0.0", "whatwg-encoding": "^2.0.0", "whatwg-mimetype": "^3.0.0", - "whatwg-url": "^10.0.0", - "ws": "^8.2.3", + "whatwg-url": "^11.0.0", + "ws": "^8.11.0", "xml-name-validator": "^4.0.0" }, "engines": { - "node": ">=12" + "node": ">=14" }, "peerDependencies": { "canvas": "^2.5.0" @@ -10307,6 +11170,12 @@ "node": ">=4" } }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, "node_modules/json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", @@ -10355,6 +11224,15 @@ "graceful-fs": "^4.1.6" } }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, "node_modules/kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -10373,6 +11251,16 @@ "node": ">=6" } }, + "node_modules/launch-editor": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.1.tgz", + "integrity": "sha512-eB/uXmFVpY4zezmGp5XtU21kwo7GBbKB+EQ+UZeWtGb9yAM5xt/Evk+lYH3eRNAtId+ej4u7TYPFZ07w4s7rRw==", + "dev": true, + "dependencies": { + "picocolors": "^1.0.0", + "shell-quote": "^1.8.1" + } + }, "node_modules/leven": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", @@ -10396,12 +11284,15 @@ } }, "node_modules/lilconfig": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz", - "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.1.tgz", + "integrity": "sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==", "dev": true, "engines": { - "node": ">=10" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" } }, "node_modules/lines-and-columns": { @@ -10529,15 +11420,12 @@ } }, "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" + "yallist": "^3.0.2" } }, "node_modules/make-dir": { @@ -10554,9 +11442,9 @@ } }, "node_modules/make-dir/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, "bin": { "semver": "bin/semver" @@ -10578,9 +11466,9 @@ } }, "node_modules/mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "version": "2.0.30", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", + "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", "dev": true }, "node_modules/media-typer": { @@ -10593,12 +11481,12 @@ } }, "node_modules/memfs": { - "version": "3.4.7", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.7.tgz", - "integrity": "sha512-ygaiUSNalBX85388uskeCyhSAoOSgzBbtVCr9jA2RROssFL9Q19/ZXFqS+2Th2sr1ewNIWgFdLzLC3Yl1Zv+lw==", + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", + "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", "dev": true, "dependencies": { - "fs-monkey": "^1.0.3" + "fs-monkey": "^1.0.4" }, "engines": { "node": ">= 4.0.0" @@ -10699,12 +11587,13 @@ } }, "node_modules/mini-css-extract-plugin": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.6.1.tgz", - "integrity": "sha512-wd+SD57/K6DiV7jIR34P+s3uckTRuQvx0tKPcvjFlrEylk6P4mQ2KSWk1hblj1Kxaqok7LogKOieygXqBczNlg==", + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.0.tgz", + "integrity": "sha512-Zs1YsZVfemekSZG+44vBsYTLQORkPMwnlv+aehcxK/NLKC+EGhDB39/YePYYqx/sTk6NnYpuqikhSn7+JIevTA==", "dev": true, "dependencies": { - "schema-utils": "^4.0.0" + "schema-utils": "^4.0.0", + "tapable": "^2.2.1" }, "engines": { "node": ">= 12.13.0" @@ -10724,15 +11613,27 @@ "dev": true }, "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", "dev": true, "dependencies": { - "brace-expansion": "^1.1.7" + "brace-expansion": "^2.0.1" }, "engines": { - "node": "*" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" } }, "node_modules/ms": { @@ -10778,12 +11679,6 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, - "node_modules/natural-compare-lite": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", - "dev": true - }, "node_modules/negotiator": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", @@ -10816,9 +11711,9 @@ } }, "node_modules/node-abort-controller": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.0.1.tgz", - "integrity": "sha512-/ujIVxthRs+7q6hsdjHMaj8hRG9NuWmwrz+JdRwZ14jdFoKSkm+vDsCbF9PLpnSqjaWQJuTmVtcWHNLr+vrOFw==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.1.1.tgz", + "integrity": "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==", "dev": true }, "node_modules/node-forge": { @@ -10837,9 +11732,9 @@ "dev": true }, "node_modules/node-releases": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", - "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", "dev": true }, "node_modules/normalize-package-data": { @@ -10855,9 +11750,9 @@ } }, "node_modules/normalize-package-data/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, "bin": { "semver": "bin/semver" @@ -10872,18 +11767,6 @@ "node": ">=0.10.0" } }, - "node_modules/normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/npm-run-all": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", @@ -10909,6 +11792,16 @@ "node": ">= 4" } }, + "node_modules/npm-run-all/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, "node_modules/npm-run-all/node_modules/cross-spawn": { "version": "6.0.5", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", @@ -10925,6 +11818,18 @@ "node": ">=4.8" } }, + "node_modules/npm-run-all/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/npm-run-all/node_modules/path-key": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", @@ -10935,9 +11840,9 @@ } }, "node_modules/npm-run-all/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, "bin": { "semver": "bin/semver" @@ -11001,15 +11906,15 @@ } }, "node_modules/nwsapi": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.1.tgz", - "integrity": "sha512-JYOWTeFoS0Z93587vRJgASD5Ut11fYl5NyihP3KrYBvMe1FRRs6RN7m20SA/16GM4P6hTnZjT+UmDOt38UeXNg==", + "version": "2.2.9", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.9.tgz", + "integrity": "sha512-2f3F0SEEer8bBu0dsNCFF50N0cTThV1nWFYcEYFZttdW0lDAoybv9cQoK7X7/68Z89S7FoRrVjP1LPX4XRf9vg==", "dev": true }, "node_modules/object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -11025,14 +11930,14 @@ } }, "node_modules/object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", "object-keys": "^1.1.1" }, "engines": { @@ -11094,26 +11999,27 @@ } }, "node_modules/open": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", - "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/open/-/open-10.1.0.tgz", + "integrity": "sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==", "dev": true, "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" + "default-browser": "^5.2.1", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "is-wsl": "^3.1.0" }, "engines": { - "node": ">=12" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "dev": true, "dependencies": { "deep-is": "^0.1.3", @@ -11121,7 +12027,7 @@ "levn": "^0.4.1", "prelude-ls": "^1.2.1", "type-check": "^0.4.0", - "word-wrap": "^1.2.3" + "word-wrap": "^1.2.5" }, "engines": { "node": ">= 0.8.0" @@ -11170,16 +12076,20 @@ } }, "node_modules/p-retry": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", - "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-6.2.0.tgz", + "integrity": "sha512-JA6nkq6hKyWLLasXQXUrO4z8BUZGUt/LjlJxx8Gb2+2ntodU/SS63YZ8b0LUTbQ8ZB9iwOfhEPhg4ykKnn2KsA==", "dev": true, "dependencies": { - "@types/retry": "0.12.0", + "@types/retry": "0.12.2", + "is-network-error": "^1.0.0", "retry": "^0.13.1" }, "engines": { - "node": ">=8" + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/p-try": { @@ -11232,10 +12142,16 @@ } }, "node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "dev": true, + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } }, "node_modules/parseurl": { "version": "1.3.3", @@ -11289,6 +12205,31 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, + "node_modules/path-scurry": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.2.tgz", + "integrity": "sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==", + "dev": true, + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", + "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", + "dev": true, + "engines": { + "node": "14 || >=16.14" + } + }, "node_modules/path-to-regexp": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", @@ -11344,24 +12285,118 @@ } }, "node_modules/pirates": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", - "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", "dev": true, "engines": { "node": ">= 6" } }, "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz", + "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==", "dev": true, "dependencies": { - "find-up": "^4.0.0" + "find-up": "^6.3.0" }, "engines": { - "node": ">=8" + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", + "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", + "dev": true, + "dependencies": { + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", + "dev": true, + "dependencies": { + "p-locate": "^6.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^1.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "dev": true, + "dependencies": { + "p-limit": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/pkg-dir/node_modules/yocto-queue": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", + "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", + "dev": true, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "dev": true, + "engines": { + "node": ">= 0.4" } }, "node_modules/postcss": { @@ -11393,196 +12428,199 @@ } }, "node_modules/postcss-calc": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", - "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-9.0.1.tgz", + "integrity": "sha512-TipgjGyzP5QzEhsOZUaIkeO5mKeMFpebWzRogWG/ysonUlnHcq5aJe0jOjpfzUU8PeSaBQnrE8ehR0QA5vs8PQ==", "dev": true, "dependencies": { - "postcss-selector-parser": "^6.0.9", + "postcss-selector-parser": "^6.0.11", "postcss-value-parser": "^4.2.0" }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, "peerDependencies": { "postcss": "^8.2.2" } }, "node_modules/postcss-colormin": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.0.tgz", - "integrity": "sha512-WdDO4gOFG2Z8n4P8TWBpshnL3JpmNmJwdnfP2gbk2qBA8PWwOYcmjmI/t3CmMeL72a7Hkd+x/Mg9O2/0rD54Pg==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-6.1.0.tgz", + "integrity": "sha512-x9yX7DOxeMAR+BgGVnNSAxmAj98NX/YxEMNFP+SDCEeNLb2r3i6Hh1ksMsnW8Ub5SLCpbescQqn9YEbE9554Sw==", "dev": true, "dependencies": { - "browserslist": "^4.16.6", + "browserslist": "^4.23.0", "caniuse-api": "^3.0.0", - "colord": "^2.9.1", + "colord": "^2.9.3", "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^14 || ^16 || >=18.0" }, "peerDependencies": { - "postcss": "^8.2.15" + "postcss": "^8.4.31" } }, "node_modules/postcss-convert-values": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.2.tgz", - "integrity": "sha512-c6Hzc4GAv95B7suy4udszX9Zy4ETyMCgFPUDtWjdFTKH1SE9eFY/jEpHSwTH1QPuwxHpWslhckUQWbNRM4ho5g==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-6.1.0.tgz", + "integrity": "sha512-zx8IwP/ts9WvUM6NkVSkiU902QZL1bwPhaVaLynPtCsOTqp+ZKbNi+s6XJg3rfqpKGA/oc7Oxk5t8pOQJcwl/w==", "dev": true, "dependencies": { - "browserslist": "^4.20.3", + "browserslist": "^4.23.0", "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^14 || ^16 || >=18.0" }, "peerDependencies": { - "postcss": "^8.2.15" + "postcss": "^8.4.31" } }, "node_modules/postcss-discard-comments": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", - "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-6.0.2.tgz", + "integrity": "sha512-65w/uIqhSBBfQmYnG92FO1mWZjJ4GL5b8atm5Yw2UgrwD7HiNiSSNwJor1eCFGzUgYnN/iIknhNRVqjrrpuglw==", "dev": true, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^14 || ^16 || >=18.0" }, "peerDependencies": { - "postcss": "^8.2.15" + "postcss": "^8.4.31" } }, "node_modules/postcss-discard-duplicates": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", - "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-6.0.3.tgz", + "integrity": "sha512-+JA0DCvc5XvFAxwx6f/e68gQu/7Z9ud584VLmcgto28eB8FqSFZwtrLwB5Kcp70eIoWP/HXqz4wpo8rD8gpsTw==", "dev": true, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^14 || ^16 || >=18.0" }, "peerDependencies": { - "postcss": "^8.2.15" + "postcss": "^8.4.31" } }, "node_modules/postcss-discard-empty": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", - "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-6.0.3.tgz", + "integrity": "sha512-znyno9cHKQsK6PtxL5D19Fj9uwSzC2mB74cpT66fhgOadEUPyXFkbgwm5tvc3bt3NAy8ltE5MrghxovZRVnOjQ==", "dev": true, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^14 || ^16 || >=18.0" }, "peerDependencies": { - "postcss": "^8.2.15" + "postcss": "^8.4.31" } }, "node_modules/postcss-discard-overridden": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", - "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-6.0.2.tgz", + "integrity": "sha512-j87xzI4LUggC5zND7KdjsI25APtyMuynXZSujByMaav2roV6OZX+8AaCUcZSWqckZpjAjRyFDdpqybgjFO0HJQ==", "dev": true, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^14 || ^16 || >=18.0" }, "peerDependencies": { - "postcss": "^8.2.15" + "postcss": "^8.4.31" } }, "node_modules/postcss-merge-longhand": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.6.tgz", - "integrity": "sha512-6C/UGF/3T5OE2CEbOuX7iNO63dnvqhGZeUnKkDeifebY0XqkkvrctYSZurpNE902LDf2yKwwPFgotnfSoPhQiw==", + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-6.0.5.tgz", + "integrity": "sha512-5LOiordeTfi64QhICp07nzzuTDjNSO8g5Ksdibt44d+uvIIAE1oZdRn8y/W5ZtYgRH/lnLDlvi9F8btZcVzu3w==", "dev": true, "dependencies": { "postcss-value-parser": "^4.2.0", - "stylehacks": "^5.1.0" + "stylehacks": "^6.1.1" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^14 || ^16 || >=18.0" }, "peerDependencies": { - "postcss": "^8.2.15" + "postcss": "^8.4.31" } }, "node_modules/postcss-merge-rules": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.2.tgz", - "integrity": "sha512-zKMUlnw+zYCWoPN6yhPjtcEdlJaMUZ0WyVcxTAmw3lkkN/NDMRkOkiuctQEoWAOvH7twaxUUdvBWl0d4+hifRQ==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-6.1.1.tgz", + "integrity": "sha512-KOdWF0gju31AQPZiD+2Ar9Qjowz1LTChSjFFbS+e2sFgc4uHOp3ZvVX4sNeTlk0w2O31ecFGgrFzhO0RSWbWwQ==", "dev": true, "dependencies": { - "browserslist": "^4.16.6", + "browserslist": "^4.23.0", "caniuse-api": "^3.0.0", - "cssnano-utils": "^3.1.0", - "postcss-selector-parser": "^6.0.5" + "cssnano-utils": "^4.0.2", + "postcss-selector-parser": "^6.0.16" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^14 || ^16 || >=18.0" }, "peerDependencies": { - "postcss": "^8.2.15" + "postcss": "^8.4.31" } }, "node_modules/postcss-minify-font-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", - "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-6.1.0.tgz", + "integrity": "sha512-gklfI/n+9rTh8nYaSJXlCo3nOKqMNkxuGpTn/Qm0gstL3ywTr9/WRKznE+oy6fvfolH6dF+QM4nCo8yPLdvGJg==", "dev": true, "dependencies": { "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^14 || ^16 || >=18.0" }, "peerDependencies": { - "postcss": "^8.2.15" + "postcss": "^8.4.31" } }, "node_modules/postcss-minify-gradients": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", - "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-6.0.3.tgz", + "integrity": "sha512-4KXAHrYlzF0Rr7uc4VrfwDJ2ajrtNEpNEuLxFgwkhFZ56/7gaE4Nr49nLsQDZyUe+ds+kEhf+YAUolJiYXF8+Q==", "dev": true, "dependencies": { - "colord": "^2.9.1", - "cssnano-utils": "^3.1.0", + "colord": "^2.9.3", + "cssnano-utils": "^4.0.2", "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^14 || ^16 || >=18.0" }, "peerDependencies": { - "postcss": "^8.2.15" + "postcss": "^8.4.31" } }, "node_modules/postcss-minify-params": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.3.tgz", - "integrity": "sha512-bkzpWcjykkqIujNL+EVEPOlLYi/eZ050oImVtHU7b4lFS82jPnsCb44gvC6pxaNt38Els3jWYDHTjHKf0koTgg==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-6.1.0.tgz", + "integrity": "sha512-bmSKnDtyyE8ujHQK0RQJDIKhQ20Jq1LYiez54WiaOoBtcSuflfK3Nm596LvbtlFcpipMjgClQGyGr7GAs+H1uA==", "dev": true, "dependencies": { - "browserslist": "^4.16.6", - "cssnano-utils": "^3.1.0", + "browserslist": "^4.23.0", + "cssnano-utils": "^4.0.2", "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^14 || ^16 || >=18.0" }, "peerDependencies": { - "postcss": "^8.2.15" + "postcss": "^8.4.31" } }, "node_modules/postcss-minify-selectors": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", - "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-6.0.4.tgz", + "integrity": "sha512-L8dZSwNLgK7pjTto9PzWRoMbnLq5vsZSTu8+j1P/2GB8qdtGQfn+K1uSvFgYvgh83cbyxT5m43ZZhUMTJDSClQ==", "dev": true, "dependencies": { - "postcss-selector-parser": "^6.0.5" + "postcss-selector-parser": "^6.0.16" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^14 || ^16 || >=18.0" }, "peerDependencies": { - "postcss": "^8.2.15" + "postcss": "^8.4.31" } }, "node_modules/postcss-modules-extract-imports": { @@ -11645,190 +12683,189 @@ } }, "node_modules/postcss-normalize-charset": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", - "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-6.0.2.tgz", + "integrity": "sha512-a8N9czmdnrjPHa3DeFlwqst5eaL5W8jYu3EBbTTkI5FHkfMhFZh1EGbku6jhHhIzTA6tquI2P42NtZ59M/H/kQ==", "dev": true, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^14 || ^16 || >=18.0" }, "peerDependencies": { - "postcss": "^8.2.15" + "postcss": "^8.4.31" } }, "node_modules/postcss-normalize-display-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", - "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-6.0.2.tgz", + "integrity": "sha512-8H04Mxsb82ON/aAkPeq8kcBbAtI5Q2a64X/mnRRfPXBq7XeogoQvReqxEfc0B4WPq1KimjezNC8flUtC3Qz6jg==", "dev": true, "dependencies": { "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^14 || ^16 || >=18.0" }, "peerDependencies": { - "postcss": "^8.2.15" + "postcss": "^8.4.31" } }, "node_modules/postcss-normalize-positions": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", - "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-6.0.2.tgz", + "integrity": "sha512-/JFzI441OAB9O7VnLA+RtSNZvQ0NCFZDOtp6QPFo1iIyawyXg0YI3CYM9HBy1WvwCRHnPep/BvI1+dGPKoXx/Q==", "dev": true, "dependencies": { "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^14 || ^16 || >=18.0" }, "peerDependencies": { - "postcss": "^8.2.15" + "postcss": "^8.4.31" } }, "node_modules/postcss-normalize-repeat-style": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", - "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-6.0.2.tgz", + "integrity": "sha512-YdCgsfHkJ2jEXwR4RR3Tm/iOxSfdRt7jplS6XRh9Js9PyCR/aka/FCb6TuHT2U8gQubbm/mPmF6L7FY9d79VwQ==", "dev": true, "dependencies": { "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^14 || ^16 || >=18.0" }, "peerDependencies": { - "postcss": "^8.2.15" + "postcss": "^8.4.31" } }, "node_modules/postcss-normalize-string": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", - "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-6.0.2.tgz", + "integrity": "sha512-vQZIivlxlfqqMp4L9PZsFE4YUkWniziKjQWUtsxUiVsSSPelQydwS8Wwcuw0+83ZjPWNTl02oxlIvXsmmG+CiQ==", "dev": true, "dependencies": { "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^14 || ^16 || >=18.0" }, "peerDependencies": { - "postcss": "^8.2.15" + "postcss": "^8.4.31" } }, "node_modules/postcss-normalize-timing-functions": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", - "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-6.0.2.tgz", + "integrity": "sha512-a+YrtMox4TBtId/AEwbA03VcJgtyW4dGBizPl7e88cTFULYsprgHWTbfyjSLyHeBcK/Q9JhXkt2ZXiwaVHoMzA==", "dev": true, "dependencies": { "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^14 || ^16 || >=18.0" }, "peerDependencies": { - "postcss": "^8.2.15" + "postcss": "^8.4.31" } }, "node_modules/postcss-normalize-unicode": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.0.tgz", - "integrity": "sha512-J6M3MizAAZ2dOdSjy2caayJLQT8E8K9XjLce8AUQMwOrCvjCHv24aLC/Lps1R1ylOfol5VIDMaM/Lo9NGlk1SQ==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-6.1.0.tgz", + "integrity": "sha512-QVC5TQHsVj33otj8/JD869Ndr5Xcc/+fwRh4HAsFsAeygQQXm+0PySrKbr/8tkDKzW+EVT3QkqZMfFrGiossDg==", "dev": true, "dependencies": { - "browserslist": "^4.16.6", + "browserslist": "^4.23.0", "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^14 || ^16 || >=18.0" }, "peerDependencies": { - "postcss": "^8.2.15" + "postcss": "^8.4.31" } }, "node_modules/postcss-normalize-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", - "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-6.0.2.tgz", + "integrity": "sha512-kVNcWhCeKAzZ8B4pv/DnrU1wNh458zBNp8dh4y5hhxih5RZQ12QWMuQrDgPRw3LRl8mN9vOVfHl7uhvHYMoXsQ==", "dev": true, "dependencies": { - "normalize-url": "^6.0.1", "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^14 || ^16 || >=18.0" }, "peerDependencies": { - "postcss": "^8.2.15" + "postcss": "^8.4.31" } }, "node_modules/postcss-normalize-whitespace": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", - "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-6.0.2.tgz", + "integrity": "sha512-sXZ2Nj1icbJOKmdjXVT9pnyHQKiSAyuNQHSgRCUgThn2388Y9cGVDR+E9J9iAYbSbLHI+UUwLVl1Wzco/zgv0Q==", "dev": true, "dependencies": { "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^14 || ^16 || >=18.0" }, "peerDependencies": { - "postcss": "^8.2.15" + "postcss": "^8.4.31" } }, "node_modules/postcss-ordered-values": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", - "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-6.0.2.tgz", + "integrity": "sha512-VRZSOB+JU32RsEAQrO94QPkClGPKJEL/Z9PCBImXMhIeK5KAYo6slP/hBYlLgrCjFxyqvn5VC81tycFEDBLG1Q==", "dev": true, "dependencies": { - "cssnano-utils": "^3.1.0", + "cssnano-utils": "^4.0.2", "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^14 || ^16 || >=18.0" }, "peerDependencies": { - "postcss": "^8.2.15" + "postcss": "^8.4.31" } }, "node_modules/postcss-reduce-initial": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.0.tgz", - "integrity": "sha512-5OgTUviz0aeH6MtBjHfbr57tml13PuedK/Ecg8szzd4XRMbYxH4572JFG067z+FqBIf6Zp/d+0581glkvvWMFw==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-6.1.0.tgz", + "integrity": "sha512-RarLgBK/CrL1qZags04oKbVbrrVK2wcxhvta3GCxrZO4zveibqbRPmm2VI8sSgCXwoUHEliRSbOfpR0b/VIoiw==", "dev": true, "dependencies": { - "browserslist": "^4.16.6", + "browserslist": "^4.23.0", "caniuse-api": "^3.0.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^14 || ^16 || >=18.0" }, "peerDependencies": { - "postcss": "^8.2.15" + "postcss": "^8.4.31" } }, "node_modules/postcss-reduce-transforms": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", - "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-6.0.2.tgz", + "integrity": "sha512-sB+Ya++3Xj1WaT9+5LOOdirAxP7dJZms3GRcYheSPi1PiTMigsxHAdkrbItHxwYHr4kt1zL7mmcHstgMYT+aiA==", "dev": true, "dependencies": { "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^14 || ^16 || >=18.0" }, "peerDependencies": { - "postcss": "^8.2.15" + "postcss": "^8.4.31" } }, "node_modules/postcss-selector-parser": { - "version": "6.0.10", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", - "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", + "version": "6.0.16", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz", + "integrity": "sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==", "dev": true, "dependencies": { "cssesc": "^3.0.0", @@ -11839,34 +12876,34 @@ } }, "node_modules/postcss-svgo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", - "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-6.0.3.tgz", + "integrity": "sha512-dlrahRmxP22bX6iKEjOM+c8/1p+81asjKT+V5lrgOH944ryx/OHpclnIbGsKVd3uWOXFLYJwCVf0eEkJGvO96g==", "dev": true, "dependencies": { "postcss-value-parser": "^4.2.0", - "svgo": "^2.7.0" + "svgo": "^3.2.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^14 || ^16 || >= 18" }, "peerDependencies": { - "postcss": "^8.2.15" + "postcss": "^8.4.31" } }, "node_modules/postcss-unique-selectors": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", - "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-6.0.4.tgz", + "integrity": "sha512-K38OCaIrO8+PzpArzkLKB42dSARtC2tmG6PvD4b1o1Q2E9Os8jzfWFfSy/rixsHwohtsDdFtAWGjFVFUdwYaMg==", "dev": true, "dependencies": { - "postcss-selector-parser": "^6.0.5" + "postcss-selector-parser": "^6.0.16" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^14 || ^16 || >=18.0" }, "peerDependencies": { - "postcss": "^8.2.15" + "postcss": "^8.4.31" } }, "node_modules/postcss-value-parser": { @@ -11895,18 +12932,17 @@ } }, "node_modules/pretty-format": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", - "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, "dependencies": { - "@jest/schemas": "^28.1.3", - "ansi-regex": "^5.0.1", + "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", "react-is": "^18.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/pretty-format/node_modules/ansi-styles": { @@ -11969,18 +13005,34 @@ "dev": true }, "node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, "engines": { "node": ">=6" } }, + "node_modules/pure-rand": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", + "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ] + }, "node_modules/qs": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", "dev": true, "dependencies": { "side-channel": "^1.0.4" @@ -11992,6 +13044,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true + }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -12031,9 +13089,9 @@ } }, "node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", "dev": true, "dependencies": { "bytes": "3.1.2", @@ -12055,9 +13113,9 @@ } }, "node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", "dev": true }, "node_modules/read-pkg": { @@ -12096,9 +13154,9 @@ } }, "node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, "dependencies": { "inherits": "^2.0.3", @@ -12121,42 +13179,16 @@ "node": ">=8.10.0" } }, - "node_modules/realistic-structured-clone": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/realistic-structured-clone/-/realistic-structured-clone-3.0.0.tgz", - "integrity": "sha512-rOjh4nuWkAqf9PWu6JVpOWD4ndI+JHfgiZeMmujYcPi+fvILUu7g6l26TC1K5aBIp34nV+jE1cDO75EKOfHC5Q==", - "dev": true, - "dependencies": { - "domexception": "^1.0.1", - "typeson": "^6.1.0", - "typeson-registry": "^1.0.0-alpha.20" - } - }, - "node_modules/realistic-structured-clone/node_modules/domexception": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", - "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", - "dev": true, - "dependencies": { - "webidl-conversions": "^4.0.2" - } - }, - "node_modules/realistic-structured-clone/node_modules/webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", - "dev": true - }, "node_modules/rechoir": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz", - "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==", + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", + "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", "dev": true, "dependencies": { - "resolve": "^1.9.0" + "resolve": "^1.20.0" }, "engines": { - "node": ">= 0.10" + "node": ">= 10.13.0" } }, "node_modules/regenerate": { @@ -12166,9 +13198,9 @@ "dev": true }, "node_modules/regenerate-unicode-properties": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz", - "integrity": "sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==", + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz", + "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==", "dev": true, "dependencies": { "regenerate": "^1.4.2" @@ -12178,28 +13210,29 @@ } }, "node_modules/regenerator-runtime": { - "version": "0.13.10", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.10.tgz", - "integrity": "sha512-KepLsg4dU12hryUO7bp/axHAKvwGOCV0sGloQtpagJ12ai+ojVDqkeGSiRX1zlq+kjIMZ1t7gpze+26QqtdGqw==" + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" }, "node_modules/regenerator-transform": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz", - "integrity": "sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==", + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", + "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", "dev": true, "dependencies": { "@babel/runtime": "^7.8.4" } }, "node_modules/regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", + "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" + "call-bind": "^1.0.6", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.1" }, "engines": { "node": ">= 0.4" @@ -12208,45 +13241,27 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "node_modules/regexpu-core": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", + "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/regexpu-core": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.1.0.tgz", - "integrity": "sha512-bb6hk+xWd2PEOkj5It46A16zFMs2mv86Iwpdu94la4S3sJ7C973h2dHpYKwIBGaWSO7cIRJ+UX0IeMaWcO4qwA==", - "dev": true, - "dependencies": { - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.0.1", - "regjsgen": "^0.6.0", - "regjsparser": "^0.8.2", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.0.0" + "dependencies": { + "@babel/regjsgen": "^0.8.0", + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" }, "engines": { "node": ">=4" } }, - "node_modules/regjsgen": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz", - "integrity": "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==", - "dev": true - }, "node_modules/regjsparser": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz", - "integrity": "sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==", + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", "dev": true, "dependencies": { "jsesc": "~0.5.0" @@ -12311,12 +13326,12 @@ "dev": true }, "node_modules/resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dev": true, "dependencies": { - "is-core-module": "^2.9.0", + "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -12349,9 +13364,9 @@ } }, "node_modules/resolve.exports": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz", - "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", + "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", "dev": true, "engines": { "node": ">=10" @@ -12391,6 +13406,18 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/run-applescript": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz", + "integrity": "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -12414,11 +13441,60 @@ "queue-microtask": "^1.2.2" } }, + "node_modules/safe-array-concat": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", + "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safe-regex-test": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-regex": "^1.1.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/safer-buffer": { "version": "2.1.2", @@ -12444,29 +13520,29 @@ } }, "node_modules/sass-loader": { - "version": "13.3.3", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-13.3.3.tgz", - "integrity": "sha512-mt5YN2F1MOZr3d/wBRcZxeFgwgkH44wVc2zohO2YF6JiOMkiXe4BYRZpSu2sO1g71mo/j16txzUhsKZlqjVGzA==", + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-14.2.1.tgz", + "integrity": "sha512-G0VcnMYU18a4N7VoNDegg2OuMjYtxnqzQWARVWCIVSZwJeiL9kg8QMsuIZOplsJgTzZLF6jGxI3AClj8I9nRdQ==", "dev": true, "dependencies": { "neo-async": "^2.6.2" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 18.12.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, "peerDependencies": { - "fibers": ">= 3.1.0", + "@rspack/core": "0.x || 1.x", "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0", "sass": "^1.3.0", "sass-embedded": "*", "webpack": "^5.0.0" }, "peerDependenciesMeta": { - "fibers": { + "@rspack/core": { "optional": true }, "node-sass": { @@ -12477,31 +13553,34 @@ }, "sass-embedded": { "optional": true + }, + "webpack": { + "optional": true } } }, "node_modules/saxes": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", - "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", "dev": true, "dependencies": { "xmlchars": "^2.2.0" }, "engines": { - "node": ">=10" + "node": ">=v12.22.7" } }, "node_modules/schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", "dev": true, "dependencies": { "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", + "ajv": "^8.9.0", "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" + "ajv-keywords": "^5.1.0" }, "engines": { "node": ">= 12.13.0" @@ -12512,9 +13591,9 @@ } }, "node_modules/schema-utils/node_modules/ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "dev": true, "dependencies": { "fast-deep-equal": "^3.1.1", @@ -12552,11 +13631,12 @@ "dev": true }, "node_modules/selfsigned": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz", - "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", + "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", "dev": true, "dependencies": { + "@types/node-forge": "^1.3.0", "node-forge": "^1" }, "engines": { @@ -12564,9 +13644,9 @@ } }, "node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { "semver": "bin/semver.js" @@ -12618,9 +13698,9 @@ "dev": true }, "node_modules/serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", "dev": true, "dependencies": { "randombytes": "^2.1.0" @@ -12719,6 +13799,38 @@ "node": ">= 0.8.0" } }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", @@ -12759,20 +13871,27 @@ } }, "node_modules/shell-quote": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz", - "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==", - "dev": true + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", "dev": true, "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -12810,6 +13929,22 @@ "websocket-driver": "^0.7.4" } }, + "node_modules/sonic-forest": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/sonic-forest/-/sonic-forest-1.0.0.tgz", + "integrity": "sha512-yFO2N4uTUFtgKLw03WWFpN1iEwZySweMsa18XN3Kt0yYrlmVHunC2ZgM+437zDoKISAJHcH3Cg18U7d6tuSgSQ==", + "dev": true, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -12839,9 +13974,9 @@ } }, "node_modules/spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", "dev": true, "dependencies": { "spdx-expression-parse": "^3.0.0", @@ -12849,9 +13984,9 @@ } }, "node_modules/spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", "dev": true }, "node_modules/spdx-expression-parse": { @@ -12865,9 +14000,9 @@ } }, "node_modules/spdx-license-ids": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", - "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", + "version": "3.0.17", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.17.tgz", + "integrity": "sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg==", "dev": true }, "node_modules/spdy": { @@ -12906,17 +14041,10 @@ "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "dev": true }, - "node_modules/stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", - "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility", - "dev": true - }, "node_modules/stack-utils": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", - "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", "dev": true, "dependencies": { "escape-string-regexp": "^2.0.0" @@ -12944,12 +14072,12 @@ } }, "node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dev": true, "dependencies": { - "safe-buffer": "~5.1.0" + "safe-buffer": "~5.2.0" } }, "node_modules/string-length": { @@ -12985,15 +14113,49 @@ "node": ">=8" } }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/string.prototype.padend": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.3.tgz", - "integrity": "sha512-jNIIeokznm8SD/TZISQsZKYu7RJyheFNt84DUPrh482GC8RVp2MKqm2O5oBRdGxbDQoXrhhWtPIWQOiy20svUg==", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.6.tgz", + "integrity": "sha512-XZpspuSB7vJWhvJc9DLSlrXl1mcA2BdoY5jjnS135ydXqLoqhs96JjDtCkjJEQHvfqZIp9hBuBMgI589peyx9Q==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", + "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -13003,28 +14165,31 @@ } }, "node_modules/string.prototype.trimend": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", - "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", + "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", - "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -13042,6 +14207,19 @@ "node": ">=8" } }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/strip-bom": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", @@ -13073,19 +14251,19 @@ } }, "node_modules/stylehacks": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.0.tgz", - "integrity": "sha512-SzLmvHQTrIWfSgljkQCw2++C9+Ne91d/6Sp92I8c5uHTcy/PgeHamwITIbBW9wnFTY/3ZfSXR9HIL6Ikqmcu6Q==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-6.1.1.tgz", + "integrity": "sha512-gSTTEQ670cJNoaeIp9KX6lZmm8LJ3jPB5yJmX8Zq/wQxOsAFXV3qjWzHas3YYk1qesuVIyYWWUpZ0vSE/dTSGg==", "dev": true, "dependencies": { - "browserslist": "^4.16.6", - "postcss-selector-parser": "^6.0.4" + "browserslist": "^4.23.0", + "postcss-selector-parser": "^6.0.16" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^14 || ^16 || >=18.0" }, "peerDependencies": { - "postcss": "^8.2.15" + "postcss": "^8.4.31" } }, "node_modules/supports-color": { @@ -13100,40 +14278,6 @@ "node": ">=4" } }, - "node_modules/supports-hyperlinks": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", - "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-hyperlinks/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-hyperlinks/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", @@ -13147,24 +14291,28 @@ } }, "node_modules/svgo": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", - "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.2.0.tgz", + "integrity": "sha512-4PP6CMW/V7l/GmKRKzsLR8xxjdHTV4IMvhTnpuHwwBazSIlw5W/5SmPjN8Dwyt7lKbSJrRDgp4t9ph0HgChFBQ==", "dev": true, "dependencies": { "@trysound/sax": "0.2.0", "commander": "^7.2.0", - "css-select": "^4.1.3", - "css-tree": "^1.1.3", - "csso": "^4.2.0", - "picocolors": "^1.0.0", - "stable": "^0.1.8" + "css-select": "^5.1.0", + "css-tree": "^2.3.1", + "css-what": "^6.1.0", + "csso": "^5.0.5", + "picocolors": "^1.0.0" }, "bin": { "svgo": "bin/svgo" }, "engines": { - "node": ">=10.13.0" + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/svgo" } }, "node_modules/svgo/node_modules/commander": { @@ -13176,6 +14324,65 @@ "node": ">= 10" } }, + "node_modules/svgo/node_modules/css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/svgo/node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/svgo/node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/svgo/node_modules/domutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "dev": true, + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, "node_modules/symbol-tree": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", @@ -13203,30 +14410,14 @@ "webpack": "5.*" } }, - "node_modules/terminal-link": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", - "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", + "node_modules/terser": { + "version": "5.30.4", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.30.4.tgz", + "integrity": "sha512-xRdd0v64a8mFK9bnsKVdoNP9GQIKUAaJPTaqEQDL4w/J8WaW4sWXXoMZ+6SimPkfT5bElreXf8m9HnmPc3E1BQ==", "dev": true, "dependencies": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/terser": { - "version": "5.15.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.15.1.tgz", - "integrity": "sha512-K1faMUvpm/FBxjBXud0LWVAGxmvoPbZbfTCYbSgaaYQaIXI3/TdI7a7ZGA73Zrou6Q8Zmz3oeUTsp/dj+ag2Xw==", - "dev": true, - "dependencies": { - "@jridgewell/source-map": "^0.3.2", - "acorn": "^8.5.0", + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", "commander": "^2.20.0", "source-map-support": "~0.5.20" }, @@ -13238,16 +14429,16 @@ } }, "node_modules/terser-webpack-plugin": { - "version": "5.3.6", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz", - "integrity": "sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==", + "version": "5.3.10", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", + "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", "dev": true, "dependencies": { - "@jridgewell/trace-mapping": "^0.3.14", + "@jridgewell/trace-mapping": "^0.3.20", "jest-worker": "^27.4.5", "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.0", - "terser": "^5.14.1" + "serialize-javascript": "^6.0.1", + "terser": "^5.26.0" }, "engines": { "node": ">= 10.13.0" @@ -13271,10 +14462,33 @@ } } }, + "node_modules/terser-webpack-plugin/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/terser-webpack-plugin/node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, "node_modules/terser-webpack-plugin/node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", "dev": true, "dependencies": { "@types/json-schema": "^7.0.8", @@ -13289,6 +14503,21 @@ "url": "https://opencollective.com/webpack" } }, + "node_modules/terser-webpack-plugin/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, "node_modules/terser/node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", @@ -13319,12 +14548,46 @@ "node": ">=8" } }, + "node_modules/test-exclude/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/test-exclude/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, + "node_modules/thingies": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/thingies/-/thingies-1.21.0.tgz", + "integrity": "sha512-hsqsJsFMsV+aD4s3CWKk85ep/3I9XzYV/IXaSouJMYIoDlgyi11cBhsqYe9/geRfB0YIikBQg6raRaM+nIMP9g==", + "dev": true, + "engines": { + "node": ">=10.18" + }, + "peerDependencies": { + "tslib": "^2" + } + }, "node_modules/thunky": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", @@ -13368,23 +14631,24 @@ } }, "node_modules/tough-cookie": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", - "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", + "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", "dev": true, "dependencies": { "psl": "^1.1.33", "punycode": "^2.1.1", - "universalify": "^0.1.2" + "universalify": "^0.2.0", + "url-parse": "^1.5.3" }, "engines": { "node": ">=6" } }, "node_modules/tough-cookie/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", "dev": true, "engines": { "node": ">= 4.0.0" @@ -13402,33 +14666,45 @@ "node": ">=12" } }, + "node_modules/ts-api-utils": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", + "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", + "dev": true, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, "node_modules/ts-jest": { - "version": "28.0.7", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-28.0.7.tgz", - "integrity": "sha512-wWXCSmTwBVmdvWrOpYhal79bDpioDy4rTT+0vyUnE3ZzM7LOAAGG9NXwzkEL/a516rQEgnMmS/WKP9jBPCVJyA==", + "version": "29.1.2", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.2.tgz", + "integrity": "sha512-br6GJoH/WUX4pu7FbZXuWGKGNDuU7b8Uj77g/Sp7puZV6EXzuByl6JrECvm0MzVzSTkSHWTihsXt+5XYER5b+g==", "dev": true, "dependencies": { "bs-logger": "0.x", "fast-json-stable-stringify": "2.x", - "jest-util": "^28.0.0", - "json5": "^2.2.1", + "jest-util": "^29.0.0", + "json5": "^2.2.3", "lodash.memoize": "4.x", "make-error": "1.x", - "semver": "7.x", + "semver": "^7.5.3", "yargs-parser": "^21.0.1" }, "bin": { "ts-jest": "cli.js" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^16.10.0 || ^18.0.0 || >=20.0.0" }, "peerDependencies": { "@babel/core": ">=7.0.0-beta.0 <8", - "@jest/types": "^28.0.0", - "babel-jest": "^28.0.0", - "jest": "^28.0.0", - "typescript": ">=4.3" + "@jest/types": "^29.0.0", + "babel-jest": "^29.0.0", + "jest": "^29.0.0", + "typescript": ">=4.3 <6" }, "peerDependenciesMeta": { "@babel/core": { @@ -13445,10 +14721,22 @@ } } }, + "node_modules/ts-jest/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/ts-jest/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -13460,31 +14748,16 @@ "node": ">=10" } }, - "node_modules/tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", + "node_modules/ts-jest/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, - "node_modules/tsutils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", "dev": true }, "node_modules/type-check": { @@ -13533,75 +14806,90 @@ "node": ">= 0.6" } }, - "node_modules/typescript": { - "version": "4.8.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", - "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==", + "node_modules/typed-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", + "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" }, "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/typeson": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/typeson/-/typeson-6.1.0.tgz", - "integrity": "sha512-6FTtyGr8ldU0pfbvW/eOZrEtEkczHRUtduBnA90Jh9kMPCiFNnXIon3vF41N0S4tV1HHQt4Hk1j4srpESziCaA==", - "dev": true, - "engines": { - "node": ">=0.1.14" + "node": ">= 0.4" } }, - "node_modules/typeson-registry": { - "version": "1.0.0-alpha.39", - "resolved": "https://registry.npmjs.org/typeson-registry/-/typeson-registry-1.0.0-alpha.39.tgz", - "integrity": "sha512-NeGDEquhw+yfwNhguLPcZ9Oj0fzbADiX4R0WxvoY8nGhy98IbzQy1sezjoEFWOywOboj/DWehI+/aUlRVrJnnw==", + "node_modules/typed-array-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", "dev": true, "dependencies": { - "base64-arraybuffer-es6": "^0.7.0", - "typeson": "^6.0.0", - "whatwg-url": "^8.4.0" + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" }, "engines": { - "node": ">=10.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/typeson-registry/node_modules/tr46": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", - "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", + "node_modules/typed-array-byte-offset": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", + "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", "dev": true, "dependencies": { - "punycode": "^2.1.1" + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" }, "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/typeson-registry/node_modules/webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", + "node_modules/typed-array-length": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", + "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" + }, "engines": { - "node": ">=10.4" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/typeson-registry/node_modules/whatwg-url": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", - "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", + "node_modules/typescript": { + "version": "5.4.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", + "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", "dev": true, - "dependencies": { - "lodash": "^4.7.0", - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" }, "engines": { - "node": ">=10" + "node": ">=14.17" } }, "node_modules/unbox-primitive": { @@ -13619,6 +14907,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true + }, "node_modules/unicode-canonical-property-names-ecmascript": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", @@ -13642,27 +14936,27 @@ } }, "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", - "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", "dev": true, "engines": { "node": ">=4" } }, "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", - "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", "dev": true, "engines": { "node": ">=4" } }, "node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "dev": true, "engines": { "node": ">= 10.0.0" @@ -13678,9 +14972,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", - "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", "dev": true, "funding": [ { @@ -13690,6 +14984,10 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ], "dependencies": { @@ -13697,7 +14995,7 @@ "picocolors": "^1.0.0" }, "bin": { - "browserslist-lint": "cli.js" + "update-browserslist-db": "cli.js" }, "peerDependencies": { "browserslist": ">= 4.21.0" @@ -13712,6 +15010,16 @@ "punycode": "^2.1.0" } }, + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dev": true, + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -13743,14 +15051,14 @@ } }, "node_modules/v8-to-istanbul": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz", - "integrity": "sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==", + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz", + "integrity": "sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==", "dev": true, "dependencies": { "@jridgewell/trace-mapping": "^0.3.12", "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0" + "convert-source-map": "^2.0.0" }, "engines": { "node": ">=10.12.0" @@ -13775,25 +15083,16 @@ "node": ">= 0.8" } }, - "node_modules/w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "dev": true, - "dependencies": { - "browser-process-hrtime": "^1.0.0" - } - }, "node_modules/w3c-xmlserializer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-3.0.0.tgz", - "integrity": "sha512-3WFqGEgSXIyGhOmAFtlicJNMjEps8b1MG31NCA0/vOF9+nKMUW1ckhi9cnNHmf88Rzw5V+dwIwsm2C7X8k9aQg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", + "integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==", "dev": true, "dependencies": { "xml-name-validator": "^4.0.0" }, "engines": { - "node": ">=12" + "node": ">=14" } }, "node_modules/walker": { @@ -13806,9 +15105,9 @@ } }, "node_modules/watchpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz", + "integrity": "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==", "dev": true, "dependencies": { "glob-to-regexp": "^0.4.1", @@ -13837,34 +15136,34 @@ } }, "node_modules/webpack": { - "version": "5.75.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.75.0.tgz", - "integrity": "sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ==", + "version": "5.91.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.91.0.tgz", + "integrity": "sha512-rzVwlLeBWHJbmgTC/8TvAcu5vpJNII+MelQpylD4jNERPwpBJOE2lEcko1zJX3QJeLjTTAnQxn/OJ8bjDzVQaw==", "dev": true, "dependencies": { "@types/eslint-scope": "^3.7.3", - "@types/estree": "^0.0.51", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", + "@types/estree": "^1.0.5", + "@webassemblyjs/ast": "^1.12.1", + "@webassemblyjs/wasm-edit": "^1.12.1", + "@webassemblyjs/wasm-parser": "^1.12.1", "acorn": "^8.7.1", - "acorn-import-assertions": "^1.7.6", - "browserslist": "^4.14.5", + "acorn-import-assertions": "^1.9.0", + "browserslist": "^4.21.10", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.10.0", - "es-module-lexer": "^0.9.0", + "enhanced-resolve": "^5.16.0", + "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", + "graceful-fs": "^4.2.11", "json-parse-even-better-errors": "^2.3.1", "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", - "schema-utils": "^3.1.0", + "schema-utils": "^3.2.0", "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.4.0", + "terser-webpack-plugin": "^5.3.10", + "watchpack": "^2.4.1", "webpack-sources": "^3.2.3" }, "bin": { @@ -13884,44 +15183,42 @@ } }, "node_modules/webpack-cli": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.10.0.tgz", - "integrity": "sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.1.4.tgz", + "integrity": "sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==", "dev": true, "dependencies": { "@discoveryjs/json-ext": "^0.5.0", - "@webpack-cli/configtest": "^1.2.0", - "@webpack-cli/info": "^1.5.0", - "@webpack-cli/serve": "^1.7.0", + "@webpack-cli/configtest": "^2.1.1", + "@webpack-cli/info": "^2.0.2", + "@webpack-cli/serve": "^2.0.5", "colorette": "^2.0.14", - "commander": "^7.0.0", + "commander": "^10.0.1", "cross-spawn": "^7.0.3", + "envinfo": "^7.7.3", "fastest-levenshtein": "^1.0.12", "import-local": "^3.0.2", - "interpret": "^2.2.0", - "rechoir": "^0.7.0", + "interpret": "^3.1.1", + "rechoir": "^0.8.0", "webpack-merge": "^5.7.3" }, "bin": { "webpack-cli": "bin/cli.js" }, "engines": { - "node": ">=10.13.0" + "node": ">=14.15.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, "peerDependencies": { - "webpack": "4.x.x || 5.x.x" + "webpack": "5.x.x" }, "peerDependenciesMeta": { "@webpack-cli/generators": { "optional": true }, - "@webpack-cli/migrate": { - "optional": true - }, "webpack-bundle-analyzer": { "optional": true }, @@ -13931,99 +15228,169 @@ } }, "node_modules/webpack-cli/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", "dev": true, "engines": { - "node": ">= 10" + "node": ">=14" } }, "node_modules/webpack-dev-middleware": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", - "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-7.2.1.tgz", + "integrity": "sha512-hRLz+jPQXo999Nx9fXVdKlg/aehsw1ajA9skAneGmT03xwmyuhvF93p6HUKKbWhXdcERtGTzUCtIQr+2IQegrA==", "dev": true, "dependencies": { "colorette": "^2.0.10", - "memfs": "^3.4.3", + "memfs": "^4.6.0", "mime-types": "^2.1.31", + "on-finished": "^2.4.1", "range-parser": "^1.2.1", "schema-utils": "^4.0.0" }, "engines": { - "node": ">= 12.13.0" + "node": ">= 18.12.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + } + } + }, + "node_modules/webpack-dev-middleware/node_modules/memfs": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.9.1.tgz", + "integrity": "sha512-36cVYFMaa9HNEYyvkyKCwker8DBmOdjWLrfekE/cHEKJ806fCfKNVhOJNvoyV/CrGSZDtfQPbhn0Zid0gbH0Hw==", + "dev": true, + "dependencies": { + "@jsonjoy.com/json-pack": "^1.0.2", + "@jsonjoy.com/util": "^1.1.0", + "sonic-forest": "^1.0.0", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">= 4.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" } }, "node_modules/webpack-dev-server": { - "version": "4.11.1", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.11.1.tgz", - "integrity": "sha512-lILVz9tAUy1zGFwieuaQtYiadImb5M3d+H+L1zDYalYoDl0cksAB1UNyuE5MMWJrG6zR1tXkCP2fitl7yoUJiw==", - "dev": true, - "dependencies": { - "@types/bonjour": "^3.5.9", - "@types/connect-history-api-fallback": "^1.3.5", - "@types/express": "^4.17.13", - "@types/serve-index": "^1.9.1", - "@types/serve-static": "^1.13.10", - "@types/sockjs": "^0.3.33", - "@types/ws": "^8.5.1", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.0.4.tgz", + "integrity": "sha512-dljXhUgx3HqKP2d8J/fUMvhxGhzjeNVarDLcbO/EWMSgRizDkxHQDZQaLFL5VJY9tRBj2Gz+rvCEYYvhbqPHNA==", + "dev": true, + "dependencies": { + "@types/bonjour": "^3.5.13", + "@types/connect-history-api-fallback": "^1.5.4", + "@types/express": "^4.17.21", + "@types/serve-index": "^1.9.4", + "@types/serve-static": "^1.15.5", + "@types/sockjs": "^0.3.36", + "@types/ws": "^8.5.10", "ansi-html-community": "^0.0.8", - "bonjour-service": "^1.0.11", - "chokidar": "^3.5.3", + "bonjour-service": "^1.2.1", + "chokidar": "^3.6.0", "colorette": "^2.0.10", "compression": "^1.7.4", "connect-history-api-fallback": "^2.0.0", "default-gateway": "^6.0.3", "express": "^4.17.3", "graceful-fs": "^4.2.6", - "html-entities": "^2.3.2", + "html-entities": "^2.4.0", "http-proxy-middleware": "^2.0.3", - "ipaddr.js": "^2.0.1", - "open": "^8.0.9", - "p-retry": "^4.5.0", - "rimraf": "^3.0.2", - "schema-utils": "^4.0.0", - "selfsigned": "^2.1.1", + "ipaddr.js": "^2.1.0", + "launch-editor": "^2.6.1", + "open": "^10.0.3", + "p-retry": "^6.2.0", + "rimraf": "^5.0.5", + "schema-utils": "^4.2.0", + "selfsigned": "^2.4.1", "serve-index": "^1.9.1", "sockjs": "^0.3.24", "spdy": "^4.0.2", - "webpack-dev-middleware": "^5.3.1", - "ws": "^8.4.2" + "webpack-dev-middleware": "^7.1.0", + "ws": "^8.16.0" }, "bin": { "webpack-dev-server": "bin/webpack-dev-server.js" }, "engines": { - "node": ">= 12.13.0" + "node": ">= 18.12.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, "peerDependencies": { - "webpack": "^4.37.0 || ^5.0.0" + "webpack": "^5.0.0" }, "peerDependenciesMeta": { + "webpack": { + "optional": true + }, "webpack-cli": { "optional": true } } }, + "node_modules/webpack-dev-server/node_modules/glob": { + "version": "10.3.12", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.12.tgz", + "integrity": "sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.6", + "minimatch": "^9.0.1", + "minipass": "^7.0.4", + "path-scurry": "^1.10.2" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/webpack-dev-server/node_modules/rimraf": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.5.tgz", + "integrity": "sha512-CqDakW+hMe/Bz202FPEymy68P+G50RfMQK+Qo5YUqc9SPipvbGjCGKd0RSKEelbsfQuw3g5NZDSrlZZAJurH1A==", + "dev": true, + "dependencies": { + "glob": "^10.3.7" + }, + "bin": { + "rimraf": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/webpack-merge": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", - "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", + "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", "dev": true, "dependencies": { "clone-deep": "^4.0.1", + "flat": "^5.0.2", "wildcard": "^2.0.0" }, "engines": { @@ -14040,9 +15407,9 @@ } }, "node_modules/webpack/node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", "dev": true, "dependencies": { "@types/json-schema": "^7.0.8", @@ -14114,9 +15481,9 @@ } }, "node_modules/whatwg-url": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-10.0.0.tgz", - "integrity": "sha512-CLxxCmdUby142H5FZzn4D8ikO1cmypvXVQktsgosNy4a4BHrDHeciBBGZhb0bNoR5/MltoCatso+vFjjGx8t0w==", + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", + "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", "dev": true, "dependencies": { "tr46": "^3.0.0", @@ -14157,21 +15524,40 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/wildcard": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", - "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", - "dev": true - }, - "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "node_modules/which-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.2" + }, "engines": { - "node": ">=0.10.0" - } - }, + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "dev": true + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -14189,6 +15575,57 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "node_modules/wrap-ansi/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -14229,29 +15666,29 @@ "dev": true }, "node_modules/write-file-atomic": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.1.tgz", - "integrity": "sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", "dev": true, "dependencies": { "imurmurhash": "^0.1.4", "signal-exit": "^3.0.7" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/ws": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.8.1.tgz", - "integrity": "sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA==", + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.0.tgz", + "integrity": "sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==", "dev": true, "engines": { "node": ">=10.0.0" }, "peerDependencies": { "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" + "utf-8-validate": ">=5.0.2" }, "peerDependenciesMeta": { "bufferutil": { @@ -14287,42 +15724,33 @@ } }, "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "dev": true }, - "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, "node_modules/yargs": { - "version": "17.5.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz", - "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==", + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, "dependencies": { - "cliui": "^7.0.2", + "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.3", "y18n": "^5.0.5", - "yargs-parser": "^21.0.0" + "yargs-parser": "^21.1.1" }, "engines": { "node": ">=12" } }, "node_modules/yargs-parser": { - "version": "21.0.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz", - "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==", + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, "engines": { "node": ">=12" @@ -14340,10530 +15768,5 @@ "url": "https://github.com/sponsors/sindresorhus" } } - }, - "dependencies": { - "@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", - "dev": true, - "requires": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@babel/cli": { - "version": "7.19.3", - "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.19.3.tgz", - "integrity": "sha512-643/TybmaCAe101m2tSVHi9UKpETXP9c/Ff4mD2tAwkdP6esKIfaauZFc67vGEM6r9fekbEGid+sZhbEnSe3dg==", - "dev": true, - "requires": { - "@jridgewell/trace-mapping": "^0.3.8", - "@nicolo-ribaudo/chokidar-2": "2.1.8-no-fsevents.3", - "chokidar": "^3.4.0", - "commander": "^4.0.1", - "convert-source-map": "^1.1.0", - "fs-readdir-recursive": "^1.1.0", - "glob": "^7.2.0", - "make-dir": "^2.1.0", - "slash": "^2.0.0" - } - }, - "@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", - "dev": true, - "requires": { - "@babel/highlight": "^7.18.6" - } - }, - "@babel/compat-data": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.1.tgz", - "integrity": "sha512-EWZ4mE2diW3QALKvDMiXnbZpRvlj+nayZ112nK93SnhqOtpdsbVD4W+2tEoT3YNBAG9RBR0ISY758ZkOgsn6pQ==", - "dev": true - }, - "@babel/core": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.2.tgz", - "integrity": "sha512-w7DbG8DtMrJcFOi4VrLm+8QM4az8Mo+PuLBKLp2zrYRCow8W/f9xiXm5sN53C8HksCyDQwCKha9JiDoIyPjT2g==", - "dev": true, - "requires": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.2", - "@babel/helper-compilation-targets": "^7.20.0", - "@babel/helper-module-transforms": "^7.20.2", - "@babel/helpers": "^7.20.1", - "@babel/parser": "^7.20.2", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.1", - "@babel/types": "^7.20.2", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", - "semver": "^6.3.0" - } - }, - "@babel/eslint-parser": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.19.1.tgz", - "integrity": "sha512-AqNf2QWt1rtu2/1rLswy6CDP7H9Oh3mMhk177Y67Rg8d7RD9WfOLLv8CGn6tisFvS2htm86yIe1yLF6I1UDaGQ==", - "dev": true, - "requires": { - "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", - "eslint-visitor-keys": "^2.1.0", - "semver": "^6.3.0" - } - }, - "@babel/generator": { - "version": "7.20.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.4.tgz", - "integrity": "sha512-luCf7yk/cm7yab6CAW1aiFnmEfBJplb/JojV56MYEK7ziWfGmFlTfmL9Ehwfy4gFhbjBfWO1wj7/TuSbVNEEtA==", - "dev": true, - "requires": { - "@babel/types": "^7.20.2", - "@jridgewell/gen-mapping": "^0.3.2", - "jsesc": "^2.5.1" - }, - "dependencies": { - "@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - } - } - }, - "@babel/helper-annotate-as-pure": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", - "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz", - "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==", - "dev": true, - "requires": { - "@babel/helper-explode-assignable-expression": "^7.18.6", - "@babel/types": "^7.18.9" - } - }, - "@babel/helper-compilation-targets": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz", - "integrity": "sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.20.0", - "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.21.3", - "semver": "^6.3.0" - } - }, - "@babel/helper-create-class-features-plugin": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.9.tgz", - "integrity": "sha512-WvypNAYaVh23QcjpMR24CwZY2Nz6hqdOcFdPbNpV56hL5H6KiFheO7Xm1aPdlLQ7d5emYZX7VZwPp9x3z+2opw==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", - "@babel/helper-member-expression-to-functions": "^7.18.9", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-replace-supers": "^7.18.9", - "@babel/helper-split-export-declaration": "^7.18.6" - } - }, - "@babel/helper-create-regexp-features-plugin": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.19.0.tgz", - "integrity": "sha512-htnV+mHX32DF81amCDrwIDr8nrp1PTm+3wfBN9/v8QJOLEioOCOG7qNyq0nHeFiWbT3Eb7gsPwEmV64UCQ1jzw==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "regexpu-core": "^5.1.0" - } - }, - "@babel/helper-define-polyfill-provider": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", - "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", - "dev": true, - "requires": { - "@babel/helper-compilation-targets": "^7.17.7", - "@babel/helper-plugin-utils": "^7.16.7", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" - } - }, - "@babel/helper-environment-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", - "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", - "dev": true - }, - "@babel/helper-explode-assignable-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", - "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-function-name": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", - "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", - "dev": true, - "requires": { - "@babel/template": "^7.18.10", - "@babel/types": "^7.19.0" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz", - "integrity": "sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==", - "dev": true, - "requires": { - "@babel/types": "^7.18.9" - } - }, - "@babel/helper-module-imports": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", - "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-module-transforms": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.2.tgz", - "integrity": "sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA==", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.20.2", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.1", - "@babel/types": "^7.20.2" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", - "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", - "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", - "dev": true - }, - "@babel/helper-remap-async-to-generator": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz", - "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-wrap-function": "^7.18.9", - "@babel/types": "^7.18.9" - } - }, - "@babel/helper-replace-supers": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz", - "integrity": "sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw==", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-member-expression-to-functions": "^7.18.9", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/traverse": "^7.19.1", - "@babel/types": "^7.19.0" - } - }, - "@babel/helper-simple-access": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", - "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", - "dev": true, - "requires": { - "@babel/types": "^7.20.2" - } - }, - "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.18.9.tgz", - "integrity": "sha512-imytd2gHi3cJPsybLRbmFrF7u5BIEuI2cNheyKi3/iOBC63kNn3q8Crn2xVuESli0aM4KYsyEqKyS7lFL8YVtw==", - "dev": true, - "requires": { - "@babel/types": "^7.18.9" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-string-parser": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", - "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", - "dev": true - }, - "@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", - "dev": true - }, - "@babel/helper-validator-option": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", - "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", - "dev": true - }, - "@babel/helper-wrap-function": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.18.9.tgz", - "integrity": "sha512-cG2ru3TRAL6a60tfQflpEfs4ldiPwF6YW3zfJiRgmoFVIaC1vGnBBgatfec+ZUziPHkHSaXAuEck3Cdkf3eRpQ==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.18.9", - "@babel/template": "^7.18.6", - "@babel/traverse": "^7.18.9", - "@babel/types": "^7.18.9" - } - }, - "@babel/helpers": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.1.tgz", - "integrity": "sha512-J77mUVaDTUJFZ5BpP6mMn6OIl3rEWymk2ZxDBQJUG3P+PbmyMcF3bYWvz0ma69Af1oobDqT/iAsvzhB58xhQUg==", - "dev": true, - "requires": { - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.1", - "@babel/types": "^7.20.0" - } - }, - "@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.20.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.3.tgz", - "integrity": "sha512-OP/s5a94frIPXwjzEcv5S/tpQfc6XhxYUnmWpgdqMWGgYCuErA3SzozaRAMQgSZWKeTJxht9aWAkUY+0UzvOFg==", - "dev": true - }, - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz", - "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.9.tgz", - "integrity": "sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", - "@babel/plugin-proposal-optional-chaining": "^7.18.9" - } - }, - "@babel/plugin-proposal-async-generator-functions": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.1.tgz", - "integrity": "sha512-Gh5rchzSwE4kC+o/6T8waD0WHEQIsDmjltY8WnWRXHUdH8axZhuH86Ov9M72YhJfDrZseQwuuWaaIT/TmePp3g==", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-remap-async-to-generator": "^7.18.9", - "@babel/plugin-syntax-async-generators": "^7.8.4" - } - }, - "@babel/plugin-proposal-class-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", - "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-proposal-class-static-block": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz", - "integrity": "sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - } - }, - "@babel/plugin-proposal-dynamic-import": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", - "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - } - }, - "@babel/plugin-proposal-export-namespace-from": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", - "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - } - }, - "@babel/plugin-proposal-json-strings": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", - "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-json-strings": "^7.8.3" - } - }, - "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz", - "integrity": "sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - } - }, - "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", - "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - } - }, - "@babel/plugin-proposal-numeric-separator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", - "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - } - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.2.tgz", - "integrity": "sha512-Ks6uej9WFK+fvIMesSqbAto5dD8Dz4VuuFvGJFKgIGSkJuRGcrwGECPA1fDgQK3/DbExBJpEkTeYeB8geIFCSQ==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.20.1", - "@babel/helper-compilation-targets": "^7.20.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.20.1" - } - }, - "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", - "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - } - }, - "@babel/plugin-proposal-optional-chaining": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz", - "integrity": "sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - } - }, - "@babel/plugin-proposal-private-methods": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", - "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-proposal-private-property-in-object": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz", - "integrity": "sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - } - }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", - "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-syntax-flow": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.18.6.tgz", - "integrity": "sha512-LUbR+KNTBWCUAqRG9ex5Gnzu2IOkt8jRJbHHXFT9q+L9zm7M/QQbEqXyw1n1pohYvOyWC8CjeyjrSaIwiYjK7A==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-syntax-import-assertions": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz", - "integrity": "sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.19.0" - } - }, - "@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-jsx": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", - "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", - "dev": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-typescript": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz", - "integrity": "sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz", - "integrity": "sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz", - "integrity": "sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-remap-async-to-generator": "^7.18.6" - } - }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", - "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-block-scoping": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.2.tgz", - "integrity": "sha512-y5V15+04ry69OV2wULmwhEA6jwSWXO1TwAtIwiPXcvHcoOQUqpyMVd2bDsQJMW8AurjulIyUV8kDqtjSwHy1uQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-classes": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.20.2.tgz", - "integrity": "sha512-9rbPp0lCVVoagvtEyQKSo5L8oo0nQS/iif+lwlAz29MccX2642vWDlSZK+2T2buxbopotId2ld7zZAzRfz9j1g==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-compilation-targets": "^7.20.0", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-replace-supers": "^7.19.1", - "@babel/helper-split-export-declaration": "^7.18.6", - "globals": "^11.1.0" - } - }, - "@babel/plugin-transform-computed-properties": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz", - "integrity": "sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-destructuring": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.20.2.tgz", - "integrity": "sha512-mENM+ZHrvEgxLTBXUiQ621rRXZes3KWUv6NdQlrnr1TkWVw+hUjQBZuP2X32qKlrlG2BzgR95gkuCRSkJl8vIw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", - "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz", - "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", - "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", - "dev": true, - "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-flow-comments": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-comments/-/plugin-transform-flow-comments-7.19.0.tgz", - "integrity": "sha512-N5z4E2Kykifxtj802Np1V1fU90WpihiJ//FMTS6gPcMXu8gKOosf5V9tifxlzsfeUOUVsNWz6IuPrbyZnCOK6w==", - "dev": true, - "requires": { - "@babel/generator": "^7.19.0", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/plugin-syntax-flow": "^7.18.6" - } - }, - "@babel/plugin-transform-flow-strip-types": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.18.9.tgz", - "integrity": "sha512-+G6rp2zRuOAInY5wcggsx4+QVao1qPM0osC9fTUVlAV3zOrzTCnrMAFVnR6+a3T8wz1wFIH7KhYMcMB3u1n80A==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-flow": "^7.18.6" - } - }, - "@babel/plugin-transform-for-of": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz", - "integrity": "sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-function-name": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz", - "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==", - "dev": true, - "requires": { - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-literals": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", - "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-member-expression-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", - "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-modules-amd": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.19.6.tgz", - "integrity": "sha512-uG3od2mXvAtIFQIh0xrpLH6r5fpSQN04gIVovl+ODLdUMANokxQLZnPBHcjmv3GxRjnqwLuHvppjjcelqUFZvg==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.19.6", - "@babel/helper-plugin-utils": "^7.19.0" - } - }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.19.6.tgz", - "integrity": "sha512-8PIa1ym4XRTKuSsOUXqDG0YaOlEuTVvHMe5JCfgBMOtHvJKw/4NGovEGN33viISshG/rZNVrACiBmPQLvWN8xQ==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.19.6", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-simple-access": "^7.19.4" - } - }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.19.6.tgz", - "integrity": "sha512-fqGLBepcc3kErfR9R3DnVpURmckXP7gj7bAlrTQyBxrigFqszZCkFkcoxzCp2v32XmwXLvbw+8Yq9/b+QqksjQ==", - "dev": true, - "requires": { - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-module-transforms": "^7.19.6", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-validator-identifier": "^7.19.1" - } - }, - "@babel/plugin-transform-modules-umd": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", - "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.19.1.tgz", - "integrity": "sha512-oWk9l9WItWBQYS4FgXD4Uyy5kq898lvkXpXQxoJEY1RnvPk4R/Dvu2ebXU9q8lP+rlMwUQTFf2Ok6d78ODa0kw==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.19.0", - "@babel/helper-plugin-utils": "^7.19.0" - } - }, - "@babel/plugin-transform-new-target": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz", - "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-object-super": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", - "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-replace-supers": "^7.18.6" - } - }, - "@babel/plugin-transform-parameters": { - "version": "7.20.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.3.tgz", - "integrity": "sha512-oZg/Fpx0YDrj13KsLyO8I/CX3Zdw7z0O9qOd95SqcoIzuqy/WTGWvePeHAnZCN54SfdyjHcb1S30gc8zlzlHcA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-property-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", - "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-react-jsx": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.18.6.tgz", - "integrity": "sha512-Mz7xMPxoy9kPS/JScj6fJs03TZ/fZ1dJPlMjRAgTaxaS0fUBk8FV/A2rRgfPsVCZqALNwMexD+0Uaf5zlcKPpw==", - "dev": true, - "peer": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-jsx": "^7.18.6", - "@babel/types": "^7.18.6" - } - }, - "@babel/plugin-transform-regenerator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz", - "integrity": "sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "regenerator-transform": "^0.15.0" - } - }, - "@babel/plugin-transform-reserved-words": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", - "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-runtime": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.19.6.tgz", - "integrity": "sha512-PRH37lz4JU156lYFW1p8OxE5i7d6Sl/zV58ooyr+q1J1lnQPyg5tIiXlIwNVhJaY4W3TmOtdc8jqdXQcB1v5Yw==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.19.0", - "babel-plugin-polyfill-corejs2": "^0.3.3", - "babel-plugin-polyfill-corejs3": "^0.6.0", - "babel-plugin-polyfill-regenerator": "^0.4.1", - "semver": "^6.3.0" - } - }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", - "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-spread": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.19.0.tgz", - "integrity": "sha512-RsuMk7j6n+r752EtzyScnWkQyuJdli6LdO5Klv8Yx0OfPVTcQkIUfS8clx5e9yHXzlnhOZF3CbQ8C2uP5j074w==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9" - } - }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", - "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-template-literals": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", - "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", - "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-typescript": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.18.8.tgz", - "integrity": "sha512-p2xM8HI83UObjsZGofMV/EdYjamsDm6MoN3hXPYIT0+gxIoopE+B7rPYKAxfrz9K9PK7JafTTjqYC6qipLExYA==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-typescript": "^7.18.6" - } - }, - "@babel/plugin-transform-unicode-escapes": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz", - "integrity": "sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", - "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/preset-env": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.20.2.tgz", - "integrity": "sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.20.1", - "@babel/helper-compilation-targets": "^7.20.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-async-generator-functions": "^7.20.1", - "@babel/plugin-proposal-class-properties": "^7.18.6", - "@babel/plugin-proposal-class-static-block": "^7.18.6", - "@babel/plugin-proposal-dynamic-import": "^7.18.6", - "@babel/plugin-proposal-export-namespace-from": "^7.18.9", - "@babel/plugin-proposal-json-strings": "^7.18.6", - "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", - "@babel/plugin-proposal-numeric-separator": "^7.18.6", - "@babel/plugin-proposal-object-rest-spread": "^7.20.2", - "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", - "@babel/plugin-proposal-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-private-methods": "^7.18.6", - "@babel/plugin-proposal-private-property-in-object": "^7.18.6", - "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.20.0", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-transform-arrow-functions": "^7.18.6", - "@babel/plugin-transform-async-to-generator": "^7.18.6", - "@babel/plugin-transform-block-scoped-functions": "^7.18.6", - "@babel/plugin-transform-block-scoping": "^7.20.2", - "@babel/plugin-transform-classes": "^7.20.2", - "@babel/plugin-transform-computed-properties": "^7.18.9", - "@babel/plugin-transform-destructuring": "^7.20.2", - "@babel/plugin-transform-dotall-regex": "^7.18.6", - "@babel/plugin-transform-duplicate-keys": "^7.18.9", - "@babel/plugin-transform-exponentiation-operator": "^7.18.6", - "@babel/plugin-transform-for-of": "^7.18.8", - "@babel/plugin-transform-function-name": "^7.18.9", - "@babel/plugin-transform-literals": "^7.18.9", - "@babel/plugin-transform-member-expression-literals": "^7.18.6", - "@babel/plugin-transform-modules-amd": "^7.19.6", - "@babel/plugin-transform-modules-commonjs": "^7.19.6", - "@babel/plugin-transform-modules-systemjs": "^7.19.6", - "@babel/plugin-transform-modules-umd": "^7.18.6", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.19.1", - "@babel/plugin-transform-new-target": "^7.18.6", - "@babel/plugin-transform-object-super": "^7.18.6", - "@babel/plugin-transform-parameters": "^7.20.1", - "@babel/plugin-transform-property-literals": "^7.18.6", - "@babel/plugin-transform-regenerator": "^7.18.6", - "@babel/plugin-transform-reserved-words": "^7.18.6", - "@babel/plugin-transform-shorthand-properties": "^7.18.6", - "@babel/plugin-transform-spread": "^7.19.0", - "@babel/plugin-transform-sticky-regex": "^7.18.6", - "@babel/plugin-transform-template-literals": "^7.18.9", - "@babel/plugin-transform-typeof-symbol": "^7.18.9", - "@babel/plugin-transform-unicode-escapes": "^7.18.10", - "@babel/plugin-transform-unicode-regex": "^7.18.6", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.20.2", - "babel-plugin-polyfill-corejs2": "^0.3.3", - "babel-plugin-polyfill-corejs3": "^0.6.0", - "babel-plugin-polyfill-regenerator": "^0.4.1", - "core-js-compat": "^3.25.1", - "semver": "^6.3.0" - } - }, - "@babel/preset-flow": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.18.6.tgz", - "integrity": "sha512-E7BDhL64W6OUqpuyHnSroLnqyRTcG6ZdOBl1OKI/QK/HJfplqK/S3sq1Cckx7oTodJ5yOXyfw7rEADJ6UjoQDQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-transform-flow-strip-types": "^7.18.6" - } - }, - "@babel/preset-modules": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", - "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - } - }, - "@babel/preset-typescript": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.18.6.tgz", - "integrity": "sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-transform-typescript": "^7.18.6" - } - }, - "@babel/runtime": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.1.tgz", - "integrity": "sha512-mrzLkl6U9YLF8qpqI7TB82PESyEGjm/0Ly91jG575eVxMMlb8fYfOXFZIJ8XfLrJZQbm7dlKry2bJmXBUEkdFg==", - "requires": { - "regenerator-runtime": "^0.13.10" - } - }, - "@babel/template": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", - "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.18.10", - "@babel/types": "^7.18.10" - } - }, - "@babel/traverse": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.1.tgz", - "integrity": "sha512-d3tN8fkVJwFLkHkBN479SOsw4DMZnz8cdbL/gvuDuzy3TS6Nfw80HuQqhw1pITbIruHyh7d1fMA47kWzmcUEGA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.1", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.20.1", - "@babel/types": "^7.20.0", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - }, - "@babel/types": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.2.tgz", - "integrity": "sha512-FnnvsNWgZCr232sqtXggapvlkk/tuwR/qhGzcmxI0GXLCjmPYQPzio2FbdlWuY6y1sHFfQKk+rRbUZ9VStQMog==", - "dev": true, - "requires": { - "@babel/helper-string-parser": "^7.19.4", - "@babel/helper-validator-identifier": "^7.19.1", - "to-fast-properties": "^2.0.0" - } - }, - "@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true - }, - "@discoveryjs/json-ext": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", - "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", - "dev": true - }, - "@eslint/eslintrc": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz", - "integrity": "sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.4.0", - "globals": "^13.15.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "globals": { - "version": "13.17.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", - "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true - } - } - }, - "@humanwhocodes/config-array": { - "version": "0.11.7", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.7.tgz", - "integrity": "sha512-kBbPWzN8oVMLb0hOUYXhmxggL/1cJE6ydvjDIGi9EnAGUyA7cLVKQg+d/Dsm+KZwx2czGHrCmMVLiyg8s5JPKw==", - "dev": true, - "requires": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.5" - } - }, - "@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true - }, - "@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "requires": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - } - }, - "@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true - }, - "@jest/console": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-28.1.3.tgz", - "integrity": "sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw==", - "dev": true, - "requires": { - "@jest/types": "^28.1.3", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^28.1.3", - "jest-util": "^28.1.3", - "slash": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@jest/core": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-28.1.3.tgz", - "integrity": "sha512-CIKBrlaKOzA7YG19BEqCw3SLIsEwjZkeJzf5bdooVnW4bH5cktqe3JX+G2YV1aK5vP8N9na1IGWFzYaTp6k6NA==", - "dev": true, - "requires": { - "@jest/console": "^28.1.3", - "@jest/reporters": "^28.1.3", - "@jest/test-result": "^28.1.3", - "@jest/transform": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^28.1.3", - "jest-config": "^28.1.3", - "jest-haste-map": "^28.1.3", - "jest-message-util": "^28.1.3", - "jest-regex-util": "^28.0.2", - "jest-resolve": "^28.1.3", - "jest-resolve-dependencies": "^28.1.3", - "jest-runner": "^28.1.3", - "jest-runtime": "^28.1.3", - "jest-snapshot": "^28.1.3", - "jest-util": "^28.1.3", - "jest-validate": "^28.1.3", - "jest-watcher": "^28.1.3", - "micromatch": "^4.0.4", - "pretty-format": "^28.1.3", - "rimraf": "^3.0.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@jest/environment": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-28.1.3.tgz", - "integrity": "sha512-1bf40cMFTEkKyEf585R9Iz1WayDjHoHqvts0XFYEqyKM3cFWDpeMoqKKTAF9LSYQModPUlh8FKptoM2YcMWAXA==", - "dev": true, - "requires": { - "@jest/fake-timers": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/node": "*", - "jest-mock": "^28.1.3" - } - }, - "@jest/expect": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-28.1.3.tgz", - "integrity": "sha512-lzc8CpUbSoE4dqT0U+g1qODQjBRHPpCPXissXD4mS9+sWQdmmpeJ9zSH1rS1HEkrsMN0fb7nKrJ9giAR1d3wBw==", - "dev": true, - "requires": { - "expect": "^28.1.3", - "jest-snapshot": "^28.1.3" - } - }, - "@jest/expect-utils": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-28.1.3.tgz", - "integrity": "sha512-wvbi9LUrHJLn3NlDW6wF2hvIMtd4JUl2QNVrjq+IBSHirgfrR3o9RnVtxzdEGO2n9JyIWwHnLfby5KzqBGg2YA==", - "dev": true, - "requires": { - "jest-get-type": "^28.0.2" - } - }, - "@jest/fake-timers": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-28.1.3.tgz", - "integrity": "sha512-D/wOkL2POHv52h+ok5Oj/1gOG9HSywdoPtFsRCUmlCILXNn5eIWmcnd3DIiWlJnpGvQtmajqBP95Ei0EimxfLw==", - "dev": true, - "requires": { - "@jest/types": "^28.1.3", - "@sinonjs/fake-timers": "^9.1.2", - "@types/node": "*", - "jest-message-util": "^28.1.3", - "jest-mock": "^28.1.3", - "jest-util": "^28.1.3" - } - }, - "@jest/globals": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-28.1.3.tgz", - "integrity": "sha512-XFU4P4phyryCXu1pbcqMO0GSQcYe1IsalYCDzRNyhetyeyxMcIxa11qPNDpVNLeretItNqEmYYQn1UYz/5x1NA==", - "dev": true, - "requires": { - "@jest/environment": "^28.1.3", - "@jest/expect": "^28.1.3", - "@jest/types": "^28.1.3" - } - }, - "@jest/reporters": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-28.1.3.tgz", - "integrity": "sha512-JuAy7wkxQZVNU/V6g9xKzCGC5LVXx9FDcABKsSXp5MiKPEE2144a/vXTEDoyzjUpZKfVwp08Wqg5A4WfTMAzjg==", - "dev": true, - "requires": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^28.1.3", - "@jest/test-result": "^28.1.3", - "@jest/transform": "^28.1.3", - "@jest/types": "^28.1.3", - "@jridgewell/trace-mapping": "^0.3.13", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^5.1.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-message-util": "^28.1.3", - "jest-util": "^28.1.3", - "jest-worker": "^28.1.3", - "slash": "^3.0.0", - "string-length": "^4.0.1", - "strip-ansi": "^6.0.0", - "terminal-link": "^2.0.0", - "v8-to-istanbul": "^9.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "jest-worker": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz", - "integrity": "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==", - "dev": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "dependencies": { - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@jest/schemas": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", - "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", - "dev": true, - "requires": { - "@sinclair/typebox": "^0.24.1" - } - }, - "@jest/source-map": { - "version": "28.1.2", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-28.1.2.tgz", - "integrity": "sha512-cV8Lx3BeStJb8ipPHnqVw/IM2VCMWO3crWZzYodSIkxXnRcXJipCdx1JCK0K5MsJJouZQTH73mzf4vgxRaH9ww==", - "dev": true, - "requires": { - "@jridgewell/trace-mapping": "^0.3.13", - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9" - } - }, - "@jest/test-result": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-28.1.3.tgz", - "integrity": "sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg==", - "dev": true, - "requires": { - "@jest/console": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - } - }, - "@jest/test-sequencer": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-28.1.3.tgz", - "integrity": "sha512-NIMPEqqa59MWnDi1kvXXpYbqsfQmSJsIbnd85mdVGkiDfQ9WQQTXOLsvISUfonmnBT+w85WEgneCigEEdHDFxw==", - "dev": true, - "requires": { - "@jest/test-result": "^28.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^28.1.3", - "slash": "^3.0.0" - }, - "dependencies": { - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - } - } - }, - "@jest/transform": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-28.1.3.tgz", - "integrity": "sha512-u5dT5di+oFI6hfcLOHGTAfmUxFRrjK+vnaP0kkVow9Md/M7V/MxqQMOz/VV25UZO8pzeA9PjfTpOu6BDuwSPQA==", - "dev": true, - "requires": { - "@babel/core": "^7.11.6", - "@jest/types": "^28.1.3", - "@jridgewell/trace-mapping": "^0.3.13", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^28.1.3", - "jest-regex-util": "^28.0.2", - "jest-util": "^28.1.3", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "write-file-atomic": "^4.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@jest/types": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", - "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", - "dev": true, - "requires": { - "@jest/schemas": "^28.1.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true - }, - "@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true - }, - "@jridgewell/source-map": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", - "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", - "dev": true, - "requires": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "dependencies": { - "@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - } - } - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, - "@jridgewell/trace-mapping": { - "version": "0.3.14", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz", - "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "@leichtgewicht/ip-codec": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", - "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==", - "dev": true - }, - "@nicolo-ribaudo/chokidar-2": { - "version": "2.1.8-no-fsevents.3", - "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz", - "integrity": "sha512-s88O1aVtXftvp5bCPB7WnmXc5IwOZZ7YPuwNPt+GtOOXpPvad1LfbmjYv+qII7zP6RU2QGnqve27dnLycEnyEQ==", - "dev": true, - "optional": true - }, - "@nicolo-ribaudo/eslint-scope-5-internals": { - "version": "5.1.1-v1", - "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", - "integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==", - "dev": true, - "requires": { - "eslint-scope": "5.1.1" - } - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@sinclair/typebox": { - "version": "0.24.20", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.20.tgz", - "integrity": "sha512-kVaO5aEFZb33nPMTZBxiPEkY+slxiPtqC7QX8f9B3eGOMBvEfuMfxp9DSTTCsRJPumPKjrge4yagyssO4q6qzQ==", - "dev": true - }, - "@sinonjs/commons": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", - "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", - "dev": true, - "requires": { - "type-detect": "4.0.8" - } - }, - "@sinonjs/fake-timers": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz", - "integrity": "sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==", - "dev": true, - "requires": { - "@sinonjs/commons": "^1.7.0" - } - }, - "@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", - "dev": true - }, - "@trysound/sax": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", - "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", - "dev": true - }, - "@types/babel__core": { - "version": "7.1.19", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.19.tgz", - "integrity": "sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw==", - "dev": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "@types/babel__generator": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", - "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", - "dev": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@types/babel__traverse": { - "version": "7.17.1", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.17.1.tgz", - "integrity": "sha512-kVzjari1s2YVi77D3w1yuvohV2idweYXMCDzqBiVNN63TcDWrIlTVOYpqVrvbbyOE/IyzBoTKF0fdnLPEORFxA==", - "dev": true, - "requires": { - "@babel/types": "^7.3.0" - } - }, - "@types/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", - "dev": true, - "requires": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "@types/bonjour": { - "version": "3.5.10", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", - "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/connect": { - "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/connect-history-api-fallback": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz", - "integrity": "sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==", - "dev": true, - "requires": { - "@types/express-serve-static-core": "*", - "@types/node": "*" - } - }, - "@types/eslint": { - "version": "8.4.5", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.5.tgz", - "integrity": "sha512-dhsC09y1gpJWnK+Ff4SGvCuSnk9DaU0BJZSzOwa6GVSg65XtTugLBITDAAzRU5duGBoXBHpdR/9jHGxJjNflJQ==", - "dev": true, - "requires": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "@types/eslint-scope": { - "version": "3.7.4", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", - "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", - "dev": true, - "requires": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "@types/estree": { - "version": "0.0.51", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", - "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", - "dev": true - }, - "@types/express": { - "version": "4.17.13", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", - "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", - "dev": true, - "requires": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.18", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "@types/express-serve-static-core": { - "version": "4.17.29", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.29.tgz", - "integrity": "sha512-uMd++6dMKS32EOuw1Uli3e3BPgdLIXmezcfHv7N4c1s3gkhikBplORPpMq3fuWkxncZN1reb16d5n8yhQ80x7Q==", - "dev": true, - "requires": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*" - } - }, - "@types/graceful-fs": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", - "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", - "dev": true - }, - "@types/http-proxy": { - "version": "1.17.9", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.9.tgz", - "integrity": "sha512-QsbSjA/fSk7xB+UXlCT3wHBy5ai9wOcNDWwZAtud+jXhwOM3l+EYZh8Lng4+/6n8uar0J7xILzqftJdJ/Wdfkw==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", - "dev": true - }, - "@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*" - } - }, - "@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", - "dev": true, - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/jest": { - "version": "28.1.6", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-28.1.6.tgz", - "integrity": "sha512-0RbGAFMfcBJKOmqRazM8L98uokwuwD5F8rHrv/ZMbrZBwVOWZUyPG6VFNscjYr/vjM3Vu4fRrCPbOs42AfemaQ==", - "dev": true, - "requires": { - "jest-matcher-utils": "^28.0.0", - "pretty-format": "^28.0.0" - } - }, - "@types/jsdom": { - "version": "16.2.14", - "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-16.2.14.tgz", - "integrity": "sha512-6BAy1xXEmMuHeAJ4Fv4yXKwBDTGTOseExKE3OaHiNycdHdZw59KfYzrt0DkDluvwmik1HRt6QS7bImxUmpSy+w==", - "dev": true, - "requires": { - "@types/node": "*", - "@types/parse5": "*", - "@types/tough-cookie": "*" - } - }, - "@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", - "dev": true - }, - "@types/mime": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", - "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", - "dev": true - }, - "@types/node": { - "version": "18.0.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.0.6.tgz", - "integrity": "sha512-/xUq6H2aQm261exT6iZTMifUySEt4GR5KX8eYyY+C4MSNPqSh9oNIP7tz2GLKTlFaiBbgZNxffoR3CVRG+cljw==", - "dev": true - }, - "@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", - "dev": true - }, - "@types/parse5": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-6.0.3.tgz", - "integrity": "sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==", - "dev": true - }, - "@types/prettier": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.6.3.tgz", - "integrity": "sha512-ymZk3LEC/fsut+/Q5qejp6R9O1rMxz3XaRHDV6kX8MrGAhOSPqVARbDi+EZvInBpw+BnCX3TD240byVkOfQsHg==", - "dev": true - }, - "@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", - "dev": true - }, - "@types/range-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", - "dev": true - }, - "@types/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", - "dev": true - }, - "@types/semver": { - "version": "7.3.13", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", - "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", - "dev": true - }, - "@types/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", - "dev": true, - "requires": { - "@types/express": "*" - } - }, - "@types/serve-static": { - "version": "1.13.10", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz", - "integrity": "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==", - "dev": true, - "requires": { - "@types/mime": "^1", - "@types/node": "*" - } - }, - "@types/sockjs": { - "version": "0.3.33", - "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", - "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/stack-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", - "dev": true - }, - "@types/tough-cookie": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.2.tgz", - "integrity": "sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw==", - "dev": true - }, - "@types/ws": { - "version": "8.5.3", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz", - "integrity": "sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/yargs": { - "version": "17.0.10", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", - "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", - "dev": true - }, - "@typescript-eslint/eslint-plugin": { - "version": "5.42.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.42.1.tgz", - "integrity": "sha512-LyR6x784JCiJ1j6sH5Y0K6cdExqCCm8DJUTcwG5ThNXJj/G8o5E56u5EdG4SLy+bZAwZBswC+GYn3eGdttBVCg==", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "5.42.1", - "@typescript-eslint/type-utils": "5.42.1", - "@typescript-eslint/utils": "5.42.1", - "debug": "^4.3.4", - "ignore": "^5.2.0", - "natural-compare-lite": "^1.4.0", - "regexpp": "^3.2.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "dependencies": { - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "@typescript-eslint/parser": { - "version": "5.42.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.42.1.tgz", - "integrity": "sha512-kAV+NiNBWVQDY9gDJDToTE/NO8BHi4f6b7zTsVAJoTkmB/zlfOpiEVBzHOKtlgTndCKe8vj9F/PuolemZSh50Q==", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "5.42.1", - "@typescript-eslint/types": "5.42.1", - "@typescript-eslint/typescript-estree": "5.42.1", - "debug": "^4.3.4" - } - }, - "@typescript-eslint/scope-manager": { - "version": "5.42.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.42.1.tgz", - "integrity": "sha512-QAZY/CBP1Emx4rzxurgqj3rUinfsh/6mvuKbLNMfJMMKYLRBfweus8brgXF8f64ABkIZ3zdj2/rYYtF8eiuksQ==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.42.1", - "@typescript-eslint/visitor-keys": "5.42.1" - } - }, - "@typescript-eslint/type-utils": { - "version": "5.42.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.42.1.tgz", - "integrity": "sha512-WWiMChneex5w4xPIX56SSnQQo0tEOy5ZV2dqmj8Z371LJ0E+aymWD25JQ/l4FOuuX+Q49A7pzh/CGIQflxMVXg==", - "dev": true, - "requires": { - "@typescript-eslint/typescript-estree": "5.42.1", - "@typescript-eslint/utils": "5.42.1", - "debug": "^4.3.4", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/types": { - "version": "5.42.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.42.1.tgz", - "integrity": "sha512-Qrco9dsFF5lhalz+lLFtxs3ui1/YfC6NdXu+RAGBa8uSfn01cjO7ssCsjIsUs484vny9Xm699FSKwpkCcqwWwA==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "5.42.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.42.1.tgz", - "integrity": "sha512-qElc0bDOuO0B8wDhhW4mYVgi/LZL+igPwXtV87n69/kYC/7NG3MES0jHxJNCr4EP7kY1XVsRy8C/u3DYeTKQmw==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.42.1", - "@typescript-eslint/visitor-keys": "5.42.1", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "dependencies": { - "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "@typescript-eslint/utils": { - "version": "5.42.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.42.1.tgz", - "integrity": "sha512-Gxvf12xSp3iYZd/fLqiQRD4uKZjDNR01bQ+j8zvhPjpsZ4HmvEFL/tC4amGNyxN9Rq+iqvpHLhlqx6KTxz9ZyQ==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.42.1", - "@typescript-eslint/types": "5.42.1", - "@typescript-eslint/typescript-estree": "5.42.1", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0", - "semver": "^7.3.7" - }, - "dependencies": { - "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "@typescript-eslint/visitor-keys": { - "version": "5.42.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.42.1.tgz", - "integrity": "sha512-LOQtSF4z+hejmpUvitPlc4hA7ERGoj2BVkesOcG91HCn8edLGUXbTrErmutmPbl8Bo9HjAvOO/zBKQHExXNA2A==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.42.1", - "eslint-visitor-keys": "^3.3.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "dev": true - } - } - }, - "@webassemblyjs/ast": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", - "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", - "dev": true, - "requires": { - "@webassemblyjs/helper-numbers": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1" - } - }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", - "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", - "dev": true - }, - "@webassemblyjs/helper-api-error": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", - "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", - "dev": true - }, - "@webassemblyjs/helper-buffer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", - "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", - "dev": true - }, - "@webassemblyjs/helper-numbers": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", - "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", - "dev": true, - "requires": { - "@webassemblyjs/floating-point-hex-parser": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", - "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", - "dev": true - }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", - "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1" - } - }, - "@webassemblyjs/ieee754": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", - "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", - "dev": true, - "requires": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "@webassemblyjs/leb128": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", - "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", - "dev": true, - "requires": { - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/utf8": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", - "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", - "dev": true - }, - "@webassemblyjs/wasm-edit": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", - "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/helper-wasm-section": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-opt": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "@webassemblyjs/wast-printer": "1.11.1" - } - }, - "@webassemblyjs/wasm-gen": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", - "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "@webassemblyjs/wasm-opt": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", - "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1" - } - }, - "@webassemblyjs/wasm-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", - "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "@webassemblyjs/wast-printer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", - "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "@webpack-cli/configtest": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.2.0.tgz", - "integrity": "sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg==", - "dev": true, - "requires": {} - }, - "@webpack-cli/info": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.5.0.tgz", - "integrity": "sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ==", - "dev": true, - "requires": { - "envinfo": "^7.7.3" - } - }, - "@webpack-cli/serve": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.7.0.tgz", - "integrity": "sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q==", - "dev": true, - "requires": {} - }, - "@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true - }, - "@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true - }, - "abab": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", - "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", - "dev": true - }, - "accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dev": true, - "requires": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - } - }, - "acorn": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", - "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", - "dev": true - }, - "acorn-globals": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", - "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", - "dev": true, - "requires": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1" - }, - "dependencies": { - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true - } - } - }, - "acorn-import-assertions": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", - "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", - "dev": true, - "requires": {} - }, - "acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "requires": {} - }, - "acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", - "dev": true - }, - "agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "requires": { - "debug": "4" - } - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "dev": true, - "requires": { - "ajv": "^8.0.0" - }, - "dependencies": { - "ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - } - } - }, - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "requires": {} - }, - "ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "requires": { - "type-fest": "^0.21.3" - } - }, - "ansi-html-community": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", - "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", - "dev": true - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", - "dev": true - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "async": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true - }, - "babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha512-XqYMR2dfdGMW+hd0IUZ2PwK+fGeFkOxZJ0wY+JaQAHzt1Zx8LcvpiZD2NiGkEG8qx0CfkAOr5xt76d1e8vG90g==", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha512-RjTcuD4xjtthQkaWH7dFlH85L+QaVtSoOyGdZ3g6HFhS9dFNDfLyqgm2NFe2X6cQpeFmt0452FJjFG5UameExg==", - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", - "dev": true - } - } - }, - "babel-jest": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-28.1.3.tgz", - "integrity": "sha512-epUaPOEWMk3cWX0M/sPvCHHCe9fMFAa/9hXEgKP8nFfNl/jlGkE9ucq9NqkZGXLDduCJYS0UvSlPUwC0S+rH6Q==", - "dev": true, - "requires": { - "@jest/transform": "^28.1.3", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^28.1.3", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "babel-loader": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.1.0.tgz", - "integrity": "sha512-Antt61KJPinUMwHwIIz9T5zfMgevnfZkEVWYDWlG888fgdvRRGD0JTuf/fFozQnfT+uq64sk1bmdHDy/mOEWnA==", - "dev": true, - "requires": { - "find-cache-dir": "^3.3.2", - "schema-utils": "^4.0.0" - } - }, - "babel-messages": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", - "integrity": "sha512-Bl3ZiA+LjqaMtNYopA9TYE9HP1tQ+E5dLxE0XrAzcIJeK2UqF0/EaqXwBn9esd4UmTfEab+P+UYQ1GnioFIb/w==", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-es6-promise": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-es6-promise/-/babel-plugin-es6-promise-1.1.1.tgz", - "integrity": "sha512-4TegE0KtgSI0zrorLip9pfxKl6b09JQjGwe4Bvefl8zQZF6hBl8lOByserHdIMs8UpJOYVnDsK3V4LrtQYXplQ==", - "dev": true, - "requires": { - "babel-template": "^6.7.0", - "babel-types": "^6.7.2" - } - }, - "babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - } - }, - "babel-plugin-jest-hoist": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-28.1.3.tgz", - "integrity": "sha512-Ys3tUKAmfnkRUpPdpa98eYrAR0nV+sSFUZZEGuQ2EbFd1y4SOLtD5QDNHAq+bb9a+bbXvYQC4b+ID/THIMcU6Q==", - "dev": true, - "requires": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.1.14", - "@types/babel__traverse": "^7.0.6" - } - }, - "babel-plugin-polyfill-corejs2": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", - "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.17.7", - "@babel/helper-define-polyfill-provider": "^0.3.3", - "semver": "^6.1.1" - } - }, - "babel-plugin-polyfill-corejs3": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", - "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==", - "dev": true, - "requires": { - "@babel/helper-define-polyfill-provider": "^0.3.3", - "core-js-compat": "^3.25.1" - } - }, - "babel-plugin-polyfill-regenerator": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", - "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==", - "dev": true, - "requires": { - "@babel/helper-define-polyfill-provider": "^0.3.3" - } - }, - "babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", - "dev": true, - "requires": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" - } - }, - "babel-preset-jest": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-28.1.3.tgz", - "integrity": "sha512-L+fupJvlWAHbQfn74coNX3zf60LXMJsezNvvx8eIh7iOR1luJ1poxYgQk1F8PYtNq/6QODDHCqsSnTFSWC491A==", - "dev": true, - "requires": { - "babel-plugin-jest-hoist": "^28.1.3", - "babel-preset-current-node-syntax": "^1.0.0" - } - }, - "babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==", - "dev": true, - "requires": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" - }, - "dependencies": { - "core-js": { - "version": "2.6.12", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", - "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", - "dev": true - }, - "regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", - "dev": true - } - } - }, - "babel-template": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", - "integrity": "sha512-PCOcLFW7/eazGUKIoqH97sO9A2UYMahsn/yRQ7uOk37iutwjq7ODtcTNF+iFDSHNfkctqsLRjLP7URnOx0T1fg==", - "dev": true, - "requires": { - "babel-runtime": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "lodash": "^4.17.4" - } - }, - "babel-traverse": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", - "integrity": "sha512-iSxeXx7apsjCHe9c7n8VtRXGzI2Bk1rBSOJgCCjfyXb6v1aCqE1KSEpq/8SXuVN8Ka/Rh1WDTF0MDzkvTA4MIA==", - "dev": true, - "requires": { - "babel-code-frame": "^6.26.0", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "debug": "^2.6.8", - "globals": "^9.18.0", - "invariant": "^2.2.2", - "lodash": "^4.17.4" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "globals": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", - "dev": true - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - } - } - }, - "babel-types": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", - "integrity": "sha512-zhe3V/26rCWsEZK8kZN+HaQj5yQ1CilTObixFzKW1UWjqG7618Twz6YEsCnjfg5gBcJh02DrpCkS9h98ZqDY+g==", - "dev": true, - "requires": { - "babel-runtime": "^6.26.0", - "esutils": "^2.0.2", - "lodash": "^4.17.4", - "to-fast-properties": "^1.0.3" - }, - "dependencies": { - "to-fast-properties": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", - "integrity": "sha512-lxrWP8ejsq+7E3nNjwYmUBMAgjMTZoTI+sdBOpvNyijeDLa29LUn9QaoXAHv4+Z578hbmHHJKZknzxVtvo77og==", - "dev": true - } - } - }, - "babylon": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", - "dev": true - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "base64-arraybuffer-es6": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/base64-arraybuffer-es6/-/base64-arraybuffer-es6-0.7.0.tgz", - "integrity": "sha512-ESyU/U1CFZDJUdr+neHRhNozeCv72Y7Vm0m1DCbjX3KBjT6eYocvAJlSk6+8+HkVwXlT1FNxhGW6q3UKAlCvvw==", - "dev": true - }, - "batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", - "dev": true - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true - }, - "body-parser": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", - "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", - "dev": true, - "requires": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.10.3", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "dependencies": { - "bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - } - } - }, - "bonjour-service": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.0.13.tgz", - "integrity": "sha512-LWKRU/7EqDUC9CTAQtuZl5HzBALoCYwtLhffW3et7vZMwv3bWLpJf8bRYlMD5OCcDpTfnPgNCV4yo9ZIaJGMiA==", - "dev": true, - "requires": { - "array-flatten": "^2.1.2", - "dns-equal": "^1.0.0", - "fast-deep-equal": "^3.1.3", - "multicast-dns": "^7.2.5" - } - }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", - "dev": true - }, - "browserslist": { - "version": "4.21.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", - "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001400", - "electron-to-chromium": "^1.4.251", - "node-releases": "^2.0.6", - "update-browserslist-db": "^1.0.9" - } - }, - "bs-logger": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", - "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", - "dev": true, - "requires": { - "fast-json-stable-stringify": "2.x" - } - }, - "bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, - "requires": { - "node-int64": "^0.4.0" - } - }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", - "dev": true - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "camel-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", - "dev": true, - "requires": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" - } - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "caniuse-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", - "dev": true, - "requires": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" - } - }, - "caniuse-lite": { - "version": "1.0.30001431", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001431.tgz", - "integrity": "sha512-zBUoFU0ZcxpvSt9IU66dXVT/3ctO1cy4y9cscs1szkPlcWb6pasYM144GqrUygUbT+k7cmUCW61cvskjcv0enQ==", - "dev": true - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "dev": true - }, - "chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - } - }, - "chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "dev": true - }, - "ci-info": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz", - "integrity": "sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==", - "dev": true - }, - "cjs-module-lexer": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", - "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", - "dev": true - }, - "clean-css": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.1.tgz", - "integrity": "sha512-lCr8OHhiWCTw4v8POJovCoh4T7I9U11yVsPjMWWnnMmp9ZowCxyad1Pathle/9HjaDp+fdQKjO9fQydE6RHTZg==", - "dev": true, - "requires": { - "source-map": "~0.6.0" - } - }, - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - } - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", - "dev": true - }, - "collect-v8-coverage": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", - "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", - "dev": true - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "colord": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.2.tgz", - "integrity": "sha512-Uqbg+J445nc1TKn4FoDPS6ZZqAvEDnwrH42yo8B40JSOgSLxMZ/gt3h4nmCtPLQeXhjJJkqBx7SCY35WnIixaQ==", - "dev": true - }, - "colorette": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", - "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", - "dev": true - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "dev": true - }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", - "dev": true - }, - "compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "dev": true, - "requires": { - "mime-db": ">= 1.43.0 < 2" - } - }, - "compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", - "dev": true, - "requires": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - } - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "connect-history-api-fallback": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", - "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", - "dev": true - }, - "content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dev": true, - "requires": { - "safe-buffer": "5.2.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - } - } - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", - "dev": true - }, - "convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - } - }, - "cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", - "dev": true - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", - "dev": true - }, - "core-js-compat": { - "version": "3.26.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.26.0.tgz", - "integrity": "sha512-piOX9Go+Z4f9ZiBFLnZ5VrOpBl0h7IGCkiFUN11QTe6LjAvOT3ifL/5TdoizMh99hcGy5SoLyWbapIY/PIb/3A==", - "dev": true, - "requires": { - "browserslist": "^4.21.4" - } - }, - "core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, - "cosmiconfig": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", - "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", - "dev": true, - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - } - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "css-declaration-sorter": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.3.0.tgz", - "integrity": "sha512-OGT677UGHJTAVMRhPO+HJ4oKln3wkBTwtDFH0ojbqm+MJm6xuDMHp2nkhh/ThaBqq20IbraBQSWKfSLNHQO9Og==", - "dev": true, - "requires": {} - }, - "css-loader": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.11.0.tgz", - "integrity": "sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==", - "dev": true, - "requires": { - "icss-utils": "^5.1.0", - "postcss": "^8.4.33", - "postcss-modules-extract-imports": "^3.1.0", - "postcss-modules-local-by-default": "^4.0.5", - "postcss-modules-scope": "^3.2.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.2.0", - "semver": "^7.5.4" - }, - "dependencies": { - "semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "css-minimizer-webpack-plugin": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-4.2.2.tgz", - "integrity": "sha512-s3Of/4jKfw1Hj9CxEO1E5oXhQAxlayuHO2y/ML+C6I9sQ7FdzfEV6QgMLN3vI+qFsjJGIAFLKtQK7t8BOXAIyA==", - "dev": true, - "requires": { - "cssnano": "^5.1.8", - "jest-worker": "^29.1.2", - "postcss": "^8.4.17", - "schema-utils": "^4.0.0", - "serialize-javascript": "^6.0.0", - "source-map": "^0.6.1" - }, - "dependencies": { - "@jest/schemas": { - "version": "29.0.0", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.0.0.tgz", - "integrity": "sha512-3Ab5HgYIIAnS0HjqJHQYZS+zXc4tUmTmBH3z83ajI6afXp8X3ZtdLX+nXx+I7LNkJD7uN9LAVhgnjDgZa2z0kA==", - "dev": true, - "requires": { - "@sinclair/typebox": "^0.24.1" - } - }, - "@jest/types": { - "version": "29.3.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.3.1.tgz", - "integrity": "sha512-d0S0jmmTpjnhCmNpApgX3jrUZgZ22ivKJRvL2lli5hpCRoNnp1f85r2/wpKfXuYu8E7Jjh1hGfhPyup1NM5AmA==", - "dev": true, - "requires": { - "@jest/schemas": "^29.0.0", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "dependencies": { - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "jest-util": { - "version": "29.3.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.3.1.tgz", - "integrity": "sha512-7YOVZaiX7RJLv76ZfHt4nbNEzzTRiMW/IiOG7ZOKmTXmoGBxUDefgMAxQubu6WPVqP5zSzAdZG0FfLcC7HOIFQ==", - "dev": true, - "requires": { - "@jest/types": "^29.3.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - }, - "jest-worker": { - "version": "29.3.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.3.1.tgz", - "integrity": "sha512-lY4AnnmsEWeiXirAIA0c9SDPbuCBq8IYuDVL8PMm0MZ2PEs2yPvRA/J64QBXuZp7CYKrDM/rmNrc9/i3KJQncw==", - "dev": true, - "requires": { - "@types/node": "*", - "jest-util": "^29.3.1", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - } - }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", - "dev": true, - "requires": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - } - }, - "css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "dev": true, - "requires": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - } - }, - "css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "dev": true - }, - "cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true - }, - "cssnano": { - "version": "5.1.12", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.12.tgz", - "integrity": "sha512-TgvArbEZu0lk/dvg2ja+B7kYoD7BBCmn3+k58xD0qjrGHsFzXY/wKTo9M5egcUCabPol05e/PVoIu79s2JN4WQ==", - "dev": true, - "requires": { - "cssnano-preset-default": "^5.2.12", - "lilconfig": "^2.0.3", - "yaml": "^1.10.2" - } - }, - "cssnano-preset-default": { - "version": "5.2.12", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.12.tgz", - "integrity": "sha512-OyCBTZi+PXgylz9HAA5kHyoYhfGcYdwFmyaJzWnzxuGRtnMw/kR6ilW9XzlzlRAtB6PLT/r+prYgkef7hngFew==", - "dev": true, - "requires": { - "css-declaration-sorter": "^6.3.0", - "cssnano-utils": "^3.1.0", - "postcss-calc": "^8.2.3", - "postcss-colormin": "^5.3.0", - "postcss-convert-values": "^5.1.2", - "postcss-discard-comments": "^5.1.2", - "postcss-discard-duplicates": "^5.1.0", - "postcss-discard-empty": "^5.1.1", - "postcss-discard-overridden": "^5.1.0", - "postcss-merge-longhand": "^5.1.6", - "postcss-merge-rules": "^5.1.2", - "postcss-minify-font-values": "^5.1.0", - "postcss-minify-gradients": "^5.1.1", - "postcss-minify-params": "^5.1.3", - "postcss-minify-selectors": "^5.2.1", - "postcss-normalize-charset": "^5.1.0", - "postcss-normalize-display-values": "^5.1.0", - "postcss-normalize-positions": "^5.1.1", - "postcss-normalize-repeat-style": "^5.1.1", - "postcss-normalize-string": "^5.1.0", - "postcss-normalize-timing-functions": "^5.1.0", - "postcss-normalize-unicode": "^5.1.0", - "postcss-normalize-url": "^5.1.0", - "postcss-normalize-whitespace": "^5.1.1", - "postcss-ordered-values": "^5.1.3", - "postcss-reduce-initial": "^5.1.0", - "postcss-reduce-transforms": "^5.1.0", - "postcss-svgo": "^5.1.0", - "postcss-unique-selectors": "^5.1.1" - } - }, - "cssnano-utils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", - "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", - "dev": true, - "requires": {} - }, - "csso": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", - "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", - "dev": true, - "requires": { - "css-tree": "^1.1.2" - } - }, - "cssom": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", - "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==", - "dev": true - }, - "cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", - "dev": true, - "requires": { - "cssom": "~0.3.6" - }, - "dependencies": { - "cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true - } - } - }, - "data-urls": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", - "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", - "dev": true, - "requires": { - "abab": "^2.0.6", - "whatwg-mimetype": "^3.0.0", - "whatwg-url": "^11.0.0" - }, - "dependencies": { - "whatwg-url": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", - "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", - "dev": true, - "requires": { - "tr46": "^3.0.0", - "webidl-conversions": "^7.0.0" - } - } - } - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "decimal.js": { - "version": "10.3.1", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", - "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==", - "dev": true - }, - "dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", - "dev": true - }, - "deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", - "dev": true - }, - "default-gateway": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", - "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", - "dev": true, - "requires": { - "execa": "^5.0.0" - } - }, - "define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "dev": true - }, - "define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "dev": true, - "requires": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true - }, - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true - }, - "destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "dev": true - }, - "detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "dev": true - }, - "detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", - "dev": true - }, - "diff-sequences": { - "version": "28.1.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.1.1.tgz", - "integrity": "sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw==", - "dev": true - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==", - "dev": true - }, - "dns-packet": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.4.0.tgz", - "integrity": "sha512-EgqGeaBB8hLiHLZtp/IbaDQTL8pZ0+IvwzSHA6d7VyMDM+B9hgddEMa9xjK5oYnw0ci0JQ6g2XCD7/f6cafU6g==", - "dev": true, - "requires": { - "@leichtgewicht/ip-codec": "^2.0.1" - } - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "dom-converter": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", - "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", - "dev": true, - "requires": { - "utila": "~0.4" - } - }, - "dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "dev": true, - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - } - }, - "domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "dev": true - }, - "domexception": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", - "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", - "dev": true, - "requires": { - "webidl-conversions": "^7.0.0" - } - }, - "domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "dev": true, - "requires": { - "domelementtype": "^2.2.0" - } - }, - "domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "dev": true, - "requires": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - } - }, - "dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", - "dev": true, - "requires": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "dev": true - }, - "ejs": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.8.tgz", - "integrity": "sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==", - "dev": true, - "requires": { - "jake": "^10.8.5" - } - }, - "electron-to-chromium": { - "version": "1.4.284", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", - "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==", - "dev": true - }, - "emittery": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz", - "integrity": "sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "dev": true - }, - "enhanced-resolve": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz", - "integrity": "sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - } - }, - "entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "dev": true - }, - "envinfo": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", - "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", - "dev": true - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es-abstract": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz", - "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.1", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "regexp.prototype.flags": "^1.4.3", - "string.prototype.trimend": "^1.0.5", - "string.prototype.trimstart": "^1.0.5", - "unbox-primitive": "^1.0.2" - } - }, - "es-module-lexer": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", - "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", - "dev": true - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "es6-promise": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", - "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", - "dev": true - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true - }, - "escodegen": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", - "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", - "dev": true, - "requires": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - } - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", - "dev": true - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2" - } - } - } - }, - "eslint": { - "version": "8.27.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.27.0.tgz", - "integrity": "sha512-0y1bfG2ho7mty+SiILVf9PfuRA49ek4Nc60Wmmu62QlobNR+CeXa4xXIJgcuwSQgZiWaPH+5BDsctpIW0PR/wQ==", - "dev": true, - "requires": { - "@eslint/eslintrc": "^1.3.3", - "@humanwhocodes/config-array": "^0.11.6", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.4.0", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.15.0", - "grapheme-splitter": "^1.0.4", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-sdsl": "^4.1.4", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "regexpp": "^3.2.0", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, - "eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - } - }, - "eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "dev": true - }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - }, - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "requires": { - "is-glob": "^4.0.3" - } - }, - "globals": { - "version": "13.17.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", - "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "requires": { - "p-limit": "^3.0.2" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true - } - } - }, - "eslint-plugin-flowtype": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-8.0.3.tgz", - "integrity": "sha512-dX8l6qUL6O+fYPtpNRideCFSpmWOUVx5QcaGLVqe/vlDiBSe4vYljDWDETwnyFzpl7By/WVIu6rcrniCgH9BqQ==", - "dev": true, - "requires": { - "lodash": "^4.17.21", - "string-natural-compare": "^3.0.1" - } - }, - "eslint-plugin-jest": { - "version": "26.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-26.6.0.tgz", - "integrity": "sha512-f8n46/97ZFdU4KqeQYqO8AEVGIhHWvkpgNBWHH3jrM28/y8llnbf3IjfIKv6p2pZIMinK1PCqbbROxs9Eud02Q==", - "dev": true, - "requires": { - "@typescript-eslint/utils": "^5.10.0" - } - }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^2.0.0" - } - }, - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true - }, - "eslint-webpack-plugin": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-3.2.0.tgz", - "integrity": "sha512-avrKcGncpPbPSUHX6B3stNGzkKFto3eL+DKM4+VyMrVnhPc3vRczVlCq3uhuFOdRvDHTVXuzwk1ZKUrqDQHQ9w==", - "dev": true, - "requires": { - "@types/eslint": "^7.29.0 || ^8.4.1", - "jest-worker": "^28.0.2", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "schema-utils": "^4.0.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "jest-worker": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz", - "integrity": "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==", - "dev": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - } - }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "espree": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", - "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", - "dev": true, - "requires": { - "acorn": "^8.8.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "dev": true - } - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, - "requires": { - "estraverse": "^5.1.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "dev": true - }, - "eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true - }, - "events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true - }, - "execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - } - }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", - "dev": true - }, - "expect": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/expect/-/expect-28.1.3.tgz", - "integrity": "sha512-eEh0xn8HlsuOBxFgIss+2mX85VAS4Qy3OSkjV7rlBWljtA4oWH37glVGyOZSZvErDT/yBywZdPGwCXuTvSG85g==", - "dev": true, - "requires": { - "@jest/expect-utils": "^28.1.3", - "jest-get-type": "^28.0.2", - "jest-matcher-utils": "^28.1.3", - "jest-message-util": "^28.1.3", - "jest-util": "^28.1.3" - } - }, - "express": { - "version": "4.18.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", - "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", - "dev": true, - "requires": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.0", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.10.3", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "dependencies": { - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "dev": true - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - } - } - }, - "fake-indexeddb": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fake-indexeddb/-/fake-indexeddb-4.0.0.tgz", - "integrity": "sha512-oCfWSJ/qvQn1XPZ8SHX6kY3zr1t+bN7faZ/lltGY0SBGhFOPXnWf0+pbO/MOAgfMx6khC2gK3S/bvAgQpuQHDQ==", - "dev": true, - "requires": { - "realistic-structured-clone": "^3.0.0" - } - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - } - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "fastest-levenshtein": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", - "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==", - "dev": true - }, - "fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", - "dev": true, - "requires": { - "websocket-driver": ">=0.5.1" - } - }, - "fb-watchman": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", - "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", - "dev": true, - "requires": { - "bser": "2.1.1" - } - }, - "file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "requires": { - "flat-cache": "^3.0.4" - } - }, - "filelist": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", - "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", - "dev": true, - "requires": { - "minimatch": "^5.0.1" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "minimatch": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", - "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - } - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "dev": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - } - } - }, - "find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - }, - "dependencies": { - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - } - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - } - }, - "flatted": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz", - "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==", - "dev": true - }, - "flow-bin": { - "version": "0.192.0", - "resolved": "https://registry.npmjs.org/flow-bin/-/flow-bin-0.192.0.tgz", - "integrity": "sha512-RlHhXn9m1IRTB5yKhnLGgLWq9z4qJ76slum/DXvmTlrAUPaVcmU/IsTHiY4JpjqK7nFz4oyrnU/YES8xDVBoZg==", - "dev": true - }, - "flowtype-webpack-plugin": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/flowtype-webpack-plugin/-/flowtype-webpack-plugin-0.0.3.tgz", - "integrity": "sha512-bQZh03qa/QCIw3XCGHY3iDkqDljbRJzJx74w4c0s/XYNwhGOnHNqFGT4MkVZr/NK4WHJmbRH5yxVKypbvpu1ug==", - "dev": true - }, - "follow-redirects": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", - "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==", - "dev": true - }, - "fork-ts-checker-webpack-plugin": { - "version": "7.2.13", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-7.2.13.tgz", - "integrity": "sha512-fR3WRkOb4bQdWB/y7ssDUlVdrclvwtyCUIHCfivAoYxq9dF7XfrDKbMdZIfwJ7hxIAqkYSGeU7lLJE6xrxIBdg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.16.7", - "chalk": "^4.1.2", - "chokidar": "^3.5.3", - "cosmiconfig": "^7.0.1", - "deepmerge": "^4.2.2", - "fs-extra": "^10.0.0", - "memfs": "^3.4.1", - "minimatch": "^3.0.4", - "node-abort-controller": "^3.0.1", - "schema-utils": "^3.1.1", - "semver": "^7.3.5", - "tapable": "^2.2.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, - "forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "dev": true - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "dev": true - }, - "fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "fs-monkey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", - "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==", - "dev": true - }, - "fs-readdir-recursive": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", - "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", - "dev": true - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - } - }, - "functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true - }, - "gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "get-intrinsic": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", - "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - } - }, - "get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true - }, - "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true - }, - "get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - } - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - }, - "globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "dependencies": { - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - } - } - }, - "graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true - }, - "grapheme-splitter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", - "dev": true - }, - "handle-thing": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", - "dev": true - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true - } - } - }, - "has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, - "has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.1" - } - }, - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true - }, - "has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true - }, - "hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - } - } - }, - "html-encoding-sniffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", - "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", - "dev": true, - "requires": { - "whatwg-encoding": "^2.0.0" - } - }, - "html-entities": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", - "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==", - "dev": true - }, - "html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "html-loader": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/html-loader/-/html-loader-4.2.0.tgz", - "integrity": "sha512-OxCHD3yt+qwqng2vvcaPApCEvbx+nXWu+v69TYHx1FO8bffHn/JjHtE3TTQZmHjwvnJe4xxzuecetDVBrQR1Zg==", - "dev": true, - "requires": { - "html-minifier-terser": "^7.0.0", - "parse5": "^7.0.0" - }, - "dependencies": { - "clean-css": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.2.0.tgz", - "integrity": "sha512-2639sWGa43EMmG7fn8mdVuBSs6HuWaSor+ZPoFWzenBc6oN+td8YhTfghWXZ25G1NiiSvz8bOFBS7PdSbTiqEA==", - "dev": true, - "requires": { - "source-map": "~0.6.0" - } - }, - "commander": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.4.1.tgz", - "integrity": "sha512-5EEkTNyHNGFPD2H+c/dXXfQZYa/scCKasxWcXJaWnNJ99pnQN9Vnmqow+p+PlFPE63Q6mThaZws1T+HxfpgtPw==", - "dev": true - }, - "entities": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.3.1.tgz", - "integrity": "sha512-o4q/dYJlmyjP2zfnaWDUC6A3BQFmVTX+tZPezK7k0GLSU9QYCauscf5Y+qcEPzKL+EixVouYDgLQK5H9GrLpkg==", - "dev": true - }, - "html-minifier-terser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-7.0.0.tgz", - "integrity": "sha512-Adqk0b/pWKIQiGvEAuzPKpBKNHiwblr3QSGS7TTr6v+xXKV9AI2k4vWW+6Oytt6Z5SeBnfvYypKOnz8r75pz3Q==", - "dev": true, - "requires": { - "camel-case": "^4.1.2", - "clean-css": "5.2.0", - "commander": "^9.4.0", - "entities": "^4.3.1", - "param-case": "^3.0.4", - "relateurl": "^0.2.7", - "terser": "^5.14.2" - } - }, - "parse5": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.0.0.tgz", - "integrity": "sha512-y/t8IXSPWTuRZqXc0ajH/UwDj4mnqLEbSttNbThcFhGrZuOyoyvNBO85PBp2jQa55wY9d07PBNjsK8ZP3K5U6g==", - "dev": true, - "requires": { - "entities": "^4.3.0" - } - } - } - }, - "html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", - "dev": true, - "requires": { - "camel-case": "^4.1.2", - "clean-css": "^5.2.2", - "commander": "^8.3.0", - "he": "^1.2.0", - "param-case": "^3.0.4", - "relateurl": "^0.2.7", - "terser": "^5.10.0" - }, - "dependencies": { - "commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "dev": true - } - } - }, - "html-webpack-plugin": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz", - "integrity": "sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==", - "dev": true, - "requires": { - "@types/html-minifier-terser": "^6.0.0", - "html-minifier-terser": "^6.0.2", - "lodash": "^4.17.21", - "pretty-error": "^4.0.0", - "tapable": "^2.0.0" - } - }, - "htmlparser2": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", - "dev": true, - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" - } - }, - "http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", - "dev": true - }, - "http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dev": true, - "requires": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - } - }, - "http-parser-js": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", - "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", - "dev": true - }, - "http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "dev": true, - "requires": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - } - }, - "http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", - "dev": true, - "requires": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - } - }, - "http-proxy-middleware": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", - "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", - "dev": true, - "requires": { - "@types/http-proxy": "^1.17.8", - "http-proxy": "^1.18.1", - "is-glob": "^4.0.1", - "is-plain-obj": "^3.0.0", - "micromatch": "^4.0.2" - } - }, - "https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, - "requires": { - "agent-base": "6", - "debug": "4" - } - }, - "human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "dev": true, - "requires": {} - }, - "ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true - }, - "immutable": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.5.tgz", - "integrity": "sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw==", - "dev": true - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - } - } - }, - "import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", - "dev": true, - "requires": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - } - }, - "interpret": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", - "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", - "dev": true - }, - "invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "dev": true, - "requires": { - "loose-envify": "^1.0.0" - } - }, - "ipaddr.js": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", - "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==", - "dev": true - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true - }, - "is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, - "requires": { - "has-bigints": "^1.0.1" - } - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-callable": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", - "dev": true - }, - "is-core-module": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", - "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "dev": true - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true - }, - "is-plain-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", - "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", - "dev": true - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "is-potential-custom-element-name": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", - "dev": true - }, - "is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true - }, - "is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "requires": { - "is-docker": "^2.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "dev": true - }, - "istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", - "dev": true - }, - "istanbul-lib-instrument": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.0.tgz", - "integrity": "sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A==", - "dev": true, - "requires": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - } - }, - "istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - } - }, - "istanbul-reports": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", - "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", - "dev": true, - "requires": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - } - }, - "jake": { - "version": "10.8.5", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz", - "integrity": "sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==", - "dev": true, - "requires": { - "async": "^3.2.3", - "chalk": "^4.0.2", - "filelist": "^1.0.1", - "minimatch": "^3.0.4" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest/-/jest-28.1.3.tgz", - "integrity": "sha512-N4GT5on8UkZgH0O5LUavMRV1EDEhNTL0KEfRmDIeZHSV7p2XgLoY9t9VDUgL6o+yfdgYHVxuz81G8oB9VG5uyA==", - "dev": true, - "requires": { - "@jest/core": "^28.1.3", - "@jest/types": "^28.1.3", - "import-local": "^3.0.2", - "jest-cli": "^28.1.3" - } - }, - "jest-changed-files": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-28.1.3.tgz", - "integrity": "sha512-esaOfUWJXk2nfZt9SPyC8gA1kNfdKLkQWyzsMlqq8msYSlNKfmZxfRgZn4Cd4MGVUF+7v6dBs0d5TOAKa7iIiA==", - "dev": true, - "requires": { - "execa": "^5.0.0", - "p-limit": "^3.1.0" - } - }, - "jest-circus": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-28.1.3.tgz", - "integrity": "sha512-cZ+eS5zc79MBwt+IhQhiEp0OeBddpc1n8MBo1nMB8A7oPMKEO+Sre+wHaLJexQUj9Ya/8NOBY0RESUgYjB6fow==", - "dev": true, - "requires": { - "@jest/environment": "^28.1.3", - "@jest/expect": "^28.1.3", - "@jest/test-result": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^0.7.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^28.1.3", - "jest-matcher-utils": "^28.1.3", - "jest-message-util": "^28.1.3", - "jest-runtime": "^28.1.3", - "jest-snapshot": "^28.1.3", - "jest-util": "^28.1.3", - "p-limit": "^3.1.0", - "pretty-format": "^28.1.3", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-cli": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-28.1.3.tgz", - "integrity": "sha512-roY3kvrv57Azn1yPgdTebPAXvdR2xfezaKKYzVxZ6It/5NCxzJym6tUI5P1zkdWhfUYkxEI9uZWcQdaFLo8mJQ==", - "dev": true, - "requires": { - "@jest/core": "^28.1.3", - "@jest/test-result": "^28.1.3", - "@jest/types": "^28.1.3", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "import-local": "^3.0.2", - "jest-config": "^28.1.3", - "jest-util": "^28.1.3", - "jest-validate": "^28.1.3", - "prompts": "^2.0.1", - "yargs": "^17.3.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-config": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-28.1.3.tgz", - "integrity": "sha512-MG3INjByJ0J4AsNBm7T3hsuxKQqFIiRo/AUqb1q9LRKI5UU6Aar9JHbr9Ivn1TVwfUD9KirRoM/T6u8XlcQPHQ==", - "dev": true, - "requires": { - "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^28.1.3", - "@jest/types": "^28.1.3", - "babel-jest": "^28.1.3", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-circus": "^28.1.3", - "jest-environment-node": "^28.1.3", - "jest-get-type": "^28.0.2", - "jest-regex-util": "^28.0.2", - "jest-resolve": "^28.1.3", - "jest-runner": "^28.1.3", - "jest-util": "^28.1.3", - "jest-validate": "^28.1.3", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^28.1.3", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-diff": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.3.tgz", - "integrity": "sha512-8RqP1B/OXzjjTWkqMX67iqgwBVJRgCyKD3L9nq+6ZqJMdvjE8RgHktqZ6jNrkdMT+dJuYNI3rhQpxaz7drJHfw==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^28.1.1", - "jest-get-type": "^28.0.2", - "pretty-format": "^28.1.3" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-docblock": { - "version": "28.1.1", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-28.1.1.tgz", - "integrity": "sha512-3wayBVNiOYx0cwAbl9rwm5kKFP8yHH3d/fkEaL02NPTkDojPtheGB7HZSFY4wzX+DxyrvhXz0KSCVksmCknCuA==", - "dev": true, - "requires": { - "detect-newline": "^3.0.0" - } - }, - "jest-each": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-28.1.3.tgz", - "integrity": "sha512-arT1z4sg2yABU5uogObVPvSlSMQlDA48owx07BDPAiasW0yYpYHYOo4HHLz9q0BVzDVU4hILFjzJw0So9aCL/g==", - "dev": true, - "requires": { - "@jest/types": "^28.1.3", - "chalk": "^4.0.0", - "jest-get-type": "^28.0.2", - "jest-util": "^28.1.3", - "pretty-format": "^28.1.3" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-environment-jsdom": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-28.1.3.tgz", - "integrity": "sha512-HnlGUmZRdxfCByd3GM2F100DgQOajUBzEitjGqIREcb45kGjZvRrKUdlaF6escXBdcXNl0OBh+1ZrfeZT3GnAg==", - "dev": true, - "requires": { - "@jest/environment": "^28.1.3", - "@jest/fake-timers": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/jsdom": "^16.2.4", - "@types/node": "*", - "jest-mock": "^28.1.3", - "jest-util": "^28.1.3", - "jsdom": "^19.0.0" - } - }, - "jest-environment-node": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-28.1.3.tgz", - "integrity": "sha512-ugP6XOhEpjAEhGYvp5Xj989ns5cB1K6ZdjBYuS30umT4CQEETaxSiPcZ/E1kFktX4GkrcM4qu07IIlDYX1gp+A==", - "dev": true, - "requires": { - "@jest/environment": "^28.1.3", - "@jest/fake-timers": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/node": "*", - "jest-mock": "^28.1.3", - "jest-util": "^28.1.3" - } - }, - "jest-extended": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/jest-extended/-/jest-extended-3.2.2.tgz", - "integrity": "sha512-hjnKdy3xBUTbe3CH8nc5WDDvX2btn5x04XXcN1AGqUKT48dzqeF4oWvz+wW21N66lV5+OFmJB387dU3YRZfOSA==", - "dev": true, - "requires": { - "jest-diff": "^29.0.0", - "jest-get-type": "^29.0.0" - }, - "dependencies": { - "@jest/schemas": { - "version": "29.0.0", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.0.0.tgz", - "integrity": "sha512-3Ab5HgYIIAnS0HjqJHQYZS+zXc4tUmTmBH3z83ajI6afXp8X3ZtdLX+nXx+I7LNkJD7uN9LAVhgnjDgZa2z0kA==", - "dev": true, - "requires": { - "@sinclair/typebox": "^0.24.1" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "diff-sequences": { - "version": "29.3.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.3.1.tgz", - "integrity": "sha512-hlM3QR272NXCi4pq+N4Kok4kOp6EsgOM3ZSpJI7Da3UAs+Ttsi8MRmB6trM/lhyzUxGfOgnpkHtgqm5Q/CTcfQ==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "jest-diff": { - "version": "29.3.1", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.3.1.tgz", - "integrity": "sha512-vU8vyiO7568tmin2lA3r2DP8oRvzhvRcD4DjpXc6uGveQodyk7CKLhQlCSiwgx3g0pFaE88/KLZ0yaTWMc4Uiw==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^29.3.1", - "jest-get-type": "^29.2.0", - "pretty-format": "^29.3.1" - } - }, - "jest-get-type": { - "version": "29.2.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.2.0.tgz", - "integrity": "sha512-uXNJlg8hKFEnDgFsrCjznB+sTxdkuqiCL6zMgA75qEbAJjJYTs9XPrvDctrEig2GDow22T/LvHgO57iJhXB/UA==", - "dev": true - }, - "pretty-format": { - "version": "29.3.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.3.1.tgz", - "integrity": "sha512-FyLnmb1cYJV8biEIiRyzRFvs2lry7PPIvOqKVe1GCUEYg4YGmlx1qG9EJNMxArYm7piII4qb8UV1Pncq5dxmcg==", - "dev": true, - "requires": { - "@jest/schemas": "^29.0.0", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true - } - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-get-type": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", - "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", - "dev": true - }, - "jest-haste-map": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-28.1.3.tgz", - "integrity": "sha512-3S+RQWDXccXDKSWnkHa/dPwt+2qwA8CJzR61w3FoYCvoo3Pn8tvGcysmMF0Bj0EX5RYvAI2EIvC57OmotfdtKA==", - "dev": true, - "requires": { - "@jest/types": "^28.1.3", - "@types/graceful-fs": "^4.1.3", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "fsevents": "^2.3.2", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^28.0.2", - "jest-util": "^28.1.3", - "jest-worker": "^28.1.3", - "micromatch": "^4.0.4", - "walker": "^1.0.8" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "jest-worker": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz", - "integrity": "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==", - "dev": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - } - }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-leak-detector": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-28.1.3.tgz", - "integrity": "sha512-WFVJhnQsiKtDEo5lG2mM0v40QWnBM+zMdHHyJs8AWZ7J0QZJS59MsyKeJHWhpBZBH32S48FOVvGyOFT1h0DlqA==", - "dev": true, - "requires": { - "jest-get-type": "^28.0.2", - "pretty-format": "^28.1.3" - } - }, - "jest-localstorage-mock": { - "version": "2.4.22", - "resolved": "https://registry.npmjs.org/jest-localstorage-mock/-/jest-localstorage-mock-2.4.22.tgz", - "integrity": "sha512-60PWSDFQOS5v7JzSmYLM3dPLg0JLl+2Vc4lIEz/rj2yrXJzegsFLn7anwc5IL0WzJbBa/Las064CHbFg491/DQ==", - "dev": true - }, - "jest-matcher-utils": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.3.tgz", - "integrity": "sha512-kQeJ7qHemKfbzKoGjHHrRKH6atgxMk8Enkk2iPQ3XwO6oE/KYD8lMYOziCkeSB9G4adPM4nR1DE8Tf5JeWH6Bw==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "jest-diff": "^28.1.3", - "jest-get-type": "^28.0.2", - "pretty-format": "^28.1.3" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-message-util": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz", - "integrity": "sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^28.1.3", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^28.1.3", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-mock": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-28.1.3.tgz", - "integrity": "sha512-o3J2jr6dMMWYVH4Lh/NKmDXdosrsJgi4AviS8oXLujcjpCMBb1FMsblDnOXKZKfSiHLxYub1eS0IHuRXsio9eA==", - "dev": true, - "requires": { - "@jest/types": "^28.1.3", - "@types/node": "*" - } - }, - "jest-pnp-resolver": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", - "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", - "dev": true, - "requires": {} - }, - "jest-regex-util": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", - "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", - "dev": true - }, - "jest-resolve": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-28.1.3.tgz", - "integrity": "sha512-Z1W3tTjE6QaNI90qo/BJpfnvpxtaFTFw5CDgwpyE/Kz8U/06N1Hjf4ia9quUhCh39qIGWF1ZuxFiBiJQwSEYKQ==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^28.1.3", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^28.1.3", - "jest-validate": "^28.1.3", - "resolve": "^1.20.0", - "resolve.exports": "^1.1.0", - "slash": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-resolve-dependencies": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-28.1.3.tgz", - "integrity": "sha512-qa0QO2Q0XzQoNPouMbCc7Bvtsem8eQgVPNkwn9LnS+R2n8DaVDPL/U1gngC0LTl1RYXJU0uJa2BMC2DbTfFrHA==", - "dev": true, - "requires": { - "jest-regex-util": "^28.0.2", - "jest-snapshot": "^28.1.3" - } - }, - "jest-runner": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-28.1.3.tgz", - "integrity": "sha512-GkMw4D/0USd62OVO0oEgjn23TM+YJa2U2Wu5zz9xsQB1MxWKDOlrnykPxnMsN0tnJllfLPinHTka61u0QhaxBA==", - "dev": true, - "requires": { - "@jest/console": "^28.1.3", - "@jest/environment": "^28.1.3", - "@jest/test-result": "^28.1.3", - "@jest/transform": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.10.2", - "graceful-fs": "^4.2.9", - "jest-docblock": "^28.1.1", - "jest-environment-node": "^28.1.3", - "jest-haste-map": "^28.1.3", - "jest-leak-detector": "^28.1.3", - "jest-message-util": "^28.1.3", - "jest-resolve": "^28.1.3", - "jest-runtime": "^28.1.3", - "jest-util": "^28.1.3", - "jest-watcher": "^28.1.3", - "jest-worker": "^28.1.3", - "p-limit": "^3.1.0", - "source-map-support": "0.5.13" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "jest-worker": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz", - "integrity": "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==", - "dev": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "dependencies": { - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-runtime": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-28.1.3.tgz", - "integrity": "sha512-NU+881ScBQQLc1JHG5eJGU7Ui3kLKrmwCPPtYsJtBykixrM2OhVQlpMmFWJjMyDfdkGgBMNjXCGB/ebzsgNGQw==", - "dev": true, - "requires": { - "@jest/environment": "^28.1.3", - "@jest/fake-timers": "^28.1.3", - "@jest/globals": "^28.1.3", - "@jest/source-map": "^28.1.2", - "@jest/test-result": "^28.1.3", - "@jest/transform": "^28.1.3", - "@jest/types": "^28.1.3", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "execa": "^5.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^28.1.3", - "jest-message-util": "^28.1.3", - "jest-mock": "^28.1.3", - "jest-regex-util": "^28.0.2", - "jest-resolve": "^28.1.3", - "jest-snapshot": "^28.1.3", - "jest-util": "^28.1.3", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-snapshot": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-28.1.3.tgz", - "integrity": "sha512-4lzMgtiNlc3DU/8lZfmqxN3AYD6GGLbl+72rdBpXvcV+whX7mDrREzkPdp2RnmfIiWBg1YbuFSkXduF2JcafJg==", - "dev": true, - "requires": { - "@babel/core": "^7.11.6", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/traverse": "^7.7.2", - "@babel/types": "^7.3.3", - "@jest/expect-utils": "^28.1.3", - "@jest/transform": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/babel__traverse": "^7.0.6", - "@types/prettier": "^2.1.5", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^28.1.3", - "graceful-fs": "^4.2.9", - "jest-diff": "^28.1.3", - "jest-get-type": "^28.0.2", - "jest-haste-map": "^28.1.3", - "jest-matcher-utils": "^28.1.3", - "jest-message-util": "^28.1.3", - "jest-util": "^28.1.3", - "natural-compare": "^1.4.0", - "pretty-format": "^28.1.3", - "semver": "^7.3.5" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-util": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", - "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", - "dev": true, - "requires": { - "@jest/types": "^28.1.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-validate": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-28.1.3.tgz", - "integrity": "sha512-SZbOGBWEsaTxBGCOpsRWlXlvNkvTkY0XxRfh7zYmvd8uL5Qzyg0CHAXiXKROflh801quA6+/DsT4ODDthOC/OA==", - "dev": true, - "requires": { - "@jest/types": "^28.1.3", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^28.0.2", - "leven": "^3.1.0", - "pretty-format": "^28.1.3" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-watcher": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.3.tgz", - "integrity": "sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g==", - "dev": true, - "requires": { - "@jest/test-result": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.10.2", - "jest-util": "^28.1.3", - "string-length": "^4.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "dev": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "js-sdsl": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.1.5.tgz", - "integrity": "sha512-08bOAKweV2NUC1wqTtf3qZlnpOX/R2DU9ikpjOHs0H+ibQv3zpncVQg6um4uYtRtrwIX8M4Nh3ytK4HGlYAq7Q==", - "dev": true - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsdom": { - "version": "19.0.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-19.0.0.tgz", - "integrity": "sha512-RYAyjCbxy/vri/CfnjUWJQQtZ3LKlLnDqj+9XLNnJPgEGeirZs3hllKR20re8LUZ6o1b1X4Jat+Qd26zmP41+A==", - "dev": true, - "requires": { - "abab": "^2.0.5", - "acorn": "^8.5.0", - "acorn-globals": "^6.0.0", - "cssom": "^0.5.0", - "cssstyle": "^2.3.0", - "data-urls": "^3.0.1", - "decimal.js": "^10.3.1", - "domexception": "^4.0.0", - "escodegen": "^2.0.0", - "form-data": "^4.0.0", - "html-encoding-sniffer": "^3.0.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.0", - "parse5": "6.0.1", - "saxes": "^5.0.1", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.0.0", - "w3c-hr-time": "^1.0.2", - "w3c-xmlserializer": "^3.0.0", - "webidl-conversions": "^7.0.0", - "whatwg-encoding": "^2.0.0", - "whatwg-mimetype": "^3.0.0", - "whatwg-url": "^10.0.0", - "ws": "^8.2.3", - "xml-name-validator": "^4.0.0" - } - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true - }, - "json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - }, - "kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true - }, - "leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true - }, - "levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } - }, - "lilconfig": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz", - "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==", - "dev": true - }, - "lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true - }, - "load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - }, - "dependencies": { - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", - "dev": true - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true - } - } - }, - "loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", - "dev": true - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "dev": true - }, - "lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", - "dev": true - }, - "lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", - "dev": true - }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "dev": true, - "requires": { - "tslib": "^2.0.3" - } - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "dev": true, - "requires": { - "tmpl": "1.0.5" - } - }, - "mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", - "dev": true - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "dev": true - }, - "memfs": { - "version": "3.4.7", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.7.tgz", - "integrity": "sha512-ygaiUSNalBX85388uskeCyhSAoOSgzBbtVCr9jA2RROssFL9Q19/ZXFqS+2Th2sr1ewNIWgFdLzLC3Yl1Zv+lw==", - "dev": true, - "requires": { - "fs-monkey": "^1.0.3" - } - }, - "memorystream": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", - "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", - "dev": true - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", - "dev": true - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "dev": true - }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true - }, - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true - }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, - "requires": { - "mime-db": "1.52.0" - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "mini-css-extract-plugin": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.6.1.tgz", - "integrity": "sha512-wd+SD57/K6DiV7jIR34P+s3uckTRuQvx0tKPcvjFlrEylk6P4mQ2KSWk1hblj1Kxaqok7LogKOieygXqBczNlg==", - "dev": true, - "requires": { - "schema-utils": "^4.0.0" - } - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "multicast-dns": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", - "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", - "dev": true, - "requires": { - "dns-packet": "^5.2.2", - "thunky": "^1.0.2" - } - }, - "nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", - "dev": true - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "natural-compare-lite": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", - "dev": true - }, - "negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "dev": true - }, - "neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true - }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, - "no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", - "dev": true, - "requires": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" - } - }, - "node-abort-controller": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.0.1.tgz", - "integrity": "sha512-/ujIVxthRs+7q6hsdjHMaj8hRG9NuWmwrz+JdRwZ14jdFoKSkm+vDsCbF9PLpnSqjaWQJuTmVtcWHNLr+vrOFw==", - "dev": true - }, - "node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", - "dev": true - }, - "node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true - }, - "node-releases": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", - "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", - "dev": true - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", - "dev": true - }, - "npm-run-all": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", - "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "chalk": "^2.4.1", - "cross-spawn": "^6.0.5", - "memorystream": "^0.3.1", - "minimatch": "^3.0.4", - "pidtree": "^0.3.0", - "read-pkg": "^3.0.0", - "shell-quote": "^1.6.1", - "string.prototype.padend": "^3.0.0" - }, - "dependencies": { - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", - "dev": true - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", - "dev": true - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - }, - "nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "dev": true, - "requires": { - "boolbase": "^1.0.0" - } - }, - "nwsapi": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.1.tgz", - "integrity": "sha512-JYOWTeFoS0Z93587vRJgASD5Ut11fYl5NyihP3KrYBvMe1FRRs6RN7m20SA/16GM4P6hTnZjT+UmDOt38UeXNg==", - "dev": true - }, - "object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", - "dev": true - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - }, - "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - } - }, - "obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", - "dev": true - }, - "on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dev": true, - "requires": { - "ee-first": "1.1.1" - } - }, - "on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "dev": true - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "open": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", - "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", - "dev": true, - "requires": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - } - }, - "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "requires": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - }, - "dependencies": { - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - } - } - }, - "p-retry": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", - "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", - "dev": true, - "requires": { - "@types/retry": "0.12.0", - "retry": "^0.13.1" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "param-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", - "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", - "dev": true, - "requires": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "requires": { - "callsites": "^3.0.0" - } - }, - "parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - } - }, - "parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true - }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true - }, - "pascal-case": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", - "dev": true, - "requires": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", - "dev": true - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true - }, - "pidtree": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz", - "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==", - "dev": true - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - }, - "pirates": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", - "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", - "dev": true - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - }, - "postcss": { - "version": "8.4.38", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", - "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", - "dev": true, - "requires": { - "nanoid": "^3.3.7", - "picocolors": "^1.0.0", - "source-map-js": "^1.2.0" - } - }, - "postcss-calc": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", - "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", - "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.9", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-colormin": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.0.tgz", - "integrity": "sha512-WdDO4gOFG2Z8n4P8TWBpshnL3JpmNmJwdnfP2gbk2qBA8PWwOYcmjmI/t3CmMeL72a7Hkd+x/Mg9O2/0rD54Pg==", - "dev": true, - "requires": { - "browserslist": "^4.16.6", - "caniuse-api": "^3.0.0", - "colord": "^2.9.1", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-convert-values": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.2.tgz", - "integrity": "sha512-c6Hzc4GAv95B7suy4udszX9Zy4ETyMCgFPUDtWjdFTKH1SE9eFY/jEpHSwTH1QPuwxHpWslhckUQWbNRM4ho5g==", - "dev": true, - "requires": { - "browserslist": "^4.20.3", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-discard-comments": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", - "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", - "dev": true, - "requires": {} - }, - "postcss-discard-duplicates": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", - "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", - "dev": true, - "requires": {} - }, - "postcss-discard-empty": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", - "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", - "dev": true, - "requires": {} - }, - "postcss-discard-overridden": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", - "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", - "dev": true, - "requires": {} - }, - "postcss-merge-longhand": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.6.tgz", - "integrity": "sha512-6C/UGF/3T5OE2CEbOuX7iNO63dnvqhGZeUnKkDeifebY0XqkkvrctYSZurpNE902LDf2yKwwPFgotnfSoPhQiw==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0", - "stylehacks": "^5.1.0" - } - }, - "postcss-merge-rules": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.2.tgz", - "integrity": "sha512-zKMUlnw+zYCWoPN6yhPjtcEdlJaMUZ0WyVcxTAmw3lkkN/NDMRkOkiuctQEoWAOvH7twaxUUdvBWl0d4+hifRQ==", - "dev": true, - "requires": { - "browserslist": "^4.16.6", - "caniuse-api": "^3.0.0", - "cssnano-utils": "^3.1.0", - "postcss-selector-parser": "^6.0.5" - } - }, - "postcss-minify-font-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", - "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-minify-gradients": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", - "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", - "dev": true, - "requires": { - "colord": "^2.9.1", - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-minify-params": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.3.tgz", - "integrity": "sha512-bkzpWcjykkqIujNL+EVEPOlLYi/eZ050oImVtHU7b4lFS82jPnsCb44gvC6pxaNt38Els3jWYDHTjHKf0koTgg==", - "dev": true, - "requires": { - "browserslist": "^4.16.6", - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-minify-selectors": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", - "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", - "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.5" - } - }, - "postcss-modules-extract-imports": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", - "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", - "dev": true, - "requires": {} - }, - "postcss-modules-local-by-default": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.5.tgz", - "integrity": "sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==", - "dev": true, - "requires": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - } - }, - "postcss-modules-scope": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.0.tgz", - "integrity": "sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==", - "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.4" - } - }, - "postcss-modules-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", - "dev": true, - "requires": { - "icss-utils": "^5.0.0" - } - }, - "postcss-normalize-charset": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", - "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", - "dev": true, - "requires": {} - }, - "postcss-normalize-display-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", - "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-positions": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", - "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-repeat-style": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", - "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-string": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", - "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-timing-functions": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", - "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-unicode": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.0.tgz", - "integrity": "sha512-J6M3MizAAZ2dOdSjy2caayJLQT8E8K9XjLce8AUQMwOrCvjCHv24aLC/Lps1R1ylOfol5VIDMaM/Lo9NGlk1SQ==", - "dev": true, - "requires": { - "browserslist": "^4.16.6", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", - "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", - "dev": true, - "requires": { - "normalize-url": "^6.0.1", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-whitespace": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", - "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-ordered-values": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", - "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", - "dev": true, - "requires": { - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-reduce-initial": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.0.tgz", - "integrity": "sha512-5OgTUviz0aeH6MtBjHfbr57tml13PuedK/Ecg8szzd4XRMbYxH4572JFG067z+FqBIf6Zp/d+0581glkvvWMFw==", - "dev": true, - "requires": { - "browserslist": "^4.16.6", - "caniuse-api": "^3.0.0" - } - }, - "postcss-reduce-transforms": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", - "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-selector-parser": { - "version": "6.0.10", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", - "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", - "dev": true, - "requires": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - } - }, - "postcss-svgo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", - "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0", - "svgo": "^2.7.0" - } - }, - "postcss-unique-selectors": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", - "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", - "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.5" - } - }, - "postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true - }, - "prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true - }, - "pretty-error": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", - "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", - "dev": true, - "requires": { - "lodash": "^4.17.20", - "renderkid": "^3.0.0" - } - }, - "pretty-format": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", - "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", - "dev": true, - "requires": { - "@jest/schemas": "^28.1.3", - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true - } - } - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, - "requires": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - } - }, - "proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dev": true, - "requires": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "dependencies": { - "ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "dev": true - } - } - }, - "psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", - "dev": true - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - }, - "qs": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", - "dev": true, - "requires": { - "side-channel": "^1.0.4" - } - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dev": true - }, - "raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "dev": true, - "requires": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "dependencies": { - "bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true - } - } - }, - "react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true - }, - "read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", - "dev": true, - "requires": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - }, - "dependencies": { - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "requires": { - "pify": "^3.0.0" - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", - "dev": true - } - } - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "realistic-structured-clone": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/realistic-structured-clone/-/realistic-structured-clone-3.0.0.tgz", - "integrity": "sha512-rOjh4nuWkAqf9PWu6JVpOWD4ndI+JHfgiZeMmujYcPi+fvILUu7g6l26TC1K5aBIp34nV+jE1cDO75EKOfHC5Q==", - "dev": true, - "requires": { - "domexception": "^1.0.1", - "typeson": "^6.1.0", - "typeson-registry": "^1.0.0-alpha.20" - }, - "dependencies": { - "domexception": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", - "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", - "dev": true, - "requires": { - "webidl-conversions": "^4.0.2" - } - }, - "webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", - "dev": true - } - } - }, - "rechoir": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz", - "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==", - "dev": true, - "requires": { - "resolve": "^1.9.0" - } - }, - "regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "dev": true - }, - "regenerate-unicode-properties": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz", - "integrity": "sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==", - "dev": true, - "requires": { - "regenerate": "^1.4.2" - } - }, - "regenerator-runtime": { - "version": "0.13.10", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.10.tgz", - "integrity": "sha512-KepLsg4dU12hryUO7bp/axHAKvwGOCV0sGloQtpagJ12ai+ojVDqkeGSiRX1zlq+kjIMZ1t7gpze+26QqtdGqw==" - }, - "regenerator-transform": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz", - "integrity": "sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==", - "dev": true, - "requires": { - "@babel/runtime": "^7.8.4" - } - }, - "regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" - } - }, - "regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true - }, - "regexpu-core": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.1.0.tgz", - "integrity": "sha512-bb6hk+xWd2PEOkj5It46A16zFMs2mv86Iwpdu94la4S3sJ7C973h2dHpYKwIBGaWSO7cIRJ+UX0IeMaWcO4qwA==", - "dev": true, - "requires": { - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.0.1", - "regjsgen": "^0.6.0", - "regjsparser": "^0.8.2", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.0.0" - } - }, - "regjsgen": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz", - "integrity": "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==", - "dev": true - }, - "regjsparser": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz", - "integrity": "sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==", - "dev": true, - "requires": { - "jsesc": "~0.5.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "dev": true - } - } - }, - "relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", - "dev": true - }, - "renderkid": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", - "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", - "dev": true, - "requires": { - "css-select": "^4.1.3", - "dom-converter": "^0.2.0", - "htmlparser2": "^6.1.0", - "lodash": "^4.17.21", - "strip-ansi": "^6.0.1" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true - }, - "require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true - }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "dev": true - }, - "resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "dev": true, - "requires": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "requires": { - "resolve-from": "^5.0.0" - } - }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - }, - "resolve.exports": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz", - "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==", - "dev": true - }, - "retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "dev": true - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "sass": { - "version": "1.75.0", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.75.0.tgz", - "integrity": "sha512-ShMYi3WkrDWxExyxSZPst4/okE9ts46xZmJDSawJQrnte7M1V9fScVB+uNXOVKRBt0PggHOwoZcn8mYX4trnBw==", - "dev": true, - "requires": { - "chokidar": ">=3.0.0 <4.0.0", - "immutable": "^4.0.0", - "source-map-js": ">=0.6.2 <2.0.0" - } - }, - "sass-loader": { - "version": "13.3.3", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-13.3.3.tgz", - "integrity": "sha512-mt5YN2F1MOZr3d/wBRcZxeFgwgkH44wVc2zohO2YF6JiOMkiXe4BYRZpSu2sO1g71mo/j16txzUhsKZlqjVGzA==", - "dev": true, - "requires": { - "neo-async": "^2.6.2" - } - }, - "saxes": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", - "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", - "dev": true, - "requires": { - "xmlchars": "^2.2.0" - } - }, - "schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - }, - "dependencies": { - "ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.3" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - } - } - }, - "select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", - "dev": true - }, - "selfsigned": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz", - "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", - "dev": true, - "requires": { - "node-forge": "^1" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "dev": true, - "requires": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - }, - "dependencies": { - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - } - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - } - } - }, - "serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - }, - "serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", - "dev": true, - "requires": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "dev": true - }, - "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", - "dev": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "dev": true - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "dev": true - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "dev": true - } - } - }, - "serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "dev": true, - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - } - }, - "setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true - }, - "shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dev": true, - "requires": { - "kind-of": "^6.0.2" - } - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "shell-quote": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz", - "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==", - "dev": true - }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true - }, - "slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", - "dev": true - }, - "sockjs": { - "version": "0.3.24", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", - "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", - "dev": true, - "requires": { - "faye-websocket": "^0.11.3", - "uuid": "^8.3.2", - "websocket-driver": "^0.7.4" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "source-map-js": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", - "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", - "dev": true - }, - "source-map-support": { - "version": "0.5.13", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", - "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", - "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", - "dev": true - }, - "spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", - "dev": true, - "requires": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - } - }, - "spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", - "dev": true, - "requires": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true - }, - "stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", - "dev": true - }, - "stack-utils": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", - "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", - "dev": true, - "requires": { - "escape-string-regexp": "^2.0.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true - } - } - }, - "statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "dev": true, - "requires": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - } - }, - "string-natural-compare": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/string-natural-compare/-/string-natural-compare-3.0.1.tgz", - "integrity": "sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw==", - "dev": true - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "string.prototype.padend": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.3.tgz", - "integrity": "sha512-jNIIeokznm8SD/TZISQsZKYu7RJyheFNt84DUPrh482GC8RVp2MKqm2O5oBRdGxbDQoXrhhWtPIWQOiy20svUg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - } - }, - "string.prototype.trimend": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", - "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - } - }, - "string.prototype.trimstart": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", - "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true - }, - "strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true - }, - "stylehacks": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.0.tgz", - "integrity": "sha512-SzLmvHQTrIWfSgljkQCw2++C9+Ne91d/6Sp92I8c5uHTcy/PgeHamwITIbBW9wnFTY/3ZfSXR9HIL6Ikqmcu6Q==", - "dev": true, - "requires": { - "browserslist": "^4.16.6", - "postcss-selector-parser": "^6.0.4" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "supports-hyperlinks": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", - "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", - "dev": true, - "requires": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true - }, - "svgo": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", - "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", - "dev": true, - "requires": { - "@trysound/sax": "0.2.0", - "commander": "^7.2.0", - "css-select": "^4.1.3", - "css-tree": "^1.1.3", - "csso": "^4.2.0", - "picocolors": "^1.0.0", - "stable": "^0.1.8" - }, - "dependencies": { - "commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true - } - } - }, - "symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "dev": true - }, - "tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true - }, - "template-ejs-loader": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/template-ejs-loader/-/template-ejs-loader-0.9.4.tgz", - "integrity": "sha512-usgwqedqToT8olHgc3voRFom514Hoq9vPoV4m1+RLm04Kp/Lglv1xPZ40cQm3cLIpsSmhs5DMZC/nD4P6p8Jyw==", - "dev": true, - "requires": { - "ejs": "^3.1.8" - } - }, - "terminal-link": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", - "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", - "dev": true, - "requires": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" - } - }, - "terser": { - "version": "5.15.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.15.1.tgz", - "integrity": "sha512-K1faMUvpm/FBxjBXud0LWVAGxmvoPbZbfTCYbSgaaYQaIXI3/TdI7a7ZGA73Zrou6Q8Zmz3oeUTsp/dj+ag2Xw==", - "dev": true, - "requires": { - "@jridgewell/source-map": "^0.3.2", - "acorn": "^8.5.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "dependencies": { - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - } - } - }, - "terser-webpack-plugin": { - "version": "5.3.6", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz", - "integrity": "sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==", - "dev": true, - "requires": { - "@jridgewell/trace-mapping": "^0.3.14", - "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.0", - "terser": "^5.14.1" - }, - "dependencies": { - "schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - } - } - }, - "test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "requires": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - } - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", - "dev": true - }, - "tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "dev": true - }, - "tough-cookie": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", - "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", - "dev": true, - "requires": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.1.2" - }, - "dependencies": { - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true - } - } - }, - "tr46": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", - "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", - "dev": true, - "requires": { - "punycode": "^2.1.1" - } - }, - "ts-jest": { - "version": "28.0.7", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-28.0.7.tgz", - "integrity": "sha512-wWXCSmTwBVmdvWrOpYhal79bDpioDy4rTT+0vyUnE3ZzM7LOAAGG9NXwzkEL/a516rQEgnMmS/WKP9jBPCVJyA==", - "dev": true, - "requires": { - "bs-logger": "0.x", - "fast-json-stable-stringify": "2.x", - "jest-util": "^28.0.0", - "json5": "^2.2.1", - "lodash.memoize": "4.x", - "make-error": "1.x", - "semver": "7.x", - "yargs-parser": "^21.0.1" - }, - "dependencies": { - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", - "dev": true - }, - "tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1" - } - }, - "type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true - }, - "type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true - }, - "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dev": true, - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } - }, - "typescript": { - "version": "4.8.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", - "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==", - "dev": true - }, - "typeson": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/typeson/-/typeson-6.1.0.tgz", - "integrity": "sha512-6FTtyGr8ldU0pfbvW/eOZrEtEkczHRUtduBnA90Jh9kMPCiFNnXIon3vF41N0S4tV1HHQt4Hk1j4srpESziCaA==", - "dev": true - }, - "typeson-registry": { - "version": "1.0.0-alpha.39", - "resolved": "https://registry.npmjs.org/typeson-registry/-/typeson-registry-1.0.0-alpha.39.tgz", - "integrity": "sha512-NeGDEquhw+yfwNhguLPcZ9Oj0fzbADiX4R0WxvoY8nGhy98IbzQy1sezjoEFWOywOboj/DWehI+/aUlRVrJnnw==", - "dev": true, - "requires": { - "base64-arraybuffer-es6": "^0.7.0", - "typeson": "^6.0.0", - "whatwg-url": "^8.4.0" - }, - "dependencies": { - "tr46": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", - "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", - "dev": true, - "requires": { - "punycode": "^2.1.1" - } - }, - "webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", - "dev": true - }, - "whatwg-url": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", - "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", - "dev": true, - "requires": { - "lodash": "^4.7.0", - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" - } - } - } - }, - "unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - } - }, - "unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", - "dev": true - }, - "unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "dev": true, - "requires": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - } - }, - "unicode-match-property-value-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", - "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==", - "dev": true - }, - "unicode-property-aliases-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", - "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==", - "dev": true - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "dev": true - }, - "update-browserslist-db": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", - "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", - "dev": true, - "requires": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - } - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true - }, - "utila": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", - "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==", - "dev": true - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "dev": true - }, - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true - }, - "v8-to-istanbul": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz", - "integrity": "sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==", - "dev": true, - "requires": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0" - } - }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "dev": true - }, - "w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "dev": true, - "requires": { - "browser-process-hrtime": "^1.0.0" - } - }, - "w3c-xmlserializer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-3.0.0.tgz", - "integrity": "sha512-3WFqGEgSXIyGhOmAFtlicJNMjEps8b1MG31NCA0/vOF9+nKMUW1ckhi9cnNHmf88Rzw5V+dwIwsm2C7X8k9aQg==", - "dev": true, - "requires": { - "xml-name-validator": "^4.0.0" - } - }, - "walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "dev": true, - "requires": { - "makeerror": "1.0.12" - } - }, - "watchpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", - "dev": true, - "requires": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - } - }, - "wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "dev": true, - "requires": { - "minimalistic-assert": "^1.0.0" - } - }, - "webidl-conversions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", - "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", - "dev": true - }, - "webpack": { - "version": "5.75.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.75.0.tgz", - "integrity": "sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ==", - "dev": true, - "requires": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^0.0.51", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "acorn": "^8.7.1", - "acorn-import-assertions": "^1.7.6", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.10.0", - "es-module-lexer": "^0.9.0", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.1.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.4.0", - "webpack-sources": "^3.2.3" - }, - "dependencies": { - "schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - } - } - }, - "webpack-cli": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.10.0.tgz", - "integrity": "sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w==", - "dev": true, - "requires": { - "@discoveryjs/json-ext": "^0.5.0", - "@webpack-cli/configtest": "^1.2.0", - "@webpack-cli/info": "^1.5.0", - "@webpack-cli/serve": "^1.7.0", - "colorette": "^2.0.14", - "commander": "^7.0.0", - "cross-spawn": "^7.0.3", - "fastest-levenshtein": "^1.0.12", - "import-local": "^3.0.2", - "interpret": "^2.2.0", - "rechoir": "^0.7.0", - "webpack-merge": "^5.7.3" - }, - "dependencies": { - "commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true - } - } - }, - "webpack-dev-middleware": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", - "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", - "dev": true, - "requires": { - "colorette": "^2.0.10", - "memfs": "^3.4.3", - "mime-types": "^2.1.31", - "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" - } - }, - "webpack-dev-server": { - "version": "4.11.1", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.11.1.tgz", - "integrity": "sha512-lILVz9tAUy1zGFwieuaQtYiadImb5M3d+H+L1zDYalYoDl0cksAB1UNyuE5MMWJrG6zR1tXkCP2fitl7yoUJiw==", - "dev": true, - "requires": { - "@types/bonjour": "^3.5.9", - "@types/connect-history-api-fallback": "^1.3.5", - "@types/express": "^4.17.13", - "@types/serve-index": "^1.9.1", - "@types/serve-static": "^1.13.10", - "@types/sockjs": "^0.3.33", - "@types/ws": "^8.5.1", - "ansi-html-community": "^0.0.8", - "bonjour-service": "^1.0.11", - "chokidar": "^3.5.3", - "colorette": "^2.0.10", - "compression": "^1.7.4", - "connect-history-api-fallback": "^2.0.0", - "default-gateway": "^6.0.3", - "express": "^4.17.3", - "graceful-fs": "^4.2.6", - "html-entities": "^2.3.2", - "http-proxy-middleware": "^2.0.3", - "ipaddr.js": "^2.0.1", - "open": "^8.0.9", - "p-retry": "^4.5.0", - "rimraf": "^3.0.2", - "schema-utils": "^4.0.0", - "selfsigned": "^2.1.1", - "serve-index": "^1.9.1", - "sockjs": "^0.3.24", - "spdy": "^4.0.2", - "webpack-dev-middleware": "^5.3.1", - "ws": "^8.4.2" - } - }, - "webpack-merge": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", - "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", - "dev": true, - "requires": { - "clone-deep": "^4.0.1", - "wildcard": "^2.0.0" - } - }, - "webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", - "dev": true - }, - "websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", - "dev": true, - "requires": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - } - }, - "websocket-extensions": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", - "dev": true - }, - "whatwg-encoding": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", - "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", - "dev": true, - "requires": { - "iconv-lite": "0.6.3" - }, - "dependencies": { - "iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - } - } - }, - "whatwg-mimetype": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", - "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", - "dev": true - }, - "whatwg-url": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-10.0.0.tgz", - "integrity": "sha512-CLxxCmdUby142H5FZzn4D8ikO1cmypvXVQktsgosNy4a4BHrDHeciBBGZhb0bNoR5/MltoCatso+vFjjGx8t0w==", - "dev": true, - "requires": { - "tr46": "^3.0.0", - "webidl-conversions": "^7.0.0" - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "requires": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - } - }, - "wildcard": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", - "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", - "dev": true - }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "write-file-atomic": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.1.tgz", - "integrity": "sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - } - }, - "ws": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.8.1.tgz", - "integrity": "sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA==", - "dev": true, - "requires": {} - }, - "xml-name-validator": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", - "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", - "dev": true - }, - "xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", - "dev": true - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true - }, - "yargs": { - "version": "17.5.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz", - "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==", - "dev": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.0.0" - } - }, - "yargs-parser": { - "version": "21.0.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz", - "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==", - "dev": true - }, - "yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true - } } } diff --git a/package.json b/package.json index 482412c..bafc569 100644 --- a/package.json +++ b/package.json @@ -25,55 +25,55 @@ "author": "Adjust GmbH", "license": "MIT", "devDependencies": { - "@babel/cli": "^7.19.3", - "@babel/core": "^7.20.2", - "@babel/eslint-parser": "^7.19.1", + "@babel/cli": "^7.24.1", + "@babel/core": "^7.24.4", + "@babel/eslint-parser": "^7.24.1", "@babel/plugin-proposal-class-properties": "^7.18.6", - "@babel/plugin-transform-flow-comments": "^7.19.0", - "@babel/plugin-transform-modules-commonjs": "^7.19.6", - "@babel/plugin-transform-runtime": "^7.19.6", - "@babel/preset-env": "^7.20.2", - "@babel/preset-flow": "^7.18.6", - "@babel/preset-typescript": "^7.18.6", - "@types/jest": "^28.1.6", - "@typescript-eslint/eslint-plugin": "^5.42.1", - "@typescript-eslint/parser": "^5.42.1", - "babel-jest": "^28.1.3", - "babel-loader": "^9.1.0", + "@babel/plugin-transform-flow-comments": "^7.24.1", + "@babel/plugin-transform-modules-commonjs": "^7.24.1", + "@babel/plugin-transform-runtime": "^7.24.3", + "@babel/preset-env": "^7.24.4", + "@babel/preset-flow": "^7.24.1", + "@babel/preset-typescript": "^7.24.1", + "@types/jest": "^29.5.12", + "@typescript-eslint/eslint-plugin": "^7.7.1", + "@typescript-eslint/parser": "^7.7.1", + "babel-jest": "^29.7.0", + "babel-loader": "^9.1.3", "babel-plugin-es6-promise": "^1.1.1", - "css-loader": "^6.7.1", - "css-minimizer-webpack-plugin": "^4.2.2", + "css-loader": "^7.1.1", + "css-minimizer-webpack-plugin": "^6.0.0", "es6-promise": "^4.2.8", - "eslint": "^8.27.0", + "eslint": "^8.0.0", "eslint-plugin-flowtype": "^8.0.3", - "eslint-plugin-jest": "^26.6.0", - "eslint-webpack-plugin": "^3.2.0", - "fake-indexeddb": "^4.0.0", - "flow-bin": "^0.192.0", + "eslint-plugin-jest": "^28.3.0", + "eslint-webpack-plugin": "^4.1.0", + "fake-indexeddb": "^5.0.2", + "flow-bin": "^0.235.1", "flowtype-webpack-plugin": "^0.0.3", - "fork-ts-checker-webpack-plugin": "^7.2.13", - "html-loader": "^4.2.0", - "html-webpack-plugin": "^5.5.0", - "jest": "^28.1.3", - "jest-environment-jsdom": "^28.1.3", - "jest-extended": "^3.2.2", - "jest-localstorage-mock": "^2.4.22", - "mini-css-extract-plugin": "^2.6.1", + "fork-ts-checker-webpack-plugin": "^9.0.2", + "html-loader": "^5.0.0", + "html-webpack-plugin": "^5.6.0", + "jest": "^29.7.0", + "jest-environment-jsdom": "^29.7.0", + "jest-extended": "^4.0.2", + "jest-localstorage-mock": "^2.4.26", + "mini-css-extract-plugin": "^2.9.0", "npm-run-all": "^4.1.5", - "regenerator-runtime": "^0.13.10", - "sass": "^1.56.1", - "sass-loader": "^13.2.0", + "regenerator-runtime": "^0.14.1", + "sass": "^1.75.0", + "sass-loader": "^14.2.1", "template-ejs-loader": "^0.9.4", - "terser": "^5.15.1", - "terser-webpack-plugin": "^5.3.6", - "ts-jest": "^28.0.7", - "typescript": "^4.8.4", - "webpack": "^5.75.0", - "webpack-cli": "^4.10.0", - "webpack-dev-server": "^4.11.1" + "terser": "^5.30.4", + "terser-webpack-plugin": "^5.3.10", + "ts-jest": "^29.1.2", + "typescript": "^5.4.5", + "webpack": "^5.91.0", + "webpack-cli": "^5.1.4", + "webpack-dev-server": "^5.0.4" }, "dependencies": { - "@babel/runtime": "^7.20.1" + "@babel/runtime": "^7.24.4" }, "directories": { "doc": "docs" From b546ceb7c85d5302136c4c2aa8ddb780bc016c8a Mon Sep 17 00:00:00 2001 From: Yara Matkova Date: Thu, 4 Jul 2024 13:25:45 +0200 Subject: [PATCH 06/70] chore: get rid of outdated dependencies --- .babelrc | 33 ++- jest.config.js | 2 + package-lock.json | 276 +------------------ package.json | 4 +- src/sdk/__tests__/_setup/_structuredClone.js | 1 + src/sdk/storage/types.ts | 2 +- 6 files changed, 35 insertions(+), 283 deletions(-) create mode 100644 src/sdk/__tests__/_setup/_structuredClone.js diff --git a/.babelrc b/.babelrc index 6034133..ec78e84 100644 --- a/.babelrc +++ b/.babelrc @@ -1,26 +1,35 @@ { "presets": [ "@babel/preset-flow", - ["@babel/preset-env", { - "targets": ">0.25%, not dead, ie 11" - }] + [ + "@babel/preset-env", + { + "targets": ">0.25%, not dead, ie 11" + } + ] ], "plugins": [ - "es6-promise", "@babel/plugin-transform-flow-comments", - ["@babel/plugin-transform-runtime", {"version": "7.18.10"}] + [ + "@babel/plugin-transform-runtime", + { + "version": "7.24.3" + } + ] ], "overrides": [ { - "test": ["./src/**/*.ts"], + "test": [ + "./src/**/*.ts" + ], "presets": [ "@babel/preset-typescript", - ["@babel/preset-env", { - "targets": ">0.25%, not dead, ie 11" - }] - ], - "plugins": [ - "@babel/plugin-proposal-class-properties" + [ + "@babel/preset-env", + { + "targets": ">0.25%, not dead, ie 11" + } + ] ] } ] diff --git a/jest.config.js b/jest.config.js index b991279..8bbef5c 100644 --- a/jest.config.js +++ b/jest.config.js @@ -11,6 +11,7 @@ module.exports = { '/node_modules/', '/src/sdk/__tests__/_setup/_utils.js', '/src/sdk/__tests__/_setup/_matchers.js', + '/src/sdk/__tests__/_setup/_structuredClone.js', '/src/sdk/__tests__/_setup/global.d.ts', '/src/sdk/__tests__/main/main.suite.js', '/src/sdk/__tests__/storage/storage.suite.js' @@ -18,6 +19,7 @@ module.exports = { setupFiles: [ 'jest-localstorage-mock', '/src/sdk/__tests__/_setup/_utils.js', + '/src/sdk/__tests__/_setup/_structuredClone.js', '/src/sdk/__tests__/_setup/global.d.ts', ], setupFilesAfterEnv: [ diff --git a/package-lock.json b/package-lock.json index d0c47c4..beb2546 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,7 +15,6 @@ "@babel/cli": "^7.24.1", "@babel/core": "^7.24.4", "@babel/eslint-parser": "^7.24.1", - "@babel/plugin-proposal-class-properties": "^7.18.6", "@babel/plugin-transform-flow-comments": "^7.24.1", "@babel/plugin-transform-modules-commonjs": "^7.24.1", "@babel/plugin-transform-runtime": "^7.24.3", @@ -27,10 +26,9 @@ "@typescript-eslint/parser": "^7.7.1", "babel-jest": "^29.7.0", "babel-loader": "^9.1.3", - "babel-plugin-es6-promise": "^1.1.1", + "core-js": "^3.37.0", "css-loader": "^7.1.1", "css-minimizer-webpack-plugin": "^6.0.0", - "es6-promise": "^4.2.8", "eslint": "^8.0.0", "eslint-plugin-flowtype": "^8.0.3", "eslint-plugin-jest": "^28.3.0", @@ -597,23 +595,6 @@ "@babel/core": "^7.0.0" } }, - "node_modules/@babel/plugin-proposal-class-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", - "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead.", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-proposal-private-property-in-object": { "version": "7.21.0-placeholder-for-preset-env.2", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", @@ -4400,78 +4381,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha512-XqYMR2dfdGMW+hd0IUZ2PwK+fGeFkOxZJ0wY+JaQAHzt1Zx8LcvpiZD2NiGkEG8qx0CfkAOr5xt76d1e8vG90g==", - "dev": true, - "dependencies": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" - } - }, - "node_modules/babel-code-frame/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/babel-code-frame/node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/babel-code-frame/node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", - "dev": true, - "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/babel-code-frame/node_modules/js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha512-RjTcuD4xjtthQkaWH7dFlH85L+QaVtSoOyGdZ3g6HFhS9dFNDfLyqgm2NFe2X6cQpeFmt0452FJjFG5UameExg==", - "dev": true - }, - "node_modules/babel-code-frame/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "dev": true, - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/babel-code-frame/node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, "node_modules/babel-jest": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", @@ -4589,28 +4498,6 @@ "webpack": ">=5" } }, - "node_modules/babel-messages": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", - "integrity": "sha512-Bl3ZiA+LjqaMtNYopA9TYE9HP1tQ+E5dLxE0XrAzcIJeK2UqF0/EaqXwBn9esd4UmTfEab+P+UYQ1GnioFIb/w==", - "dev": true, - "dependencies": { - "babel-runtime": "^6.22.0" - } - }, - "node_modules/babel-plugin-es6-promise": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-es6-promise/-/babel-plugin-es6-promise-1.1.1.tgz", - "integrity": "sha512-4TegE0KtgSI0zrorLip9pfxKl6b09JQjGwe4Bvefl8zQZF6hBl8lOByserHdIMs8UpJOYVnDsK3V4LrtQYXplQ==", - "dev": true, - "dependencies": { - "babel-template": "^6.7.0", - "babel-types": "^6.7.2" - }, - "peerDependencies": { - "es6-promise": "^4" - } - }, "node_modules/babel-plugin-istanbul": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", @@ -4720,106 +4607,6 @@ "@babel/core": "^7.0.0" } }, - "node_modules/babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==", - "dev": true, - "dependencies": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" - } - }, - "node_modules/babel-runtime/node_modules/regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", - "dev": true - }, - "node_modules/babel-template": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", - "integrity": "sha512-PCOcLFW7/eazGUKIoqH97sO9A2UYMahsn/yRQ7uOk37iutwjq7ODtcTNF+iFDSHNfkctqsLRjLP7URnOx0T1fg==", - "dev": true, - "dependencies": { - "babel-runtime": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "lodash": "^4.17.4" - } - }, - "node_modules/babel-traverse": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", - "integrity": "sha512-iSxeXx7apsjCHe9c7n8VtRXGzI2Bk1rBSOJgCCjfyXb6v1aCqE1KSEpq/8SXuVN8Ka/Rh1WDTF0MDzkvTA4MIA==", - "dev": true, - "dependencies": { - "babel-code-frame": "^6.26.0", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "debug": "^2.6.8", - "globals": "^9.18.0", - "invariant": "^2.2.2", - "lodash": "^4.17.4" - } - }, - "node_modules/babel-traverse/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/babel-traverse/node_modules/globals": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/babel-traverse/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/babel-types": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", - "integrity": "sha512-zhe3V/26rCWsEZK8kZN+HaQj5yQ1CilTObixFzKW1UWjqG7618Twz6YEsCnjfg5gBcJh02DrpCkS9h98ZqDY+g==", - "dev": true, - "dependencies": { - "babel-runtime": "^6.26.0", - "esutils": "^2.0.2", - "lodash": "^4.17.4", - "to-fast-properties": "^1.0.3" - } - }, - "node_modules/babel-types/node_modules/to-fast-properties": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", - "integrity": "sha512-lxrWP8ejsq+7E3nNjwYmUBMAgjMTZoTI+sdBOpvNyijeDLa29LUn9QaoXAHv4+Z578hbmHHJKZknzxVtvo77og==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/babylon": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", - "dev": true, - "bin": { - "babylon": "bin/babylon.js" - } - }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -5387,12 +5174,15 @@ "dev": true }, "node_modules/core-js": { - "version": "2.6.12", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", - "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", - "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.", + "version": "3.37.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.37.0.tgz", + "integrity": "sha512-fu5vHevQ8ZG4og+LXug8ulUtVxjOcEYvifJr7L5Bfq9GOztVqsKd9/59hUk2ZSbCrS3BqUr3EpaYGIYzq7g3Ug==", "dev": true, - "hasInstallScript": true + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } }, "node_modules/core-js-compat": { "version": "3.37.0", @@ -6495,12 +6285,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/es6-promise": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", - "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", - "dev": true - }, "node_modules/escalade": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", @@ -8130,27 +7914,6 @@ "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", "dev": true }, - "node_modules/has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", - "dev": true, - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-ansi/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/has-bigints": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", @@ -8723,15 +8486,6 @@ "node": ">=10.13.0" } }, - "node_modules/invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "dev": true, - "dependencies": { - "loose-envify": "^1.0.0" - } - }, "node_modules/ipaddr.js": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz", @@ -11398,18 +11152,6 @@ "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", "dev": true }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, "node_modules/lower-case": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", diff --git a/package.json b/package.json index bafc569..9746143 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,6 @@ "@babel/cli": "^7.24.1", "@babel/core": "^7.24.4", "@babel/eslint-parser": "^7.24.1", - "@babel/plugin-proposal-class-properties": "^7.18.6", "@babel/plugin-transform-flow-comments": "^7.24.1", "@babel/plugin-transform-modules-commonjs": "^7.24.1", "@babel/plugin-transform-runtime": "^7.24.3", @@ -40,10 +39,9 @@ "@typescript-eslint/parser": "^7.7.1", "babel-jest": "^29.7.0", "babel-loader": "^9.1.3", - "babel-plugin-es6-promise": "^1.1.1", + "core-js": "^3.37.0", "css-loader": "^7.1.1", "css-minimizer-webpack-plugin": "^6.0.0", - "es6-promise": "^4.2.8", "eslint": "^8.0.0", "eslint-plugin-flowtype": "^8.0.3", "eslint-plugin-jest": "^28.3.0", diff --git a/src/sdk/__tests__/_setup/_structuredClone.js b/src/sdk/__tests__/_setup/_structuredClone.js new file mode 100644 index 0000000..0de16db --- /dev/null +++ b/src/sdk/__tests__/_setup/_structuredClone.js @@ -0,0 +1 @@ +import 'core-js/stable/structured-clone'; diff --git a/src/sdk/storage/types.ts b/src/sdk/storage/types.ts index 47fa49d..4b0030c 100644 --- a/src/sdk/storage/types.ts +++ b/src/sdk/storage/types.ts @@ -36,4 +36,4 @@ function valueIsRecord(value: StoredValue | Record): value is R return isObject(value) } -export { IStorage, KeyRangeCondition, StoredValue, StoredRecord, StoredRecordId, Error, valueIsRecord } +export { IStorage, KeyRangeCondition, StoredValue, StoredRecord, StoredRecordId, type Error, valueIsRecord } From 0820e3a1dd5b06e72768ddab9d51f6a65f9517ee Mon Sep 17 00:00:00 2001 From: Yara Matkova Date: Thu, 4 Jul 2024 13:25:45 +0200 Subject: [PATCH 07/70] build: update production files --- dist/INTEGRITY | 2 +- dist/adjust-latest.js | 11821 +++++++++++++--------------------- dist/adjust-latest.min.js | 3 +- dist/sdk.snippet-sri.min.js | 2 +- dist/sdk.snippet.min.js | 2 +- 5 files changed, 4501 insertions(+), 7329 deletions(-) diff --git a/dist/INTEGRITY b/dist/INTEGRITY index db7b944..e879f57 100644 --- a/dist/INTEGRITY +++ b/dist/INTEGRITY @@ -1 +1 @@ -sha384-BqbTn9xyk5DPznti1ZP8ksxKiOFhKufLBFWm5eNMCnZABFSG1eqQfcu5dsiZJHu5 \ No newline at end of file +sha384-Yo5Rdp/3+fr9wr27apcsY00R3V3PjL2tZDE9sYTxro5nVmjTz3gK/UTdK2xDOi9m \ No newline at end of file diff --git a/dist/adjust-latest.js b/dist/adjust-latest.js index f15722f..7ac43cb 100644 --- a/dist/adjust-latest.js +++ b/dist/adjust-latest.js @@ -9,4013 +9,2273 @@ root["Adjust"] = factory(); })(self, () => { return /******/ (() => { // webpackBootstrap -/******/ var __webpack_modules__ = ({ - -/***/ 841: -/***/ ((module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Z": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(81); -/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(645); -/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(667); -/* harmony import */ var _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2__); -// Imports - - - -var ___CSS_LOADER_URL_IMPORT_0___ = new URL(/* asset import */ __webpack_require__(529), __webpack_require__.b); -var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); -var ___CSS_LOADER_URL_REPLACEMENT_0___ = _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_0___); -// Module -___CSS_LOADER_EXPORT___.push([module.id, ".adjust-smart-banner__AEqYlWgPonspKfseFq2N{height:76px}@media(min-width: 428px){.adjust-smart-banner__AEqYlWgPonspKfseFq2N{height:0}}.adjust-smart-banner__NVk5vwju_4kdaKzGWJPq{position:fixed;left:0;right:0;z-index:10000000}.adjust-smart-banner__NVk5vwju_4kdaKzGWJPq.adjust-smart-banner__jOV7BvlxDT7ATfbLPh3j{top:0}.adjust-smart-banner__NVk5vwju_4kdaKzGWJPq.adjust-smart-banner__XmomYv1VVQYz0lEtn9Q2{bottom:0}.adjust-smart-banner__NVk5vwju_4kdaKzGWJPq .adjust-smart-banner__eXKzWnRDn4RWUiSSeVYK{margin:0 auto;max-width:428px;background:#fff}.adjust-smart-banner__NVk5vwju_4kdaKzGWJPq .adjust-smart-banner__eXKzWnRDn4RWUiSSeVYK .adjust-smart-banner__r3JnN_RNhpzArrmKQ8jI{display:flex;align-items:center;padding:10px 8px 10px 4px}.adjust-smart-banner__NVk5vwju_4kdaKzGWJPq .adjust-smart-banner__eXKzWnRDn4RWUiSSeVYK .adjust-smart-banner__r3JnN_RNhpzArrmKQ8jI .adjust-smart-banner__VFuxsD_KzqNSxQecFmao{width:32px;height:32px;border:none;background:url(" + ___CSS_LOADER_URL_REPLACEMENT_0___ + ");background-repeat:no-repeat;background-position:center center;background-size:8px 8px,auto;cursor:pointer}.adjust-smart-banner__NVk5vwju_4kdaKzGWJPq .adjust-smart-banner__eXKzWnRDn4RWUiSSeVYK .adjust-smart-banner__r3JnN_RNhpzArrmKQ8jI .adjust-smart-banner__hqvH8Y5fwbegVLKnoYv_{width:56px;height:56px;overflow:hidden;background-color:#6e7492;border-radius:8px}.adjust-smart-banner__NVk5vwju_4kdaKzGWJPq .adjust-smart-banner__eXKzWnRDn4RWUiSSeVYK .adjust-smart-banner__r3JnN_RNhpzArrmKQ8jI .adjust-smart-banner__hqvH8Y5fwbegVLKnoYv_ .adjust-smart-banner__Ll9XMTDiX4Drgeydp0Oc{display:flex;align-items:center;justify-content:center;width:100%;height:100%;color:#353a52;font-weight:bold;font-size:23px;font-family:ArialMt,Arial,sans-serif;line-height:32px;background-color:#e0e2ec}.adjust-smart-banner__NVk5vwju_4kdaKzGWJPq .adjust-smart-banner__eXKzWnRDn4RWUiSSeVYK .adjust-smart-banner__r3JnN_RNhpzArrmKQ8jI .adjust-smart-banner__hqvH8Y5fwbegVLKnoYv_ .adjust-smart-banner__VYRfEif2Ph2_984rXQy8{width:100%}.adjust-smart-banner__NVk5vwju_4kdaKzGWJPq .adjust-smart-banner__eXKzWnRDn4RWUiSSeVYK .adjust-smart-banner__r3JnN_RNhpzArrmKQ8jI .adjust-smart-banner__I8xX0C5dUcR53pY0aEys{flex:1 1 0%;min-height:0;min-width:0;margin:0 12px}.adjust-smart-banner__NVk5vwju_4kdaKzGWJPq .adjust-smart-banner__eXKzWnRDn4RWUiSSeVYK .adjust-smart-banner__r3JnN_RNhpzArrmKQ8jI .adjust-smart-banner__JJLdp2l7YvnsUXudojWA{overflow:hidden;text-overflow:ellipsis}.adjust-smart-banner__NVk5vwju_4kdaKzGWJPq .adjust-smart-banner__eXKzWnRDn4RWUiSSeVYK .adjust-smart-banner__r3JnN_RNhpzArrmKQ8jI h4{margin:5px 0 8px;color:#353a52;font-family:Arial-BoldMT,ArialMt,Arial,sans-serif;font-size:12px;font-weight:bold;line-height:16px;white-space:nowrap}.adjust-smart-banner__NVk5vwju_4kdaKzGWJPq .adjust-smart-banner__eXKzWnRDn4RWUiSSeVYK .adjust-smart-banner__r3JnN_RNhpzArrmKQ8jI p{margin:8px 0 7px;color:#353a52;font-family:ArialMt,Arial,sans-serif;font-size:9px;line-height:11px;max-height:22px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}.adjust-smart-banner__NVk5vwju_4kdaKzGWJPq .adjust-smart-banner__eXKzWnRDn4RWUiSSeVYK .adjust-smart-banner__r3JnN_RNhpzArrmKQ8jI .adjust-smart-banner__risKVvV3T0vjKiSTR9l0{color:#6e7492;background:#f9fafc;border:1px solid #cdd0e0;border-radius:4px;border-color:#6e7492;box-shadow:inset 0px -1px 0px 0px #e0e2ec;padding:4px 6.5px;display:inline-block;vertical-align:middle;text-align:center;font-family:ArialMt,Arial,sans-serif;font-size:12px;font-weight:500;line-height:16px;cursor:pointer;text-decoration:none}", ""]); -// Exports -___CSS_LOADER_EXPORT___.locals = { - "bannerContainer": "adjust-smart-banner__AEqYlWgPonspKfseFq2N", - "banner": "adjust-smart-banner__NVk5vwju_4kdaKzGWJPq", - "stickyToTop": "adjust-smart-banner__jOV7BvlxDT7ATfbLPh3j", - "stickyToBottom": "adjust-smart-banner__XmomYv1VVQYz0lEtn9Q2", - "bannerBody": "adjust-smart-banner__eXKzWnRDn4RWUiSSeVYK", - "content": "adjust-smart-banner__r3JnN_RNhpzArrmKQ8jI", - "dismiss": "adjust-smart-banner__VFuxsD_KzqNSxQecFmao", - "appIcon": "adjust-smart-banner__hqvH8Y5fwbegVLKnoYv_", - "placeholder": "adjust-smart-banner__Ll9XMTDiX4Drgeydp0Oc", - "image": "adjust-smart-banner__VYRfEif2Ph2_984rXQy8", - "textContainer": "adjust-smart-banner__I8xX0C5dUcR53pY0aEys", - "bannerText": "adjust-smart-banner__JJLdp2l7YvnsUXudojWA", - "action": "adjust-smart-banner__risKVvV3T0vjKiSTR9l0" -}; -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); - - -/***/ }), - -/***/ 645: -/***/ ((module) => { - -"use strict"; - - -/* - MIT License http://www.opensource.org/licenses/mit-license.php - Author Tobias Koppers @sokra -*/ -module.exports = function (cssWithMappingToString) { - var list = []; // return the list of modules as css string - - list.toString = function toString() { - return this.map(function (item) { - var content = ""; - var needLayer = typeof item[5] !== "undefined"; - - if (item[4]) { - content += "@supports (".concat(item[4], ") {"); - } - - if (item[2]) { - content += "@media ".concat(item[2], " {"); - } - - if (needLayer) { - content += "@layer".concat(item[5].length > 0 ? " ".concat(item[5]) : "", " {"); - } - - content += cssWithMappingToString(item); - - if (needLayer) { - content += "}"; - } - - if (item[2]) { - content += "}"; - } - - if (item[4]) { - content += "}"; - } - - return content; - }).join(""); - }; // import a list of modules into the list - - - list.i = function i(modules, media, dedupe, supports, layer) { - if (typeof modules === "string") { - modules = [[null, modules, undefined]]; - } - - var alreadyImportedModules = {}; - - if (dedupe) { - for (var k = 0; k < this.length; k++) { - var id = this[k][0]; - - if (id != null) { - alreadyImportedModules[id] = true; - } - } - } - - for (var _k = 0; _k < modules.length; _k++) { - var item = [].concat(modules[_k]); - - if (dedupe && alreadyImportedModules[item[0]]) { - continue; - } - - if (typeof layer !== "undefined") { - if (typeof item[5] === "undefined") { - item[5] = layer; - } else { - item[1] = "@layer".concat(item[5].length > 0 ? " ".concat(item[5]) : "", " {").concat(item[1], "}"); - item[5] = layer; - } - } - - if (media) { - if (!item[2]) { - item[2] = media; - } else { - item[1] = "@media ".concat(item[2], " {").concat(item[1], "}"); - item[2] = media; - } - } - - if (supports) { - if (!item[4]) { - item[4] = "".concat(supports); - } else { - item[1] = "@supports (".concat(item[4], ") {").concat(item[1], "}"); - item[4] = supports; - } - } - - list.push(item); - } - }; - - return list; -}; - -/***/ }), - -/***/ 667: -/***/ ((module) => { - -"use strict"; - - -module.exports = function (url, options) { - if (!options) { - options = {}; - } - - if (!url) { - return url; - } - - url = String(url.__esModule ? url.default : url); // If url is already wrapped in quotes, remove them - - if (/^['"].*['"]$/.test(url)) { - url = url.slice(1, -1); - } - - if (options.hash) { - url += options.hash; - } // Should url be wrapped? - // See https://drafts.csswg.org/css-values-3/#urls - - - if (/["'() \t\n]|(%20)/.test(url) || options.needQuotes) { - return "\"".concat(url.replace(/"/g, '\\"').replace(/\n/g, "\\n"), "\""); - } - - return url; -}; - -/***/ }), - -/***/ 81: -/***/ ((module) => { - -"use strict"; - - -module.exports = function (i) { - return i[1]; -}; - -/***/ }), - -/***/ 702: -/***/ (function(module, __unused_webpack_exports, __webpack_require__) { +/******/ "use strict"; +/******/ // The require scope +/******/ var __webpack_require__ = {}; +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/************************************************************************/ +var __webpack_exports__ = {}; -/*! - * @overview es6-promise - a tiny implementation of Promises/A+. - * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald) - * @license Licensed under MIT license - * See https://raw.githubusercontent.com/stefanpenner/es6-promise/master/LICENSE - * @version v4.2.8+1e68dce6 - */ +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "default": () => (/* binding */ main) +}); -(function (global, factory) { - true ? module.exports = factory() : - 0; -}(this, (function () { 'use strict'; +;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/typeof.js +function _typeof(o) { + "@babel/helpers - typeof"; -function objectOrFunction(x) { - var type = typeof x; - return x !== null && (type === 'object' || type === 'function'); + return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { + return typeof o; + } : function (o) { + return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; + }, _typeof(o); } +;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/toPrimitive.js -function isFunction(x) { - return typeof x === 'function'; +function toPrimitive(t, r) { + if ("object" != _typeof(t) || !t) return t; + var e = t[Symbol.toPrimitive]; + if (void 0 !== e) { + var i = e.call(t, r || "default"); + if ("object" != _typeof(i)) return i; + throw new TypeError("@@toPrimitive must return a primitive value."); + } + return ("string" === r ? String : Number)(t); } +;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/toPropertyKey.js - -var _isArray = void 0; -if (Array.isArray) { - _isArray = Array.isArray; -} else { - _isArray = function (x) { - return Object.prototype.toString.call(x) === '[object Array]'; - }; +function toPropertyKey(t) { + var i = toPrimitive(t, "string"); + return "symbol" == _typeof(i) ? i : i + ""; } +;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/defineProperty.js -var isArray = _isArray; - -var len = 0; -var vertxNext = void 0; -var customSchedulerFn = void 0; - -var asap = function asap(callback, arg) { - queue[len] = callback; - queue[len + 1] = arg; - len += 2; - if (len === 2) { - // If len is 2, that means that we need to schedule an async flush. - // If additional callbacks are queued before the queue is flushed, they - // will be processed by this flush that we are scheduling. - if (customSchedulerFn) { - customSchedulerFn(flush); - } else { - scheduleFlush(); - } +function _defineProperty(obj, key, value) { + key = toPropertyKey(key); + if (key in obj) { + Object.defineProperty(obj, key, { + value: value, + enumerable: true, + configurable: true, + writable: true + }); + } else { + obj[key] = value; } -}; - -function setScheduler(scheduleFn) { - customSchedulerFn = scheduleFn; -} - -function setAsap(asapFn) { - asap = asapFn; -} - -var browserWindow = typeof window !== 'undefined' ? window : undefined; -var browserGlobal = browserWindow || {}; -var BrowserMutationObserver = browserGlobal.MutationObserver || browserGlobal.WebKitMutationObserver; -var isNode = typeof self === 'undefined' && typeof process !== 'undefined' && {}.toString.call(process) === '[object process]'; - -// test for web worker but not in IE10 -var isWorker = typeof Uint8ClampedArray !== 'undefined' && typeof importScripts !== 'undefined' && typeof MessageChannel !== 'undefined'; - -// node -function useNextTick() { - // node version 0.10.x displays a deprecation warning when nextTick is used recursively - // see https://github.com/cujojs/when/issues/410 for details - return function () { - return process.nextTick(flush); - }; + return obj; } +;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/objectSpread2.js -// vertx -function useVertxTimer() { - if (typeof vertxNext !== 'undefined') { - return function () { - vertxNext(flush); - }; +function ownKeys(e, r) { + var t = Object.keys(e); + if (Object.getOwnPropertySymbols) { + var o = Object.getOwnPropertySymbols(e); + r && (o = o.filter(function (r) { + return Object.getOwnPropertyDescriptor(e, r).enumerable; + })), t.push.apply(t, o); + } + return t; +} +function _objectSpread2(e) { + for (var r = 1; r < arguments.length; r++) { + var t = null != arguments[r] ? arguments[r] : {}; + r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { + _defineProperty(e, r, t[r]); + }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { + Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); + }); } - - return useSetTimeout(); + return e; } - -function useMutationObserver() { - var iterations = 0; - var observer = new BrowserMutationObserver(flush); - var node = document.createTextNode(''); - observer.observe(node, { characterData: true }); - - return function () { - node.data = iterations = ++iterations % 2; - }; +;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js +function _objectWithoutPropertiesLoose(source, excluded) { + if (source == null) return {}; + var target = {}; + var sourceKeys = Object.keys(source); + var key, i; + for (i = 0; i < sourceKeys.length; i++) { + key = sourceKeys[i]; + if (excluded.indexOf(key) >= 0) continue; + target[key] = source[key]; + } + return target; } +;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js -// web worker -function useMessageChannel() { - var channel = new MessageChannel(); - channel.port1.onmessage = flush; - return function () { - return channel.port2.postMessage(0); - }; +function _objectWithoutProperties(source, excluded) { + if (source == null) return {}; + var target = _objectWithoutPropertiesLoose(source, excluded); + var key, i; + if (Object.getOwnPropertySymbols) { + var sourceSymbolKeys = Object.getOwnPropertySymbols(source); + for (i = 0; i < sourceSymbolKeys.length; i++) { + key = sourceSymbolKeys[i]; + if (excluded.indexOf(key) >= 0) continue; + if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; + target[key] = source[key]; + } + } + return target; } - -function useSetTimeout() { - // Store setTimeout reference so es6-promise will be unaffected by - // other code modifying setTimeout (like sinon.useFakeTimers()) - var globalSetTimeout = setTimeout; - return function () { - return globalSetTimeout(flush, 1); - }; +;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js +function _arrayWithHoles(arr) { + if (Array.isArray(arr)) return arr; } - -var queue = new Array(1000); -function flush() { - for (var i = 0; i < len; i += 2) { - var callback = queue[i]; - var arg = queue[i + 1]; - - callback(arg); - - queue[i] = undefined; - queue[i + 1] = undefined; +;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js +function _iterableToArrayLimit(r, l) { + var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; + if (null != t) { + var e, + n, + i, + u, + a = [], + f = !0, + o = !1; + try { + if (i = (t = t.call(r)).next, 0 === l) { + if (Object(t) !== t) return; + f = !1; + } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); + } catch (r) { + o = !0, n = r; + } finally { + try { + if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; + } finally { + if (o) throw n; + } + } + return a; } - - len = 0; } - -function attemptVertx() { - try { - var vertx = Function('return this')().require('vertx'); - vertxNext = vertx.runOnLoop || vertx.runOnContext; - return useVertxTimer(); - } catch (e) { - return useSetTimeout(); - } +;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js +function _arrayLikeToArray(arr, len) { + if (len == null || len > arr.length) len = arr.length; + for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; + return arr2; } +;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js -var scheduleFlush = void 0; -// Decide what async method to use to triggering processing of queued callbacks: -if (isNode) { - scheduleFlush = useNextTick(); -} else if (BrowserMutationObserver) { - scheduleFlush = useMutationObserver(); -} else if (isWorker) { - scheduleFlush = useMessageChannel(); -} else if (browserWindow === undefined && "function" === 'function') { - scheduleFlush = attemptVertx(); -} else { - scheduleFlush = useSetTimeout(); +function _unsupportedIterableToArray(o, minLen) { + if (!o) return; + if (typeof o === "string") return _arrayLikeToArray(o, minLen); + var n = Object.prototype.toString.call(o).slice(8, -1); + if (n === "Object" && o.constructor) n = o.constructor.name; + if (n === "Map" || n === "Set") return Array.from(o); + if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } - -function then(onFulfillment, onRejection) { - var parent = this; - - var child = new this.constructor(noop); - - if (child[PROMISE_ID] === undefined) { - makePromise(child); - } - - var _state = parent._state; - - - if (_state) { - var callback = arguments[_state - 1]; - asap(function () { - return invokeCallback(_state, child, callback, parent._result); - }); - } else { - subscribe(parent, child, onFulfillment, onRejection); - } - - return child; +;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/nonIterableRest.js +function _nonIterableRest() { + throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } +;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/slicedToArray.js -/** - `Promise.resolve` returns a promise that will become resolved with the - passed `value`. It is shorthand for the following: - - ```javascript - let promise = new Promise(function(resolve, reject){ - resolve(1); - }); - - promise.then(function(value){ - // value === 1 - }); - ``` - - Instead of writing the above, your code now simply becomes the following: - - ```javascript - let promise = Promise.resolve(1); - - promise.then(function(value){ - // value === 1 - }); - ``` - @method resolve - @static - @param {Any} value value that the returned promise will be resolved with - Useful for tooling. - @return {Promise} a promise that will become fulfilled with the given - `value` -*/ -function resolve$1(object) { - /*jshint validthis:true */ - var Constructor = this; - if (object && typeof object === 'object' && object.constructor === Constructor) { - return object; - } - var promise = new Constructor(noop); - resolve(promise, object); - return promise; +function _slicedToArray(arr, i) { + return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } +;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js -var PROMISE_ID = Math.random().toString(36).substring(2); - -function noop() {} - -var PENDING = void 0; -var FULFILLED = 1; -var REJECTED = 2; - -function selfFulfillment() { - return new TypeError("You cannot resolve a promise with itself"); +function _arrayWithoutHoles(arr) { + if (Array.isArray(arr)) return _arrayLikeToArray(arr); } - -function cannotReturnOwn() { - return new TypeError('A promises callback cannot return that same promise.'); +;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/iterableToArray.js +function _iterableToArray(iter) { + if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); } - -function tryThen(then$$1, value, fulfillmentHandler, rejectionHandler) { - try { - then$$1.call(value, fulfillmentHandler, rejectionHandler); - } catch (e) { - return e; - } +;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js +function _nonIterableSpread() { + throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } +;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js -function handleForeignThenable(promise, thenable, then$$1) { - asap(function (promise) { - var sealed = false; - var error = tryThen(then$$1, thenable, function (value) { - if (sealed) { - return; - } - sealed = true; - if (thenable !== value) { - resolve(promise, value); - } else { - fulfill(promise, value); - } - }, function (reason) { - if (sealed) { - return; - } - sealed = true; - reject(promise, reason); - }, 'Settle: ' + (promise._label || ' unknown promise')); - if (!sealed && error) { - sealed = true; - reject(promise, error); - } - }, promise); -} -function handleOwnThenable(promise, thenable) { - if (thenable._state === FULFILLED) { - fulfill(promise, thenable._result); - } else if (thenable._state === REJECTED) { - reject(promise, thenable._result); - } else { - subscribe(thenable, undefined, function (value) { - return resolve(promise, value); - }, function (reason) { - return reject(promise, reason); - }); - } +function _toConsumableArray(arr) { + return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } - -function handleMaybeThenable(promise, maybeThenable, then$$1) { - if (maybeThenable.constructor === promise.constructor && then$$1 === then && maybeThenable.constructor.resolve === resolve$1) { - handleOwnThenable(promise, maybeThenable); - } else { - if (then$$1 === undefined) { - fulfill(promise, maybeThenable); - } else if (isFunction(then$$1)) { - handleForeignThenable(promise, maybeThenable, then$$1); - } else { - fulfill(promise, maybeThenable); - } +;// CONCATENATED MODULE: ./src/sdk/constants.js +var SECOND = 1000; +var MINUTE = SECOND * 60; +var HOUR = MINUTE * 60; +var DAY = HOUR * 24; +var REASON_GENERAL = 'general'; +var REASON_GDPR = 'gdpr'; +var HTTP_ERRORS = { + 'TRANSACTION_ERROR': 'XHR transaction failed due to an error', + 'SERVER_MALFORMED_RESPONSE': 'Response from server is malformed', + 'SERVER_INTERNAL_ERROR': 'Internal error occurred on the server', + 'SERVER_CANNOT_PROCESS': 'Server was not able to process the request, probably due to error coming from the client', + 'NO_CONNECTION': 'No internet connectivity', + 'SKIP': 'Skipping slower attempt', + 'MISSING_URL': 'Url is not provided' +}; +var STORAGE_TYPES = { + NO_STORAGE: 'noStorage', + INDEXED_DB: 'indexedDB', + LOCAL_STORAGE: 'localStorage' +}; +var ENDPOINTS = { + default: { + endpointName: 'Default', + app: 'https://app.adjust.com', + gdpr: 'https://gdpr.adjust.com' + }, + india: { + endpointName: 'Indian', + app: 'https://app.adjust.net.in', + gdpr: 'https://gdpr.adjust.net.in' + }, + china: { + endpointName: 'Chinese', + app: 'https://app.adjust.world', + gdpr: 'https://gdpr.adjust.world' + }, + EU: { + endpointName: 'EU', + app: 'https://app.eu.adjust.com', + gdpr: 'https://gdpr.eu.adjust.com' + }, + TR: { + endpointName: 'TR', + app: 'https://app.tr.adjust.com', + gdpr: 'https://gdpr.tr.adjust.com' + }, + US: { + endpointName: 'US', + app: 'https://app.us.adjust.com', + gdpr: 'https://gdpr.us.adjust.com' } -} +}; +;// CONCATENATED MODULE: ./src/sdk/utilities.ts -function resolve(promise, value) { - if (promise === value) { - reject(promise, selfFulfillment()); - } else if (objectOrFunction(value)) { - var then$$1 = void 0; - try { - then$$1 = value.then; - } catch (error) { - reject(promise, error); - return; - } - handleMaybeThenable(promise, value, then$$1); - } else { - fulfill(promise, value); - } -} -function publishRejection(promise) { - if (promise._onerror) { - promise._onerror(promise._result); - } - publish(promise); -} -function fulfill(promise, value) { - if (promise._state !== PENDING) { - return; +/** + * Build human readable list + */ +function buildList(array /*: Array*/) /*: string*/{ + if (!array.length) { + return ''; } - - promise._result = value; - promise._state = FULFILLED; - - if (promise._subscribers.length !== 0) { - asap(publish, promise); + if (array.length === 1) { + return "".concat(array[0]); } + var lastIndex = array.length - 1; + var firstPart = array.slice(0, lastIndex).join(', '); + return "".concat(firstPart, " and ").concat(array[lastIndex]); } -function reject(promise, reason) { - if (promise._state !== PENDING) { - return; - } - promise._state = REJECTED; - promise._result = reason; - - asap(publishRejection, promise); +/** + * Check if object is empty + */ +function isEmpty(obj /*: Record*/) /*: boolean*/{ + return !Object.keys(obj).length && obj.constructor === Object; } -function subscribe(parent, child, onFulfillment, onRejection) { - var _subscribers = parent._subscribers; - var length = _subscribers.length; - - - parent._onerror = null; - - _subscribers[length] = child; - _subscribers[length + FULFILLED] = onFulfillment; - _subscribers[length + REJECTED] = onRejection; +/** + * Check if value is object + */ +function isObject(obj /*: any*/) /*: boolean*/{ + // eslint-disable-line @typescript-eslint/no-explicit-any + return _typeof(obj) === 'object' && obj !== null && !(obj instanceof Array); +} - if (length === 0 && parent._state) { - asap(publish, parent); +/** + * Check if string is valid json + */ +function isValidJson(string /*: string*/) /*: boolean*/{ + try { + var json = JSON.parse(string); + return isObject(json); + } catch (e) { + return false; } } -function publish(promise) { - var subscribers = promise._subscribers; - var settled = promise._state; - - if (subscribers.length === 0) { - return; +/** + * Find index of an element in the list and return it + */ +function findIndex /*:: >*/(array /*: Array*/, key /*: K | Array*/, target /*: T*/) /*: number*/{ + function isEqual(item /*: T*/) { + return Array.isArray(key) ? key.every(function (k) { + return item[k] === target[k]; + }) : item[key] === target; } - - var child = void 0, - callback = void 0, - detail = promise._result; - - for (var i = 0; i < subscribers.length; i += 3) { - child = subscribers[i]; - callback = subscribers[i + settled]; - - if (child) { - invokeCallback(settled, child, callback, detail); - } else { - callback(detail); + for (var i = 0; i < array.length; i += 1) { + if (isEqual(array[i])) { + return i; } } - - promise._subscribers.length = 0; + return -1; } -function invokeCallback(settled, promise, callback, detail) { - var hasCallback = isFunction(callback), - value = void 0, - error = void 0, - succeeded = true; - - if (hasCallback) { - try { - value = callback(detail); - } catch (e) { - succeeded = false; - error = e; - } - - if (promise === value) { - reject(promise, cannotReturnOwn()); - return; - } - } else { - value = detail; - } - - if (promise._state !== PENDING) { - // noop - } else if (hasCallback && succeeded) { - resolve(promise, value); - } else if (succeeded === false) { - reject(promise, error); - } else if (settled === FULFILLED) { - fulfill(promise, value); - } else if (settled === REJECTED) { - reject(promise, value); - } +/** + * Convert array with key/value item structure into key/value pairs object + */ +function convertToMap /*:: */() /*: Record*/{ + var array /*: Array<{ key: string, value: T }>*/ = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; + return array.reduce(function (acc, o) { + return _objectSpread2(_objectSpread2({}, acc), {}, _defineProperty({}, o.key, o.value)); + }, {}); } -function initializePromise(promise, resolver) { - try { - resolver(function resolvePromise(value) { - resolve(promise, value); - }, function rejectPromise(reason) { - reject(promise, reason); - }); - } catch (e) { - reject(promise, e); - } +/** + * Find intersecting values of provided array against given values + */ +function intersection /*:: */() /*: Array*/{ + var array /*: Array*/ = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; + var values /*: Array*/ = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; + return array.filter(function (item) { + return values.indexOf(item) !== -1; + }); } -var id = 0; -function nextId() { - return id++; +/** + * Check if particular url is a certain request + */ +function isRequest(url /*: string*/, requestName /*: string*/) /*: boolean*/{ + var regex = new RegExp("\\/".concat(requestName, "(\\/.*|\\?.*){0,1}$")); + return regex.test(url); } -function makePromise(promise) { - promise[PROMISE_ID] = id++; - promise._state = undefined; - promise._result = undefined; - promise._subscribers = []; +/** + * Extract the host name for the url + */ +function getHostName() /*: string*/{ + var url = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; + return url.replace(/^(http(s)*:\/\/)*(www\.)*/, '').split('/')[0].split('?')[0]; } -function validationError() { - return new Error('Array Methods must be provided an Array'); +/** + * Transform array entry into object key:value pair entry + */ +function reducer /*:: */(acc /*: Record*/, _ref /*:: */) /*: Record*/{ + var _ref2 = _slicedToArray(_ref /*:: */, 2), + key = _ref2[0], + value = _ref2[1]; + return _objectSpread2(_objectSpread2({}, acc), {}, _defineProperty({}, key, value)); } -var Enumerator = function () { - function Enumerator(Constructor, input) { - this._instanceConstructor = Constructor; - this.promise = new Constructor(noop); - - if (!this.promise[PROMISE_ID]) { - makePromise(this.promise); - } - - if (isArray(input)) { - this.length = input.length; - this._remaining = input.length; +/** + * Extracts object entries in the [key, value] format + */ +function entries /*:: */(object /*: Record*/) /*: Array<[K, T]>*/{ + return Object.keys(object).map(function (key /*: K*/) { + return [key, object[key]]; + }); +} - this._result = new Array(this.length); +/** + * Extracts object values + */ +function values /*:: */(object /*: Record*/) /*: Array*/{ + return Object.keys(object).map(function (key /*: string*/) { + return object[key]; + }); +} - if (this.length === 0) { - fulfill(this.promise, this._result); - } else { - this.length = this.length || 0; - this._enumerate(input); - if (this._remaining === 0) { - fulfill(this.promise, this._result); - } - } - } else { - reject(this.promise, validationError()); - } +/** + * Check if value is empty in any way (empty object, false value, zero) and use it as predicate method + */ +function isEmptyEntry(value /*: any*/) /*: boolean*/{ + // eslint-disable-line @typescript-eslint/no-explicit-any + if (isObject(value)) { + return !isEmpty(value); + } + return !!value || value === 0; +} +function isLocalStorageSupported() /*: boolean*/{ + try { + var uid = new Date().toString(); + var storage = window.localStorage; + storage.setItem(uid, uid); + var result = storage.getItem(uid) === uid; + storage.removeItem(uid); + var support = !!(result && storage); + return support; + } catch (e) { + return false; } +} - Enumerator.prototype._enumerate = function _enumerate(input) { - for (var i = 0; this._state === PENDING && i < input.length; i++) { - this._eachEntry(input[i], i); - } - }; +;// CONCATENATED MODULE: ./src/sdk/globals.js +/*:: declare var __ADJUST__NAMESPACE: string*/ +/*:: declare var __ADJUST__SDK_VERSION: string*/ +/*:: declare var process: {| + env: {| + NODE_ENV: 'development' | 'production' | 'test' + |} +|}*/ +var Globals = { + namespace: "adjust-sdk" || 0, + version: "5.6.0" || 0, + env: "production" +}; +/* harmony default export */ const globals = (Globals); +;// CONCATENATED MODULE: ./src/sdk/logger.js - Enumerator.prototype._eachEntry = function _eachEntry(entry, i) { - var c = this._instanceConstructor; - var resolve$$1 = c.resolve; - if (resolve$$1 === resolve$1) { - var _then = void 0; - var error = void 0; - var didError = false; - try { - _then = entry.then; - } catch (e) { - didError = true; - error = e; - } - - if (_then === then && entry._state !== PENDING) { - this._settledAt(entry._state, i, entry._result); - } else if (typeof _then !== 'function') { - this._remaining--; - this._result[i] = entry; - } else if (c === Promise$1) { - var promise = new c(noop); - if (didError) { - reject(promise, error); - } else { - handleMaybeThenable(promise, entry, _then); - } - this._willSettleAt(promise, i); - } else { - this._willSettleAt(new c(function (resolve$$1) { - return resolve$$1(entry); - }), i); - } - } else { - this._willSettleAt(resolve$$1(entry), i); - } - }; - - Enumerator.prototype._settledAt = function _settledAt(state, i, value) { - var promise = this.promise; - - - if (promise._state === PENDING) { - this._remaining--; - - if (state === REJECTED) { - reject(promise, value); - } else { - this._result[i] = value; - } - } - - if (this._remaining === 0) { - fulfill(promise, this._result); - } - }; - - Enumerator.prototype._willSettleAt = function _willSettleAt(promise, i) { - var enumerator = this; - - subscribe(promise, undefined, function (value) { - return enumerator._settledAt(FULFILLED, i, value); - }, function (reason) { - return enumerator._settledAt(REJECTED, i, reason); - }); - }; - - return Enumerator; -}(); +/*:: import { type LogOptionsT } from './types';*/ +/*:: type LogLevelT = $PropertyType*/ +/*:: type MethodNameT = 'log' | 'info' | 'error' | 'warn'*/ +var LEVEL_NONE = 'none'; +var LEVEL_ERROR = 'error'; +var LEVEL_WARNING = 'warning'; +var LEVEL_INFO = 'info'; +var LEVEL_VERBOSE = 'verbose'; /** - `Promise.all` accepts an array of promises, and returns a new promise which - is fulfilled with an array of fulfillment values for the passed promises, or - rejected with the reason of the first passed promise to be rejected. It casts all - elements of the passed iterable to promises as it runs this algorithm. - - Example: - - ```javascript - let promise1 = resolve(1); - let promise2 = resolve(2); - let promise3 = resolve(3); - let promises = [ promise1, promise2, promise3 ]; - - Promise.all(promises).then(function(array){ - // The array here would be [ 1, 2, 3 ]; - }); - ``` + * Logger levels + * - none -> nothing is printed to the console + * - error -> prints only error + * - info -> prints info and error + * - verbose -> prints log, info and error + * + * @type {Object} + * @private + */ +var _levels = _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty({}, LEVEL_NONE, -1), LEVEL_ERROR, 0), LEVEL_WARNING, 1), LEVEL_INFO, 2), LEVEL_VERBOSE, 3); - If any of the `promises` given to `all` are rejected, the first promise - that is rejected will be given as an argument to the returned promises's - rejection handler. For example: +/** + * Spaces placed after log level tag in console to align messages. + * + * @type {Object} + * @private + */ +var _spaces = { + 'log': ' ', + 'info': ' ', + 'warn': ' ', + 'error': '' +}; - Example: +/** + * Default logger level per environment + * + * @type {Object} + * @private + */ +var _envLogLevels = { + development: LEVEL_VERBOSE, + production: LEVEL_ERROR, + test: LEVEL_VERBOSE +}; - ```javascript - let promise1 = resolve(1); - let promise2 = reject(new Error("2")); - let promise3 = reject(new Error("3")); - let promises = [ promise1, promise2, promise3 ]; +/** + * Current logger level + */ +var _level = _getDefaultLogLevel(); - Promise.all(promises).then(function(array){ - // Code here never runs because there are rejected promises! - }, function(error) { - // error.message === "2" - }); - ``` +/** + * Optional output container to display logs for easier debugging + * + * @type {string} + * @private + */ +var _output = ''; - @method all - @static - @param {Array} entries array of promises - @param {String} label optional string for labeling the promise. - Useful for tooling. - @return {Promise} promise that is fulfilled when all `promises` have been - fulfilled, or rejected if any of them become rejected. - @static -*/ -function all(entries) { - return new Enumerator(this, entries).promise; +/** + * Get default logger error per environment and fallback to error level when unknown env + * + * @returns {string} + * @private + */ +function _getDefaultLogLevel() /*: LogLevelT*/{ + return _envLogLevels[globals.env] || LEVEL_ERROR; } /** - `Promise.race` returns a new promise which is settled in the same way as the - first passed promise to settle. - - Example: - - ```javascript - let promise1 = new Promise(function(resolve, reject){ - setTimeout(function(){ - resolve('promise 1'); - }, 200); - }); - - let promise2 = new Promise(function(resolve, reject){ - setTimeout(function(){ - resolve('promise 2'); - }, 100); - }); - - Promise.race([promise1, promise2]).then(function(result){ - // result === 'promise 2' because it was resolved before promise1 - // was resolved. - }); - ``` - - `Promise.race` is deterministic in that only the state of the first - settled promise matters. For example, even if other promises given to the - `promises` array argument are resolved, but the first settled promise has - become rejected before the other promises became fulfilled, the returned - promise will become rejected: - - ```javascript - let promise1 = new Promise(function(resolve, reject){ - setTimeout(function(){ - resolve('promise 1'); - }, 200); - }); - - let promise2 = new Promise(function(resolve, reject){ - setTimeout(function(){ - reject(new Error('promise 2')); - }, 100); - }); - - Promise.race([promise1, promise2]).then(function(result){ - // Code here never runs - }, function(reason){ - // reason.message === 'promise 2' because promise 2 became rejected before - // promise 1 became fulfilled - }); - ``` - - An example real-world use case is implementing timeouts: - - ```javascript - Promise.race([ajax('foo.json'), timeout(5000)]) - ``` - - @method race - @static - @param {Array} promises array of promises to observe - Useful for tooling. - @return {Promise} a promise which settles in the same way as the first passed - promise to settle. -*/ -function race(entries) { - /*jshint validthis:true */ - var Constructor = this; - - if (!isArray(entries)) { - return new Constructor(function (_, reject) { - return reject(new TypeError('You must pass an array to race.')); - }); - } else { - return new Constructor(function (resolve, reject) { - var length = entries.length; - for (var i = 0; i < length; i++) { - Constructor.resolve(entries[i]).then(resolve, reject); - } - }); + * Set logger level, fallback to default log level + * + * @param {string=} logLevel + * @param {string=} logOutput + */ +function setLogLevel(logLevel /*: LogLevelT*/, logOutput /*: string*/) /*: void*/{ + var exists = !logLevel || Object.keys(_levels).indexOf(logLevel) !== -1; + if (!exists) { + _log('error', 'error', 'You must set one of the available log levels: verbose, info, warning, error or none'); + return; } + _level = logLevel || _getDefaultLogLevel(); + _output = logOutput || _output; + _log('info', logLevel, "Log level set to ".concat(_level)); } /** - `Promise.reject` returns a promise rejected with the passed `reason`. - It is shorthand for the following: - - ```javascript - let promise = new Promise(function(resolve, reject){ - reject(new Error('WHOOPS')); - }); - - promise.then(function(value){ - // Code here doesn't run because the promise is rejected! - }, function(reason){ - // reason.message === 'WHOOPS' - }); - ``` - - Instead of writing the above, your code now simply becomes the following: - - ```javascript - let promise = Promise.reject(new Error('WHOOPS')); - - promise.then(function(value){ - // Code here doesn't run because the promise is rejected! - }, function(reason){ - // reason.message === 'WHOOPS' - }); - ``` - - @method reject - @static - @param {Any} reason value that the returned promise will be rejected with. - Useful for tooling. - @return {Promise} a promise rejected with the given `reason`. -*/ -function reject$1(reason) { - /*jshint validthis:true */ - var Constructor = this; - var promise = new Constructor(noop); - reject(promise, reason); - return promise; -} - -function needsResolver() { - throw new TypeError('You must pass a resolver function as the first argument to the promise constructor'); -} + * Output the message to the console + * + * @param {string} methodName + * @param {string} logLevel + * @param {Array} args + * @private + */ +function _log(methodName /*: MethodNameT*/, logLevel /*: LogLevelT*/) /*: void*/{ + var _console; + if (_levels[_level] < _levels[logLevel]) { + return; + } + var time = new Date().toISOString(); + var spaces = _spaces[methodName]; + var messagePrefix = ["[".concat(globals.namespace, "]"), time, "".concat(methodName.toUpperCase(), ":").concat(spaces)]; + var outputContainer = _output ? document.querySelector(_output) : null; + for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) { + args[_key - 2] = arguments[_key]; + } + (_console = console)[methodName].apply(_console, messagePrefix.concat(args)); // eslint-disable-line -function needsNew() { - throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function."); + if (outputContainer) { + outputContainer.textContent += "".concat(messagePrefix.join(' '), " ").concat(args.map(function (m) { + return isObject(m) ? JSON.stringify(m) : m; + }).join(' '), "\n"); + outputContainer.scrollTop = outputContainer.scrollHeight; + } } /** - Promise objects represent the eventual result of an asynchronous operation. The - primary way of interacting with a promise is through its `then` method, which - registers callbacks to receive either a promise's eventual value or the reason - why the promise cannot be fulfilled. - - Terminology - ----------- + * Apply predefined log level and return log method + * + * @param {string} name + * @param {string} logLevel + * @returns {Function: (Array) => void} + * @private + */ +function _applyLevel(name /*: MethodNameT*/, logLevel /*: LogLevelT*/) { + return function () { + for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { + args[_key2] = arguments[_key2]; + } + _log.apply(void 0, [name, logLevel].concat(args)); + }; +} +var Logger = { + setLogLevel: setLogLevel, + log: _applyLevel('log', LEVEL_VERBOSE), + info: _applyLevel('info', LEVEL_INFO), + warn: _applyLevel('warn', LEVEL_WARNING), + error: _applyLevel('error', LEVEL_ERROR) +}; +/* harmony default export */ const logger = (Logger); +;// CONCATENATED MODULE: ./src/sdk/config.js - - `promise` is an object or function with a `then` method whose behavior conforms to this specification. - - `thenable` is an object or function that defines a `then` method. - - `value` is any legal JavaScript value (including undefined, a thenable, or a promise). - - `exception` is a value that is thrown using the throw statement. - - `reason` is a value that indicates why a promise was rejected. - - `settled` the final resting state of a promise, fulfilled or rejected. - A promise can be in one of three states: pending, fulfilled, or rejected. - Promises that are fulfilled have a fulfillment value and are in the fulfilled - state. Promises that are rejected have a rejection reason and are in the - rejected state. A fulfillment value is never a thenable. +/*:: // +import { type BaseParamsT, type CustomConfigT, type InitOptionsT, type BaseParamsListT, type BaseParamsMandatoryListT, type CustomConfigListT } from './types';*/ - Promises can also be said to *resolve* a value. If this value is also a - promise, then the original promise's settled state will match the value's - settled state. So a promise that *resolves* a promise that rejects will - itself reject, and a promise that *resolves* a promise that fulfills will - itself fulfill. - Basic Usage: - ------------ - ```js - let promise = new Promise(function(resolve, reject) { - // on success - resolve(value); +/** + * Base parameters set by client + * - app token + * - environment + * - default tracker + * - external device ID + * + * @type {Object} + * @private + */ +var _baseParams /*: BaseParamsT*/ = {}; - // on failure - reject(reason); - }); +/** + * Custom config set by client + * - url override + * - event deduplication list limit + * + * @type {Object} + * @private + */ +var _customConfig /*: CustomConfigT*/ = {}; - promise.then(function(value) { - // on fulfillment - }, function(reason) { - // on rejection - }); - ``` +/** + * Mandatory fields to set for sdk initialization + * + * @type {string[]} + * @private + */ +var _mandatory /*: BaseParamsMandatoryListT*/ = ['appToken', 'environment']; - Advanced Usage: - --------------- +/** + * Allowed params to be sent with each request + * + * @type {string[]} + * @private + */ +var _allowedParams /*: BaseParamsListT*/ = [].concat(_mandatory, ['defaultTracker', 'externalDeviceId']); - Promises shine when abstracting away asynchronous interactions such as - `XMLHttpRequest`s. +/** + * Allowed configuration overrides + * + * @type {string[]} + * @private + */ +var _allowedConfig /*: CustomConfigListT*/ = ['customUrl', 'dataResidency', 'urlStrategy', 'eventDeduplicationListLimit', 'namespace']; - ```js - function getJSON(url) { - return new Promise(function(resolve, reject){ - let xhr = new XMLHttpRequest(); +/** + * Global configuration object used across the sdk + * + * @type {{ + * namespace: string, + * version: string, + * sessionWindow: number, + * sessionTimerWindow: number, + * requestValidityWindow: number + * }} + */ +var _baseConfig = { + sessionWindow: 30 * MINUTE, + sessionTimerWindow: 60 * SECOND, + requestValidityWindow: 28 * DAY +}; - xhr.open('GET', url); - xhr.onreadystatechange = handler; - xhr.responseType = 'json'; - xhr.setRequestHeader('Accept', 'application/json'); - xhr.send(); +/** + * Check of configuration has been initialized + * + * @returns {boolean} + */ +function isInitialised() /*: boolean*/{ + return _mandatory.reduce(function (acc, key) { + return acc && !!_baseParams[key]; + }, true); +} - function handler() { - if (this.readyState === this.DONE) { - if (this.status === 200) { - resolve(this.response); - } else { - reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']')); - } - } - }; - }); - } +/** + * Get base params set by client + * + * @returns {Object} + */ +function getBaseParams() /*: BaseParamsT*/{ + return _objectSpread2({}, _baseParams); +} - getJSON('/posts.json').then(function(json) { - // on fulfillment - }, function(reason) { - // on rejection - }); - ``` - - Unlike callbacks, promises are great composable primitives. - - ```js - Promise.all([ - getJSON('/posts'), - getJSON('/comments') - ]).then(function(values){ - values[0] // => postsJSON - values[1] // => commentsJSON - - return values; - }); - ``` - - @class Promise - @param {Function} resolver - Useful for tooling. - @constructor -*/ - -var Promise$1 = function () { - function Promise(resolver) { - this[PROMISE_ID] = nextId(); - this._result = this._state = undefined; - this._subscribers = []; - - if (noop !== resolver) { - typeof resolver !== 'function' && needsResolver(); - this instanceof Promise ? initializePromise(this, resolver) : needsNew(); - } - } - - /** - The primary way of interacting with a promise is through its `then` method, - which registers callbacks to receive either a promise's eventual value or the - reason why the promise cannot be fulfilled. - ```js - findUser().then(function(user){ - // user is available - }, function(reason){ - // user is unavailable, and you are given the reason why - }); - ``` - Chaining - -------- - The return value of `then` is itself a promise. This second, 'downstream' - promise is resolved with the return value of the first promise's fulfillment - or rejection handler, or rejected if the handler throws an exception. - ```js - findUser().then(function (user) { - return user.name; - }, function (reason) { - return 'default name'; - }).then(function (userName) { - // If `findUser` fulfilled, `userName` will be the user's name, otherwise it - // will be `'default name'` - }); - findUser().then(function (user) { - throw new Error('Found user, but still unhappy'); - }, function (reason) { - throw new Error('`findUser` rejected and we're unhappy'); - }).then(function (value) { - // never reached - }, function (reason) { - // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'. - // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'. - }); - ``` - If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream. - ```js - findUser().then(function (user) { - throw new PedagogicalException('Upstream error'); - }).then(function (value) { - // never reached - }).then(function (value) { - // never reached - }, function (reason) { - // The `PedgagocialException` is propagated all the way down to here - }); - ``` - Assimilation - ------------ - Sometimes the value you want to propagate to a downstream promise can only be - retrieved asynchronously. This can be achieved by returning a promise in the - fulfillment or rejection handler. The downstream promise will then be pending - until the returned promise is settled. This is called *assimilation*. - ```js - findUser().then(function (user) { - return findCommentsByAuthor(user); - }).then(function (comments) { - // The user's comments are now available - }); - ``` - If the assimliated promise rejects, then the downstream promise will also reject. - ```js - findUser().then(function (user) { - return findCommentsByAuthor(user); - }).then(function (comments) { - // If `findCommentsByAuthor` fulfills, we'll have the value here - }, function (reason) { - // If `findCommentsByAuthor` rejects, we'll have the reason here - }); - ``` - Simple Example - -------------- - Synchronous Example - ```javascript - let result; - try { - result = findResult(); - // success - } catch(reason) { - // failure - } - ``` - Errback Example - ```js - findResult(function(result, err){ - if (err) { - // failure - } else { - // success - } - }); - ``` - Promise Example; - ```javascript - findResult().then(function(result){ - // success - }, function(reason){ - // failure - }); - ``` - Advanced Example - -------------- - Synchronous Example - ```javascript - let author, books; - try { - author = findAuthor(); - books = findBooksByAuthor(author); - // success - } catch(reason) { - // failure - } - ``` - Errback Example - ```js - function foundBooks(books) { - } - function failure(reason) { - } - findAuthor(function(author, err){ - if (err) { - failure(err); - // failure - } else { - try { - findBoooksByAuthor(author, function(books, err) { - if (err) { - failure(err); - } else { - try { - foundBooks(books); - } catch(reason) { - failure(reason); - } - } - }); - } catch(error) { - failure(err); - } - // success - } - }); - ``` - Promise Example; - ```javascript - findAuthor(). - then(findBooksByAuthor). - then(function(books){ - // found books - }).catch(function(reason){ - // something went wrong - }); - ``` - @method then - @param {Function} onFulfilled - @param {Function} onRejected - Useful for tooling. - @return {Promise} - */ - - /** - `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same - as the catch block of a try/catch statement. - ```js - function findAuthor(){ - throw new Error('couldn't find that author'); - } - // synchronous - try { - findAuthor(); - } catch(reason) { - // something went wrong +/** + * Set base params and custom config for the sdk to run + * + * @param {Object} options + */ +function set(options /*: InitOptionsT*/) /*: void*/{ + if (hasMissing(options)) { + return; } - // async with promises - findAuthor().catch(function(reason){ - // something went wrong + var filteredParams = [].concat(_toConsumableArray(_allowedParams), _allowedConfig).filter(function (key) { + return !!options[key]; + }).map(function (key) { + return [key, options[key]]; }); - ``` - @method catch - @param {Function} onRejection - Useful for tooling. - @return {Promise} - */ - - - Promise.prototype.catch = function _catch(onRejection) { - return this.then(null, onRejection); - }; - - /** - `finally` will be invoked regardless of the promise's fate just as native - try/catch/finally behaves - - Synchronous example: - - ```js - findAuthor() { - if (Math.random() > 0.5) { - throw new Error(); - } - return new Author(); - } - - try { - return findAuthor(); // succeed or fail - } catch(error) { - return findOtherAuther(); - } finally { - // always runs - // doesn't affect the return value - } - ``` - - Asynchronous example: - - ```js - findAuthor().catch(function(reason){ - return findOtherAuther(); - }).finally(function(){ - // author was either found, or not - }); - ``` - - @method finally - @param {Function} callback - @return {Promise} - */ - - - Promise.prototype.finally = function _finally(callback) { - var promise = this; - var constructor = promise.constructor; - - if (isFunction(callback)) { - return promise.then(function (value) { - return constructor.resolve(callback()).then(function () { - return value; - }); - }, function (reason) { - return constructor.resolve(callback()).then(function () { - throw reason; - }); - }); - } - - return promise.then(callback, callback); - }; - - return Promise; -}(); - -Promise$1.prototype.then = then; -Promise$1.all = all; -Promise$1.race = race; -Promise$1.resolve = resolve$1; -Promise$1.reject = reject$1; -Promise$1._setScheduler = setScheduler; -Promise$1._setAsap = setAsap; -Promise$1._asap = asap; - -/*global self*/ -function polyfill() { - var local = void 0; - - if (typeof __webpack_require__.g !== 'undefined') { - local = __webpack_require__.g; - } else if (typeof self !== 'undefined') { - local = self; - } else { - try { - local = Function('return this')(); - } catch (e) { - throw new Error('polyfill failed because global object is unavailable in this environment'); - } - } - - var P = local.Promise; - - if (P) { - var promiseToString = null; - try { - promiseToString = Object.prototype.toString.call(P.resolve()); - } catch (e) { - // silently ignored - } - - if (promiseToString === '[object Promise]' && !P.cast) { - return; - } - } - - local.Promise = Promise$1; + _baseParams = filteredParams.filter(function (_ref) { + var _ref2 = _slicedToArray(_ref, 1), + key = _ref2[0]; + return _allowedParams.indexOf(key) !== -1; + }).reduce(reducer, {}); + _customConfig = filteredParams.filter(function (_ref3) { + var _ref4 = _slicedToArray(_ref3, 1), + key = _ref4[0]; + return _allowedConfig.indexOf(key) !== -1; + }).reduce(reducer, {}); } -// Strange compat.. -Promise$1.polyfill = polyfill; -Promise$1.Promise = Promise$1; - -return Promise$1; - -}))); - - - -//# sourceMappingURL=es6-promise.map - - -/***/ }), - -/***/ 379: -/***/ ((module) => { - -"use strict"; - - -var stylesInDOM = []; - -function getIndexByIdentifier(identifier) { - var result = -1; - - for (var i = 0; i < stylesInDOM.length; i++) { - if (stylesInDOM[i].identifier === identifier) { - result = i; - break; - } - } - - return result; +/** + * Get custom config set by client + * + * @returns {Object} + */ +function getCustomConfig() /*: CustomConfigT*/{ + return _objectSpread2({}, _customConfig); } -function modulesToDom(list, options) { - var idCountMap = {}; - var identifiers = []; - - for (var i = 0; i < list.length; i++) { - var item = list[i]; - var id = options.base ? item[0] + options.base : item[0]; - var count = idCountMap[id] || 0; - var identifier = "".concat(id, " ").concat(count); - idCountMap[id] = count + 1; - var indexByIdentifier = getIndexByIdentifier(identifier); - var obj = { - css: item[1], - media: item[2], - sourceMap: item[3], - supports: item[4], - layer: item[5] - }; - - if (indexByIdentifier !== -1) { - stylesInDOM[indexByIdentifier].references++; - stylesInDOM[indexByIdentifier].updater(obj); - } else { - var updater = addElementStyle(obj, options); - options.byIndex = i; - stylesInDOM.splice(i, 0, { - identifier: identifier, - updater: updater, - references: 1 - }); - } - - identifiers.push(identifier); +/** + * Check if there are missing mandatory parameters + * + * @param {Object} params + * @returns {boolean} + * @private + */ +function hasMissing(params /*: BaseParamsT*/) /*: boolean*/{ + var missing = _mandatory.filter(function (value) { + return !params[value]; + }); + if (missing.length) { + logger.error("You must define ".concat(buildList(missing))); + return true; } - - return identifiers; + return false; } -function addElementStyle(obj, options) { - var api = options.domAPI(options); - api.update(obj); - - var updater = function updater(newObj) { - if (newObj) { - if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap && newObj.supports === obj.supports && newObj.layer === obj.layer) { - return; - } - - api.update(obj = newObj); - } else { - api.remove(); - } - }; - - return updater; +/** + * Restore config to its default state + */ +function destroy() /*: void*/{ + _baseParams = {}; + _customConfig = {}; } +var Config = _objectSpread2(_objectSpread2({}, _baseConfig), {}, { + set: set, + getBaseParams: getBaseParams, + getCustomConfig: getCustomConfig, + isInitialised: isInitialised, + hasMissing: hasMissing, + destroy: destroy +}); +/* harmony default export */ const config = (Config); +;// CONCATENATED MODULE: ./src/sdk/storage/scheme.ts -module.exports = function (list, options) { - options = options || {}; - list = list || []; - var lastIdentifiers = modulesToDom(list, options); - return function update(newList) { - newList = newList || []; - - for (var i = 0; i < lastIdentifiers.length; i++) { - var identifier = lastIdentifiers[i]; - var index = getIndexByIdentifier(identifier); - stylesInDOM[index].references--; - } - - var newLastIdentifiers = modulesToDom(newList, options); - for (var _i = 0; _i < lastIdentifiers.length; _i++) { - var _identifier = lastIdentifiers[_i]; - var _index = getIndexByIdentifier(_identifier); +/** + * Field with predefined values + */ - if (stylesInDOM[_index].references === 0) { - stylesInDOM[_index].updater(); +/** + * Field containing a nested one + */ - stylesInDOM.splice(_index, 1); +/** + * Composite key, stored as a field because of IE doesn't support composite keys feature + */ +var StoreName = /*#__PURE__*/function (StoreName) { + StoreName["Queue"] = "queue"; + StoreName["ActivityState"] = "activityState"; + StoreName["GlobalParams"] = "globalParams"; + StoreName["EventDeduplication"] = "eventDeduplication"; + return StoreName; +}(StoreName || {}); +var PreferencesStoreName = /*#__PURE__*/function (PreferencesStoreName) { + PreferencesStoreName["Preferences"] = "preferences"; + return PreferencesStoreName; +}(PreferencesStoreName || {}); +var ShortStoreName = /*#__PURE__*/function (ShortStoreName) { + ShortStoreName["Queue"] = "q"; + ShortStoreName["ActivityState"] = "as"; + ShortStoreName["GlobalParams"] = "gp"; + ShortStoreName["EventDeduplication"] = "ed"; + return ShortStoreName; +}(ShortStoreName || {}); +var ShortPreferencesStoreName = /*#__PURE__*/function (ShortPreferencesStoreName) { + ShortPreferencesStoreName["Preferences"] = "p"; + return ShortPreferencesStoreName; +}(ShortPreferencesStoreName || {}); +var _queueScheme /*: StoreOptions*/ = { + keyPath: 'timestamp', + autoIncrement: false, + fields: { + url: { + key: 'u', + values: { + '/session': 1, + '/event': 2, + '/gdpr_forget_device': 3, + '/sdk_click': 4, + '/disable_third_party_sharing': 5 } - } - - lastIdentifiers = newLastIdentifiers; - }; -}; - -/***/ }), - -/***/ 569: -/***/ ((module) => { - -"use strict"; - - -var memo = {}; -/* istanbul ignore next */ - -function getTarget(target) { - if (typeof memo[target] === "undefined") { - var styleTarget = document.querySelector(target); // Special case to return head of iframe instead of iframe itself - - if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) { - try { - // This will throw an exception if access to iframe is blocked - // due to cross-origin restrictions - styleTarget = styleTarget.contentDocument.head; - } catch (e) { - // istanbul ignore next - styleTarget = null; + }, + method: { + key: 'm', + values: { + GET: 1, + POST: 2, + PUT: 3, + DELETE: 4 + } + }, + timestamp: 't', + createdAt: 'ca', + params: { + key: 'p', + keys: { + timeSpent: 'ts', + sessionLength: 'sl', + sessionCount: 'sc', + eventCount: 'ec', + lastInterval: 'li', + eventToken: 'et', + revenue: 're', + currency: 'cu', + callbackParams: 'cp', + partnerParams: 'pp' } } - - memo[target] = styleTarget; - } - - return memo[target]; -} -/* istanbul ignore next */ - - -function insertBySelector(insert, style) { - var target = getTarget(insert); - - if (!target) { - throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid."); - } - - target.appendChild(style); -} - -module.exports = insertBySelector; - -/***/ }), - -/***/ 216: -/***/ ((module) => { - -"use strict"; - - -/* istanbul ignore next */ -function insertStyleElement(options) { - var element = document.createElement("style"); - options.setAttributes(element, options.attributes); - options.insert(element, options.options); - return element; -} - -module.exports = insertStyleElement; - -/***/ }), - -/***/ 565: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -"use strict"; - - -/* istanbul ignore next */ -function setAttributesWithoutAttributes(styleElement) { - var nonce = true ? __webpack_require__.nc : 0; - - if (nonce) { - styleElement.setAttribute("nonce", nonce); } -} - -module.exports = setAttributesWithoutAttributes; - -/***/ }), - -/***/ 795: -/***/ ((module) => { - -"use strict"; - - -/* istanbul ignore next */ -function apply(styleElement, options, obj) { - var css = ""; - - if (obj.supports) { - css += "@supports (".concat(obj.supports, ") {"); - } - - if (obj.media) { - css += "@media ".concat(obj.media, " {"); +}; +var _activityStateScheme /*: StoreOptions*/ = { + keyPath: 'uuid', + autoIncrement: false, + fields: { + uuid: { + key: 'u', + values: { + unknown: '-' + } + }, + timeSpent: 'ts', + sessionLength: 'sl', + sessionCount: 'sc', + eventCount: 'ec', + lastActive: 'la', + lastInterval: 'li', + installed: { + key: 'in', + values: { + false: 0, + true: 1 + } + }, + attribution: { + key: 'at', + keys: { + adid: 'a', + tracker_token: 'tt', + tracker_name: 'tn', + network: 'nt', + campaign: 'cm', + adgroup: 'ag', + creative: 'cr', + click_label: 'cl', + state: { + key: 'st', + values: { + installed: 1, + reattributed: 2 + } + } + } + } } - - var needLayer = typeof obj.layer !== "undefined"; - - if (needLayer) { - css += "@layer".concat(obj.layer.length > 0 ? " ".concat(obj.layer) : "", " {"); +}; +var _globalParamsScheme /*: StoreOptions*/ = { + keyPath: 'keyType', + autoIncrement: false, + index: 'type', + fields: { + keyType: { + key: 'kt', + composite: ['key', 'type'] + }, + key: 'k', + value: 'v', + type: { + key: 't', + values: { + callback: 1, + partner: 2 + } + } } - - css += obj.css; - - if (needLayer) { - css += "}"; +}; +var _eventDeduplicationScheme /*: StoreOptions*/ = { + keyPath: 'internalId', + autoIncrement: true, + fields: { + internalId: 'ii', + id: 'i' } - - if (obj.media) { - css += "}"; +}; +var _preferencesScheme /*: StoreOptionsOptionalKey*/ = { + fields: { + thirdPartySharingDisabled: { + key: 'td', + keys: { + reason: { + key: 'r', + values: _defineProperty({}, REASON_GENERAL, 1) + }, + pending: { + key: 'p', + values: { + false: 0, + true: 1 + } + } + } + }, + sdkDisabled: { + key: 'sd', + keys: { + reason: { + key: 'r', + values: _defineProperty(_defineProperty({}, REASON_GENERAL, 1), REASON_GDPR, 2) + }, + pending: { + key: 'p', + values: { + false: 0, + true: 1 + } + } + } + } } - - if (obj.supports) { - css += "}"; +}; +var scheme /*: Scheme*/ = { + queue: { + name: ShortStoreName.Queue, + scheme: _queueScheme + }, + activityState: { + name: ShortStoreName.ActivityState, + scheme: _activityStateScheme + }, + globalParams: { + name: ShortStoreName.GlobalParams, + scheme: _globalParamsScheme + }, + eventDeduplication: { + name: ShortStoreName.EventDeduplication, + scheme: _eventDeduplicationScheme + }, + preferences: { + name: ShortPreferencesStoreName.Preferences, + scheme: _preferencesScheme, + permanent: true } - - var sourceMap = obj.sourceMap; - - if (sourceMap && typeof btoa !== "undefined") { - css += "\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), " */"); - } // For old IE - - /* istanbul ignore if */ - - - options.styleTagTransform(css, styleElement, options.options); +}; +function isPredefinedValuesField(field /*: Maybe*/) /*: field is StoreFieldPredefinedValues*/{ + return !!field && Object.prototype.hasOwnProperty.call(field, 'values'); } - -function removeStyleElement(styleElement) { - // istanbul ignore if - if (styleElement.parentNode === null) { - return false; - } - - styleElement.parentNode.removeChild(styleElement); +function isNestingStoreField(field /*: Maybe*/) /*: field is StoreFieldNestingFields*/{ + return !!field && Object.prototype.hasOwnProperty.call(field, 'keys'); } -/* istanbul ignore next */ - - -function domAPI(options) { - var styleElement = options.insertStyleElement(options); - return { - update: function update(obj) { - apply(styleElement, options, obj); - }, - remove: function remove() { - removeStyleElement(styleElement); - } - }; +function isCompositeKeyStoreField(field /*: Maybe*/) /*: field is StoreFieldCompositeKey*/{ + return !!field && Object.prototype.hasOwnProperty.call(field, 'composite'); +} +function isComplexStoreField(field /*: Maybe*/) /*: field is StoreFieldComplex*/{ + return !!field && typeof field !== 'string'; } -module.exports = domAPI; - -/***/ }), - -/***/ 589: -/***/ ((module) => { +/* harmony default export */ const storage_scheme = (scheme); +;// CONCATENATED MODULE: ./src/sdk/storage/scheme-map.ts -"use strict"; -/* istanbul ignore next */ -function styleTagTransform(css, styleElement) { - if (styleElement.styleSheet) { - styleElement.styleSheet.cssText = css; - } else { - while (styleElement.firstChild) { - styleElement.removeChild(styleElement.firstChild); - } - styleElement.appendChild(document.createTextNode(css)); +/** + * Cast value into it's original type + */ +function _parseValue(value /*: string*/) /*: any*/{ + // eslint-disable-line @typescript-eslint/no-explicit-any + try { + return JSON.parse(value); + } catch (e) { + return value; } } -module.exports = styleTagTransform; +/** + * Flip key/value pairs + */ +function _flipObject(obj /*: Record*/) /*: Record*/{ + return entries(obj).map(function (_ref) { + var _ref2 = _slicedToArray(_ref, 2), + key = _ref2[0], + value = _ref2[1]; + return [value, _parseValue(key)]; + }).reduce(reducer, {}); +} -/***/ }), +/** + * Flip store name definition names: + * - short key pointing the long one along with additional configuration + */ +function _flipStoreNames(obj /*: StoresConfigurationMap*/) /*: StoresConfigurationMapFlipped*/{ + var flippedConfigs /*: Array<[ShortStoreNames, StoreConfigurationFlipped]>*/ = entries(obj).map(function (_ref3 /*:: */) { + var _ref4 = _slicedToArray(_ref3 /*:: */, 2), + name = _ref4[0], + options = _ref4[1]; + var config = { + name: name, + permanent: options.permanent + }; + return [options.name, config]; + }); + return flippedConfigs.reduce(reducer, {}); +} -/***/ 529: -/***/ ((module) => { +/** + * Flip store scheme values + */ +function _flipStoreScheme(storeName /*: StoreNames*/, key /*: string*/, scheme /*: StoreFieldScheme*/) { + var values = isPredefinedValuesField(scheme) ? { + values: _flipObject(scheme.values) + } : {}; + var keys = isNestingStoreField(scheme) ? { + keys: _flipScheme(storeName, scheme.keys) + } : {}; + var composite = isCompositeKeyStoreField(scheme) ? { + composite: scheme.composite.map(function (key) { + return _getShortKey(storeName, key); + }) + } : {}; + return _objectSpread2(_objectSpread2(_objectSpread2({ + key: key + }, values), keys), composite); +} -"use strict"; -module.exports = "data:image/svg+xml;utf8, "; +/** + * Flip general scheme recursivelly + */ +function _flipScheme(storeName /*: StoreNames*/, fieldsScheme /*: StoreFields*/) { + return entries(fieldsScheme).map(function (_ref5 /*:: */) { + var _ref6 = _slicedToArray(_ref5 /*:: */, 2), + key = _ref6[0], + scheme = _ref6[1]; + return isComplexStoreField(scheme) ? [scheme.key, _flipStoreScheme(storeName, key, scheme)] : [scheme, key]; + }).reduce(reducer, {}); +} -/***/ }) +/** + * Extend base scheme with some more maps for encoding + */ +function _prepareLeft() /*: StoreScheme*/{ + var storesOptions /*: Array<[StoreNames, StoreOptionsOptionalKey]>*/ = entries(storage_scheme).map(function (_ref7 /*:: */) { + var _ref8 = _slicedToArray(_ref7 /*:: */, 2), + storeName = _ref8[0], + store = _ref8[1]; + var options /*: StoreOptionsOptionalKey*/ = { + keyPath: store.scheme.keyPath, + autoIncrement: store.scheme.autoIncrement, + index: store.scheme.index, + fields: store.scheme.fields + }; + return [storeName, options]; + }); + return storesOptions.reduce(reducer, {}); +} -/******/ }); -/************************************************************************/ -/******/ // The module cache -/******/ var __webpack_module_cache__ = {}; -/******/ -/******/ // The require function -/******/ function __webpack_require__(moduleId) { -/******/ // Check if module is in cache -/******/ var cachedModule = __webpack_module_cache__[moduleId]; -/******/ if (cachedModule !== undefined) { -/******/ return cachedModule.exports; -/******/ } -/******/ // Create a new module (and put it into the cache) -/******/ var module = __webpack_module_cache__[moduleId] = { -/******/ id: moduleId, -/******/ // no module.loaded needed -/******/ exports: {} -/******/ }; -/******/ -/******/ // Execute the module function -/******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = __webpack_modules__; -/******/ -/************************************************************************/ -/******/ /* webpack/runtime/compat get default export */ -/******/ (() => { -/******/ // getDefaultExport function for compatibility with non-harmony modules -/******/ __webpack_require__.n = (module) => { -/******/ var getter = module && module.__esModule ? -/******/ () => (module['default']) : -/******/ () => (module); -/******/ __webpack_require__.d(getter, { a: getter }); -/******/ return getter; -/******/ }; -/******/ })(); -/******/ -/******/ /* webpack/runtime/define property getters */ -/******/ (() => { -/******/ // define getter functions for harmony exports -/******/ __webpack_require__.d = (exports, definition) => { -/******/ for(var key in definition) { -/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { -/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); -/******/ } -/******/ } -/******/ }; -/******/ })(); -/******/ -/******/ /* webpack/runtime/global */ -/******/ (() => { -/******/ __webpack_require__.g = (function() { -/******/ if (typeof globalThis === 'object') return globalThis; -/******/ try { -/******/ return this || new Function('return this')(); -/******/ } catch (e) { -/******/ if (typeof window === 'object') return window; -/******/ } -/******/ })(); -/******/ })(); -/******/ -/******/ /* webpack/runtime/hasOwnProperty shorthand */ -/******/ (() => { -/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) -/******/ })(); -/******/ -/******/ /* webpack/runtime/jsonp chunk loading */ -/******/ (() => { -/******/ __webpack_require__.b = document.baseURI || self.location.href; -/******/ -/******/ // object to store loaded and loading chunks -/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched -/******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded -/******/ var installedChunks = { -/******/ 91: 0, -/******/ 57: 0 -/******/ }; -/******/ -/******/ // no chunk on demand loading -/******/ -/******/ // no prefetching -/******/ -/******/ // no preloaded -/******/ -/******/ // no HMR -/******/ -/******/ // no HMR manifest -/******/ -/******/ // no on chunks loaded -/******/ -/******/ // no jsonp function -/******/ })(); -/******/ -/******/ /* webpack/runtime/nonce */ -/******/ (() => { -/******/ __webpack_require__.nc = undefined; -/******/ })(); -/******/ -/************************************************************************/ -var __webpack_exports__ = {}; -// This entry need to be wrapped in an IIFE because it need to be in strict mode. -(() => { -"use strict"; - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - "default": () => (/* binding */ main) -}); +/** + * Prepare scheme for decoding + */ +function _prepareRight() /*: StoreScheme*/{ + var storesOptionsEncoded /*: Array<[StoreNames, StoreOptionsOptionalKey]>*/ = entries(Left).map(function (_ref9) { + var _ref10 = _slicedToArray(_ref9, 2), + storeName = _ref10[0], + storeScheme = _ref10[1]; + var options /*: StoreOptionsOptionalKey*/ = { + keyPath: _getShortKey(storeName, storeScheme.keyPath), + autoIncrement: storeScheme.autoIncrement, + index: _getShortKey(storeName, storeScheme.index), + fields: _flipScheme(storeName, storeScheme.fields) + }; + return [storeName, options]; + }); + return storesOptionsEncoded.reduce(reducer, {}); +} -;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/defineProperty.js -function _defineProperty(obj, key, value) { - if (key in obj) { - Object.defineProperty(obj, key, { - value: value, - enumerable: true, - configurable: true, - writable: true - }); - } else { - obj[key] = value; - } - return obj; +/** + * Get available values for encoding + */ +function _getValuesMap() /*: Record*/{ + // all pairs of predefined keys and values such as {GET: 1} + return entries(storage_scheme).reduce(function (acc, _ref11) { + var _ref12 = _slicedToArray(_ref11, 2), + store = _ref12[1]; + return acc.concat(store.scheme.fields); + }, []).map(function (scheme) { + return values(scheme).filter(isPredefinedValuesField).map(function (map) { + return entries(map.values); + }).reduce(function (acc, map) { + return acc.concat(map); + }, []); + }).reduce(function (acc, map) { + return acc.concat(map); + }, []).reduce(reducer, {}); } -;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/objectSpread2.js -function ownKeys(object, enumerableOnly) { - var keys = Object.keys(object); - if (Object.getOwnPropertySymbols) { - var symbols = Object.getOwnPropertySymbols(object); - enumerableOnly && (symbols = symbols.filter(function (sym) { - return Object.getOwnPropertyDescriptor(object, sym).enumerable; - })), keys.push.apply(keys, symbols); - } - return keys; -} -function _objectSpread2(target) { - for (var i = 1; i < arguments.length; i++) { - var source = null != arguments[i] ? arguments[i] : {}; - i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { - _defineProperty(target, key, source[key]); - }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { - Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); - }); +/** + * Get short key version of a specified key + */ +function _getShortKey(storeName /*: StoreNames*/, key /*: Maybe*/) /*: Maybe*/{ + if (!key) { + return undefined; } - return target; -} -;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js -function _objectWithoutPropertiesLoose(source, excluded) { - if (source == null) return {}; - var target = {}; - var sourceKeys = Object.keys(source); - var key, i; - for (i = 0; i < sourceKeys.length; i++) { - key = sourceKeys[i]; - if (excluded.indexOf(key) >= 0) continue; - target[key] = source[key]; + var map = storage_scheme[storeName].scheme.fields[key]; + if (isComplexStoreField(map)) { + return map.key; } - return target; + return map || key; } -;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js -function _objectWithoutProperties(source, excluded) { - if (source == null) return {}; - var target = _objectWithoutPropertiesLoose(source, excluded); - var key, i; - if (Object.getOwnPropertySymbols) { - var sourceSymbolKeys = Object.getOwnPropertySymbols(source); - for (i = 0; i < sourceSymbolKeys.length; i++) { - key = sourceSymbolKeys[i]; - if (excluded.indexOf(key) >= 0) continue; - if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; - target[key] = source[key]; - } - } - return target; -} -;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js -function _arrayWithHoles(arr) { - if (Array.isArray(arr)) return arr; -} -;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js -function _iterableToArrayLimit(arr, i) { - var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; - if (_i == null) return; - var _arr = []; - var _n = true; - var _d = false; - var _s, _e; - try { - for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { - _arr.push(_s.value); - if (i && _arr.length === i) break; - } - } catch (err) { - _d = true; - _e = err; - } finally { - try { - if (!_n && _i["return"] != null) _i["return"](); - } finally { - if (_d) throw _e; - } - } - return _arr; +/** + * Get store names and their general configuration (if store is permanent or not) + */ +function _getStoreNames() /*: StoresConfigurationMap*/{ + var storeNames /*: Array<[StoreNames, StoreConfiguration]>*/ = entries(storage_scheme).map(function (_ref13) { + var _ref14 = _slicedToArray(_ref13, 2), + name = _ref14[0], + store = _ref14[1]; + var config = { + name: store.name, + permanent: store.permanent + }; + return [name, config]; + }); + return storeNames.reduce(reducer, {}); } -;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js -function _arrayLikeToArray(arr, len) { - if (len == null || len > arr.length) len = arr.length; - for (var i = 0, arr2 = new Array(len); i < len; i++) { - arr2[i] = arr[i]; +var Left = _prepareLeft(); +var Right = _prepareRight(); +var Values = _getValuesMap(); +var StoreNamesAndConfigs = _getStoreNames(); +/* harmony default export */ const scheme_map = ({ + left: Left, + right: Right, + values: Values, + storeNames: { + left: StoreNamesAndConfigs, + right: _flipStoreNames(StoreNamesAndConfigs) } - return arr2; -} -;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js +}); +;// CONCATENATED MODULE: ./src/sdk/storage/types.ts -function _unsupportedIterableToArray(o, minLen) { - if (!o) return; - if (typeof o === "string") return _arrayLikeToArray(o, minLen); - var n = Object.prototype.toString.call(o).slice(8, -1); - if (n === "Object" && o.constructor) n = o.constructor.name; - if (n === "Map" || n === "Set") return Array.from(o); - if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); -} -;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/nonIterableRest.js -function _nonIterableRest() { - throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); +var KeyRangeCondition = /*#__PURE__*/function (KeyRangeCondition) { + KeyRangeCondition["LowerBound"] = "lowerBound"; + KeyRangeCondition["UpperBound"] = "upperBound"; + return KeyRangeCondition; +}(KeyRangeCondition || {}); +function valueIsRecord(value /*: StoredValue | Record*/) /*: value is Record*/{ + return isObject(value); } -;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/slicedToArray.js +;// CONCATENATED MODULE: ./src/sdk/storage/converter.ts -function _slicedToArray(arr, i) { - return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); -} -;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js -function _arrayWithoutHoles(arr) { - if (Array.isArray(arr)) return _arrayLikeToArray(arr); -} -;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/iterableToArray.js -function _iterableToArray(iter) { - if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); -} -;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js -function _nonIterableSpread() { - throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); -} -;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js +var Direction = /*#__PURE__*/function (Direction) { + Direction["right"] = "right"; + Direction["left"] = "left"; + return Direction; +}(Direction || {}); +/** + * Get value from the map if available + */ +function _getValue(map /*: Nullable>*/, value /*: StoredValue*/) /*: StoredValue*/{ + return map ? map[value] !== undefined ? map[value] : value : value; +} -function _toConsumableArray(arr) { - return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); +/** + * Convert key and value by defined scheme + */ +function _convert(storeName /*: StoreNameType*/, dir /*: Direction*/, key /*: string*/, value /*: StoredValue | StoredRecord*/, scheme /*: StoreFieldScheme*/) /*: [string, unknown]*/{ + if (!scheme) { + return [key, value]; + } + var encodedKey = isComplexStoreField(scheme) ? scheme.key : scheme; + if (valueIsRecord(value)) { + var keys = isNestingStoreField(scheme) ? scheme.keys : null; + return [encodedKey, convertRecord(storeName, dir, value, keys)]; + } + var valuesMap = isPredefinedValuesField(scheme) ? scheme.values : null; + return [encodedKey, _getValue(valuesMap, value)]; } -;// CONCATENATED MODULE: ./src/sdk/constants.js -var SECOND = 1000; -var MINUTE = SECOND * 60; -var HOUR = MINUTE * 60; -var DAY = HOUR * 24; -var REASON_GENERAL = 'general'; -var REASON_GDPR = 'gdpr'; -var HTTP_ERRORS = { - 'TRANSACTION_ERROR': 'XHR transaction failed due to an error', - 'SERVER_MALFORMED_RESPONSE': 'Response from server is malformed', - 'SERVER_INTERNAL_ERROR': 'Internal error occurred on the server', - 'SERVER_CANNOT_PROCESS': 'Server was not able to process the request, probably due to error coming from the client', - 'NO_CONNECTION': 'No internet connectivity', - 'SKIP': 'Skipping slower attempt', - 'MISSING_URL': 'Url is not provided' -}; -var STORAGE_TYPES = { - NO_STORAGE: 'noStorage', - INDEXED_DB: 'indexedDB', - LOCAL_STORAGE: 'localStorage' -}; -var ENDPOINTS = { - default: { - endpointName: 'Default', - app: 'https://app.adjust.com', - gdpr: 'https://gdpr.adjust.com' - }, - india: { - endpointName: 'Indian', - app: 'https://app.adjust.net.in', - gdpr: 'https://gdpr.adjust.net.in' - }, - china: { - endpointName: 'Chinese', - app: 'https://app.adjust.world', - gdpr: 'https://gdpr.adjust.world' - }, - EU: { - endpointName: 'EU', - app: 'https://app.eu.adjust.com', - gdpr: 'https://gdpr.eu.adjust.com' - }, - TR: { - endpointName: 'TR', - app: 'https://app.tr.adjust.com', - gdpr: 'https://gdpr.tr.adjust.com' - }, - US: { - endpointName: 'US', - app: 'https://app.us.adjust.com', - gdpr: 'https://gdpr.us.adjust.com' - } -}; -;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/typeof.js -function _typeof(obj) { - "@babel/helpers - typeof"; - - return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { - return typeof obj; - } : function (obj) { - return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; - }, _typeof(obj); -} -;// CONCATENATED MODULE: ./src/sdk/utilities.ts - +/** + * Convert record by defined direction and scheme + */ +/** + * Convert record by defined direction and scheme + */ /** - * Build human readable list + * Convert record by defined direction and scheme + * Note: the function signature is duplicated because TS hides function implementation */ -function buildList(array /*: Array*/) /*: string*/{ - if (!array.length) { - return ''; - } - if (array.length === 1) { - return "".concat(array[0]); +function convertRecord(storeName /*: StoreNameType*/, dir /*: Direction*/, record /*: Maybe*/, scheme /*: StoreFields*/) /*: Maybe*/{ + if (!record) { + return undefined; } - var lastIndex = array.length - 1; - var firstPart = array.slice(0, lastIndex).join(', '); - return "".concat(firstPart, " and ").concat(array[lastIndex]); + var _scheme /*: StoreFields*/ = scheme || scheme_map[dir][convertStoreName(storeName, Direction.right)].fields; + return entries(record).map(function (_ref) { + var _ref2 = _slicedToArray(_ref, 2), + key = _ref2[0], + value = _ref2[1]; + return _convert(storeName, dir, key, value, _scheme[key]); + }).reduce(function (acc, _ref3) { + var _ref4 = _slicedToArray(_ref3, 2), + key = _ref4[0], + value = _ref4[1]; + return _objectSpread2(_objectSpread2({}, acc), {}, _defineProperty({}, key, value)); + }, {}); } /** - * Check if object is empty + * Convert records by defined direction */ -function isEmpty(obj /*: Record*/) /*: boolean*/{ - return !Object.keys(obj).length && obj.constructor === Object; +function convertRecords(storeName /*: StoreNameType*/, dir /*: Direction*/) /*: Array*/{ + var records /*: Array*/ = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : []; + return records.map(function (record) { + return convertRecord(storeName, dir, record); + }); } /** - * Check if value is object + * Convert values by defined direction */ -function isObject(obj /*: any*/) /*: boolean*/{ - // eslint-disable-line @typescript-eslint/no-explicit-any - return _typeof(obj) === 'object' && obj !== null && !(obj instanceof Array); +function convertValues(storeName /*: StoreNameType*/, dir /*: Direction*/, target /*: StoredRecordId*/) /*: StoredValue | Array*/{ + var scheme /*: StoreOptions*/ = scheme_map[dir][convertStoreName(storeName, Direction.right)]; + var keyPathScheme = scheme.fields[scheme.keyPath]; + var values = target instanceof Array ? target.slice() : [target]; + var keys = isCompositeKeyStoreField(keyPathScheme) ? keyPathScheme.composite : [scheme.keyPath]; + var converted = keys.map(function (key /*: string*/, index /*: number*/) { + var field = scheme.fields[key]; + var predefinedValuesMap = isPredefinedValuesField(field) ? field.values : null; + return _getValue(predefinedValuesMap, values[index]); + }); + return converted.length === 1 ? converted[0] : converted; } /** - * Check if string is valid json + * Encode value by defined scheme */ -function isValidJson(string /*: string*/) /*: boolean*/{ - try { - var json = JSON.parse(string); - return isObject(json); - } catch (e) { - return false; - } +function encodeValue(target /*: StoredValue*/) /*: StoredValue*/{ + return scheme_map.values[target] || target; } /** - * Find index of an element in the list and return it + * Convert store name by defined direction */ -function findIndex /*:: >*/(array /*: Array*/, key /*: K | Array*/, target /*: T*/) /*: number*/{ - function isEqual(item /*: T*/) { - return Array.isArray(key) ? key.every(function (k) { - return item[k] === target[k]; - }) : item[key] === target; - } - for (var i = 0; i < array.length; i += 1) { - if (isEqual(array[i])) { - return i; - } - } - return -1; +function convertStoreName(storeName /*: StoreNameType*/, dir /*: Direction*/) /*: StoreNameType*/{ + return (scheme_map.storeNames[dir][storeName] || {}).name || storeName; } /** - * Convert array with key/value item structure into key/value pairs object + * Decode error message by replacing short store name with long readable one */ -function convertToMap /*:: */() /*: Record*/{ - var array /*: Array<{ key: string, value: T }>*/ = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; - return array.reduce(function (acc, o) { - return _objectSpread2(_objectSpread2({}, acc), {}, _defineProperty({}, o.key, o.value)); - }, {}); +function decodeErrorMessage(storeName /*: ShortStoreNames*/, error /*: Error*/) /*: Error*/{ + return { + name: error.name, + message: error.message.replace("\"".concat(storeName, "\""), convertStoreName(storeName, Direction.right)) + }; } -/** - * Find intersecting values of provided array against given values - */ -function intersection /*:: */() /*: Array*/{ - var array /*: Array*/ = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; - var values /*: Array*/ = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; - return array.filter(function (item) { - return values.indexOf(item) !== -1; - }); +;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/classCallCheck.js +function _classCallCheck(instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function"); + } } +;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/createClass.js +function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, toPropertyKey(descriptor.key), descriptor); + } +} +function _createClass(Constructor, protoProps, staticProps) { + if (protoProps) _defineProperties(Constructor.prototype, protoProps); + if (staticProps) _defineProperties(Constructor, staticProps); + Object.defineProperty(Constructor, "prototype", { + writable: false + }); + return Constructor; +} +;// CONCATENATED MODULE: ./src/sdk/time.js /** - * Check if particular url is a certain request + * Prepend zero to be used in certain format + * + * @param {number} value + * @param {number} power + * @returns {string} + * @private */ -function isRequest(url /*: string*/, requestName /*: string*/) /*: boolean*/{ - var regex = new RegExp("\\/".concat(requestName, "(\\/.*|\\?.*){0,1}$")); - return regex.test(url); +function _prependZero(value /*: number*/) /*: string*/{ + var power /*: number*/ = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1; + var formatted = value + ''; + for (var i = 1; i <= power; i += 1) { + if (value < Math.pow(10, i)) { + formatted = "0".concat(formatted); + } + } + return formatted; } /** - * Extract the host name for the url + * Get formatted date (YYYY-MM-DD) + * + * @param date + * @returns {string} + * @private */ -function getHostName() /*: string*/{ - var url = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; - return url.replace(/^(http(s)*:\/\/)*(www\.)*/, '').split('/')[0].split('?')[0]; +function _getDate(date /*: Date*/) /*: string*/{ + var day = _prependZero(date.getDate()); + var month = _prependZero(date.getMonth() + 1); + var year = date.getFullYear(); + return [year, month, day].join('-'); } /** - * Transform array entry into object key:value pair entry + * Get formatted hours, minutes, seconds and milliseconds (HH:mm:ss.SSS) + * + * @param {Date} date + * @returns {string} + * @private */ -function reducer /*:: */(acc /*: Record*/, _ref /*:: */) /*: Record*/{ - var _ref2 = _slicedToArray(_ref /*:: */, 2), - key = _ref2[0], - value = _ref2[1]; - return _objectSpread2(_objectSpread2({}, acc), {}, _defineProperty({}, key, value)); +function _getTime(date /*: Date*/) /*: string*/{ + var hours = _prependZero(date.getHours(), 1); + var minutes = _prependZero(date.getMinutes()); + var seconds = _prependZero(date.getSeconds()); + var milliseconds = _prependZero(date.getMilliseconds(), 2); + return [hours, minutes, seconds].join(':') + '.' + milliseconds; } /** - * Extracts object entries in the [key, value] format + * Get formatted timezone (ZZ) + * + * @param {Date} date + * @returns {string} + * @private */ -function entries /*:: */(object /*: Record*/) /*: Array<[K, T]>*/{ - return Object.keys(object).map(function (key /*: K*/) { - return [key, object[key]]; - }); +function _getTimezone(date /*: Date*/) /*: string*/{ + var offsetInMinutes = date.getTimezoneOffset(); + var hoursOffset = _prependZero(Math.floor(Math.abs(offsetInMinutes) / 60)); + var minutesOffset = _prependZero(Math.abs(offsetInMinutes) % 60); + var sign = offsetInMinutes > 0 ? '-' : '+'; + return sign + hoursOffset + minutesOffset; } /** - * Extracts object values + * Get the timestamp in the backend format + * + * @param {number=} timestamp + * @returns {string} */ -function values /*:: */(object /*: Record*/) /*: Array*/{ - return Object.keys(object).map(function (key /*: string*/) { - return object[key]; - }); +function getTimestamp(timestamp /*: number*/) /*: string*/{ + var d = timestamp ? new Date(timestamp) : new Date(); + var date = _getDate(d); + var time = _getTime(d); + var timezone = _getTimezone(d); + return "".concat(date, "T").concat(time, "Z").concat(timezone); } /** - * Check if value is empty in any way (empty object, false value, zero) and use it as predicate method + * Calculate time passed between two dates in milliseconds + * + * @param {number} d1 + * @param {number} d2 + * @returns {number} */ -function isEmptyEntry(value /*: any*/) /*: boolean*/{ - // eslint-disable-line @typescript-eslint/no-explicit-any - if (isObject(value)) { - return !isEmpty(value); - } - return !!value || value === 0; -} -function isLocalStorageSupported() /*: boolean*/{ - try { - var uid = new Date().toString(); - var storage = window.localStorage; - storage.setItem(uid, uid); - var result = storage.getItem(uid) === uid; - storage.removeItem(uid); - var support = !!(result && storage); - return support; - } catch (e) { - return false; +function timePassed(d1 /*: number*/, d2 /*: number*/) /*: number*/{ + if (isNaN(d1) || isNaN(d2)) { + return 0; } + return Math.abs(d2 - d1); } -;// CONCATENATED MODULE: ./src/sdk/globals.js -/*:: declare var __ADJUST__NAMESPACE: string*/ -/*:: declare var __ADJUST__SDK_VERSION: string*/ -/*:: declare var process: {| - env: {| - NODE_ENV: 'development' | 'production' | 'test' - |} -|}*/ -var Globals = { - namespace: "adjust-sdk" || 0, - version: "5.6.0" || 0, - env: "production" -}; -/* harmony default export */ const globals = (Globals); -;// CONCATENATED MODULE: ./src/sdk/logger.js +;// CONCATENATED MODULE: ./src/sdk/activity-state.js + +/*:: // +import { type UrlT, type ActivityStateMapT, type AttributionMapT, type CommonRequestParams } from './types';*/ + + -var _levels2; -/*:: import { type LogOptionsT } from './types';*/ -/*:: type LogLevelT = $PropertyType*/ -/*:: type MethodNameT = 'log' | 'info' | 'error' | 'warn'*/ -var LEVEL_NONE = 'none'; -var LEVEL_ERROR = 'error'; -var LEVEL_WARNING = 'warning'; -var LEVEL_INFO = 'info'; -var LEVEL_VERBOSE = 'verbose'; /** - * Logger levels - * - none -> nothing is printed to the console - * - error -> prints only error - * - info -> prints info and error - * - verbose -> prints log, info and error + * Reference to the activity state * * @type {Object} * @private */ -var _levels = (_levels2 = {}, _defineProperty(_levels2, LEVEL_NONE, -1), _defineProperty(_levels2, LEVEL_ERROR, 0), _defineProperty(_levels2, LEVEL_WARNING, 1), _defineProperty(_levels2, LEVEL_INFO, 2), _defineProperty(_levels2, LEVEL_VERBOSE, 3), _levels2); +var _activityState /*: ActivityStateMapT*/ = {}; /** - * Spaces placed after log level tag in console to align messages. + * Started flag, if activity state has been initiated * - * @type {Object} + * @type {boolean} * @private */ -var _spaces = { - 'log': ' ', - 'info': ' ', - 'warn': ' ', - 'error': '' -}; +var _started /*: boolean*/ = false; /** - * Default logger level per environment + * Active flag, if in foreground * - * @type {Object} + * @type {boolean} * @private */ -var _envLogLevels = { - development: LEVEL_VERBOSE, - production: LEVEL_ERROR, - test: LEVEL_VERBOSE -}; +var _active /*: boolean*/ = false; /** - * Current logger level + * Get current activity state + * + * @returns {Object} */ -var _level = _getDefaultLogLevel(); +function currentGetter() /*: ActivityStateMapT*/{ + return _started ? _objectSpread2({}, _activityState) : {}; +} /** - * Optional output container to display logs for easier debugging + * Set current activity state * - * @type {string} - * @private + * @param {Object} params */ -var _output = ''; +function currentSetter() { + var params /*: ActivityStateMapT*/ = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + _activityState = _started ? _objectSpread2({}, params) : {}; +} /** - * Get default logger error per environment and fallback to error level when unknown env + * Initiate in-memory activity state * - * @returns {string} - * @private + * @param {Object} params */ -function _getDefaultLogLevel() /*: LogLevelT*/{ - return _envLogLevels[globals.env] || LEVEL_ERROR; +function init(params /*: ActivityStateMapT*/) { + _started = true; + currentSetter(params); } /** - * Set logger level, fallback to default log level + * Check if activity state is started * - * @param {string=} logLevel - * @param {string=} logOutput + * @returns {boolean} */ -function setLogLevel(logLevel /*: LogLevelT*/, logOutput /*: string*/) /*: void*/{ - var exists = !logLevel || Object.keys(_levels).indexOf(logLevel) !== -1; - if (!exists) { - _log('error', 'error', 'You must set one of the available log levels: verbose, info, warning, error or none'); - return; - } - _level = logLevel || _getDefaultLogLevel(); - _output = logOutput || _output; - _log('info', logLevel, "Log level set to ".concat(_level)); +function isStarted() { + return _started; } /** - * Output the message to the console + * Update last active point * - * @param {string} methodName - * @param {string} logLevel - * @param {Array} args * @private */ -function _log(methodName /*: MethodNameT*/, logLevel /*: LogLevelT*/) /*: void*/{ - var _console; - if (_levels[_level] < _levels[logLevel]) { +function updateLastActive() /*: void*/{ + if (!_started) { return; } - var time = new Date().toISOString(); - var spaces = _spaces[methodName]; - var messagePrefix = ["[".concat(globals.namespace, "]"), time, "".concat(methodName.toUpperCase(), ":").concat(spaces)]; - var outputContainer = _output ? document.querySelector(_output) : null; - for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) { - args[_key - 2] = arguments[_key]; - } - (_console = console)[methodName].apply(_console, messagePrefix.concat(args)); // eslint-disable-line - - if (outputContainer) { - outputContainer.textContent += "".concat(messagePrefix.join(' '), " ").concat(args.map(function (m) { - return isObject(m) ? JSON.stringify(m) : m; - }).join(' '), "\n"); - outputContainer.scrollTop = outputContainer.scrollHeight; - } + _activityState.lastInterval = _getLastInterval(); + _activityState.lastActive = Date.now(); } /** - * Apply predefined log level and return log method + * Update activity state with new params * - * @param {string} name - * @param {string} logLevel - * @returns {Function: (Array) => void} + * @param {Object} params * @private */ -function _applyLevel(name /*: MethodNameT*/, logLevel /*: LogLevelT*/) { - return function () { - for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { - args[_key2] = arguments[_key2]; - } - _log.apply(void 0, [name, logLevel].concat(args)); - }; +function _update(params /*: ActivityStateMapT*/) /*: void*/{ + _activityState = _objectSpread2(_objectSpread2({}, _activityState), params); } -var Logger = { - setLogLevel: setLogLevel, - log: _applyLevel('log', LEVEL_VERBOSE), - info: _applyLevel('info', LEVEL_INFO), - warn: _applyLevel('warn', LEVEL_WARNING), - error: _applyLevel('error', LEVEL_ERROR) -}; -/* harmony default export */ const logger = (Logger); -;// CONCATENATED MODULE: ./src/sdk/config.js - - - -/*:: // -import { type BaseParamsT, type CustomConfigT, type InitOptionsT, type BaseParamsListT, type BaseParamsMandatoryListT, type CustomConfigListT } from './types';*/ - +/** + * Set active flag to true when going foreground + */ +function toForeground() /*: void*/{ + _active = true; +} +/** + * Set active flag to false when going background + */ +function toBackground() /*: void*/{ + _active = false; +} /** - * Base parameters set by client - * - app token - * - environment - * - default tracker - * - external device ID + * Get time offset from the last active point * - * @type {Object} + * @returns {number} * @private */ -var _baseParams /*: BaseParamsT*/ = {}; +function _getOffset() /*: number*/{ + var lastActive = _activityState.lastActive; + return Math.round(timePassed(lastActive, Date.now()) / SECOND); +} /** - * Custom config set by client - * - url override - * - event deduplication list limit + * Get time spent with optional offset from last point * - * @type {Object} + * @returns {number} * @private */ -var _customConfig /*: CustomConfigT*/ = {}; +function _getTimeSpent() /*: number*/{ + return (_activityState.timeSpent || 0) + (_active ? _getOffset() : 0); +} /** - * Mandatory fields to set for sdk initialization + * Get session length with optional offset from last point * - * @type {string[]} + * @returns {number} * @private */ -var _mandatory /*: BaseParamsMandatoryListT*/ = ['appToken', 'environment']; +function _getSessionLength() /*: number*/{ + var lastActive = _activityState.lastActive; + var withinWindow = timePassed(lastActive, Date.now()) < config.sessionWindow; + var withOffset = _active || !_active && withinWindow; + return (_activityState.sessionLength || 0) + (withOffset ? _getOffset() : 0); +} /** - * Allowed params to be sent with each request + * Get total number of sessions so far * - * @type {string[]} + * @returns {number} * @private */ -var _allowedParams /*: BaseParamsListT*/ = [].concat(_mandatory, ['defaultTracker', 'externalDeviceId']); +function _getSessionCount() /*: number*/{ + return _activityState.sessionCount || 0; +} /** - * Allowed configuration overrides + * Get total number of events so far * - * @type {string[]} + * @returns {number} * @private */ -var _allowedConfig /*: CustomConfigListT*/ = ['customUrl', 'dataResidency', 'urlStrategy', 'eventDeduplicationListLimit', 'namespace']; +function _getEventCount() /*: number*/{ + return _activityState.eventCount || 0; +} /** - * Global configuration object used across the sdk + * Get time passed since last activity was recorded * - * @type {{ - * namespace: string, - * version: string, - * sessionWindow: number, - * sessionTimerWindow: number, - * requestValidityWindow: number - * }} + * @returns {number} + * @private */ -var _baseConfig = { - sessionWindow: 30 * MINUTE, - sessionTimerWindow: 60 * SECOND, - requestValidityWindow: 28 * DAY -}; +function _getLastInterval() /*: number*/{ + var lastActive = _activityState.lastActive; + if (lastActive) { + return Math.round(timePassed(lastActive, Date.now()) / SECOND); + } + return -1; +} /** - * Check of configuration has been initialized - * - * @returns {boolean} + * Initiate session params and go to foreground */ -function isInitialised() /*: boolean*/{ - return _mandatory.reduce(function (acc, key) { - return acc && !!_baseParams[key]; - }, true); +function initParams() /*: void*/{ + updateSessionOffset(); + toForeground(); } /** - * Get base params set by client + * Get activity state params that are sent with each request * * @returns {Object} */ -function getBaseParams() /*: BaseParamsT*/{ - return _objectSpread2({}, _baseParams); +function getParams(url /*: UrlT*/) /*: ?CommonRequestParams*/{ + if (!_started) { + return null; + } + var lastInterval = _activityState.lastInterval >= 0 ? _activityState.lastInterval : 0; + var baseParams /*: CommonRequestParams*/ = { + timeSpent: _activityState.timeSpent || 0, + sessionLength: _activityState.sessionLength || 0, + sessionCount: _activityState.sessionCount || 1, + lastInterval: lastInterval || 0 + }; + if (url && isRequest(url, 'event')) { + baseParams.eventCount = _activityState.eventCount; + } + return baseParams; } /** - * Set base params and custom config for the sdk to run + * Update activity state parameters depending on the endpoint which has been run * - * @param {Object} options + * @param {string} url + * @param {boolean=false} auto */ -function set(options /*: InitOptionsT*/) /*: void*/{ - if (hasMissing(options)) { +function updateParams(url /*: string*/, auto /*: boolean*/) /*: void*/{ + if (!_started) { return; } - var filteredParams = [].concat(_toConsumableArray(_allowedParams), _allowedConfig).filter(function (key) { - return !!options[key]; - }).map(function (key) { - return [key, options[key]]; - }); - _baseParams = filteredParams.filter(function (_ref) { - var _ref2 = _slicedToArray(_ref, 1), - key = _ref2[0]; - return _allowedParams.indexOf(key) !== -1; - }).reduce(reducer, {}); - _customConfig = filteredParams.filter(function (_ref3) { - var _ref4 = _slicedToArray(_ref3, 1), - key = _ref4[0]; - return _allowedConfig.indexOf(key) !== -1; - }).reduce(reducer, {}); + var params = {}; + params.timeSpent = _getTimeSpent(); + params.sessionLength = _getSessionLength(); + if (isRequest(url, 'session')) { + params.sessionCount = _getSessionCount() + 1; + } + if (isRequest(url, 'event')) { + params.eventCount = _getEventCount() + 1; + } + _update(params); + if (!auto) { + updateLastActive(); + } } /** - * Get custom config set by client - * - * @returns {Object} + * Update installed flag - first session has been finished */ -function getCustomConfig() /*: CustomConfigT*/{ - return _objectSpread2({}, _customConfig); +function updateInstalled() /*: void*/{ + if (!_started) { + return; + } + if (_activityState.installed) { + return; + } + _update({ + installed: true + }); } /** - * Check if there are missing mandatory parameters - * - * @param {Object} params - * @returns {boolean} - * @private + * Update session params which depend on the time offset since last measure point */ -function hasMissing(params /*: BaseParamsT*/) /*: boolean*/{ - var missing = _mandatory.filter(function (value) { - return !params[value]; - }); - if (missing.length) { - logger.error("You must define ".concat(buildList(missing))); - return true; +function updateSessionOffset() /*: void*/{ + if (!_started) { + return; } - return false; + var timeSpent = _getTimeSpent(); + var sessionLength = _getSessionLength(); + _update({ + timeSpent: timeSpent, + sessionLength: sessionLength + }); + updateLastActive(); } /** - * Restore config to its default state + * Update session length */ -function destroy() /*: void*/{ - _baseParams = {}; - _customConfig = {}; +function updateSessionLength() /*: void*/{ + if (!_started) { + return; + } + var sessionLength = _getSessionLength(); + _update({ + sessionLength: sessionLength + }); + updateLastActive(); } -var Config = _objectSpread2(_objectSpread2({}, _baseConfig), {}, { - set: set, - getBaseParams: getBaseParams, - getCustomConfig: getCustomConfig, - isInitialised: isInitialised, - hasMissing: hasMissing, - destroy: destroy -}); -/* harmony default export */ const config = (Config); -;// CONCATENATED MODULE: ./src/sdk/storage/scheme.ts -var _values2; +/** + * Reset time spent and session length to zero + */ +function resetSessionOffset() /*: void*/{ + if (!_started) { + return; + } + _update({ + timeSpent: 0, + sessionLength: 0 + }); +} -var StoreName; -(function (StoreName) { - StoreName["Queue"] = "queue"; - StoreName["ActivityState"] = "activityState"; - StoreName["GlobalParams"] = "globalParams"; - StoreName["EventDeduplication"] = "eventDeduplication"; -})(StoreName || (StoreName = {})); -var PreferencesStoreName; -(function (PreferencesStoreName) { - PreferencesStoreName["Preferences"] = "preferences"; -})(PreferencesStoreName || (PreferencesStoreName = {})); -var ShortStoreName; -(function (ShortStoreName) { - ShortStoreName["Queue"] = "q"; - ShortStoreName["ActivityState"] = "as"; - ShortStoreName["GlobalParams"] = "gp"; - ShortStoreName["EventDeduplication"] = "ed"; -})(ShortStoreName || (ShortStoreName = {})); -var ShortPreferencesStoreName; -(function (ShortPreferencesStoreName) { - ShortPreferencesStoreName["Preferences"] = "p"; -})(ShortPreferencesStoreName || (ShortPreferencesStoreName = {})); -var _queueScheme /*: StoreOptions*/ = { - keyPath: 'timestamp', - autoIncrement: false, - fields: { - url: { - key: 'u', - values: { - '/session': 1, - '/event': 2, - '/gdpr_forget_device': 3, - '/sdk_click': 4, - '/disable_third_party_sharing': 5 - } - }, - method: { - key: 'm', - values: { - GET: 1, - POST: 2, - PUT: 3, - DELETE: 4 - } - }, - timestamp: 't', - createdAt: 'ca', - params: { - key: 'p', - keys: { - timeSpent: 'ts', - sessionLength: 'sl', - sessionCount: 'sc', - eventCount: 'ec', - lastInterval: 'li', - eventToken: 'et', - revenue: 're', - currency: 'cu', - callbackParams: 'cp', - partnerParams: 'pp' - } - } +/** + * Destroy current activity state + */ +function activity_state_destroy() /*: void*/{ + _activityState = {}; + _started = false; + _active = false; +} +function getAttribution() /*: AttributionMapT | null*/{ + if (!_started) { + return null; + } + if (!_activityState.attribution) { + logger.log('No attribution data yet'); + return null; } + return _activityState.attribution; +} +function getWebUUID() /*: string*/{ + if (!_started) { + return null; + } + return _activityState.uuid; +} +var ActivityState = { + get current() { + return currentGetter(); + }, + set current(value) { + currentSetter(value); + }, + init: init, + isStarted: isStarted, + toForeground: toForeground, + toBackground: toBackground, + initParams: initParams, + getParams: getParams, + updateParams: updateParams, + updateInstalled: updateInstalled, + updateSessionOffset: updateSessionOffset, + updateSessionLength: updateSessionLength, + resetSessionOffset: resetSessionOffset, + updateLastActive: updateLastActive, + destroy: activity_state_destroy, + getAttribution: getAttribution, + getWebUUID: getWebUUID }; -var _activityStateScheme /*: StoreOptions*/ = { - keyPath: 'uuid', - autoIncrement: false, - fields: { - uuid: { - key: 'u', - values: { - unknown: '-' - } - }, - timeSpent: 'ts', - sessionLength: 'sl', - sessionCount: 'sc', - eventCount: 'ec', - lastActive: 'la', - lastInterval: 'li', - installed: { - key: 'in', - values: { - false: 0, - true: 1 - } - }, - attribution: { - key: 'at', - keys: { - adid: 'a', - tracker_token: 'tt', - tracker_name: 'tn', - network: 'nt', - campaign: 'cm', - adgroup: 'ag', - creative: 'cr', - click_label: 'cl', - state: { - key: 'st', - values: { - installed: 1, - reattributed: 2 - } - } - } - } - } -}; -var _globalParamsScheme /*: StoreOptions*/ = { - keyPath: 'keyType', - autoIncrement: false, - index: 'type', - fields: { - keyType: { - key: 'kt', - composite: ['key', 'type'] - }, - key: 'k', - value: 'v', - type: { - key: 't', - values: { - callback: 1, - partner: 2 - } - } - } -}; -var _eventDeduplicationScheme /*: StoreOptions*/ = { - keyPath: 'internalId', - autoIncrement: true, - fields: { - internalId: 'ii', - id: 'i' - } -}; -var _preferencesScheme /*: StoreOptionsOptionalKey*/ = { - fields: { - thirdPartySharingDisabled: { - key: 'td', - keys: { - reason: { - key: 'r', - values: _defineProperty({}, REASON_GENERAL, 1) - }, - pending: { - key: 'p', - values: { - false: 0, - true: 1 - } - } - } - }, - sdkDisabled: { - key: 'sd', - keys: { - reason: { - key: 'r', - values: (_values2 = {}, _defineProperty(_values2, REASON_GENERAL, 1), _defineProperty(_values2, REASON_GDPR, 2), _values2) - }, - pending: { - key: 'p', - values: { - false: 0, - true: 1 - } - } - } - } - } -}; -var scheme /*: Scheme*/ = { - queue: { - name: ShortStoreName.Queue, - scheme: _queueScheme - }, - activityState: { - name: ShortStoreName.ActivityState, - scheme: _activityStateScheme - }, - globalParams: { - name: ShortStoreName.GlobalParams, - scheme: _globalParamsScheme - }, - eventDeduplication: { - name: ShortStoreName.EventDeduplication, - scheme: _eventDeduplicationScheme - }, - preferences: { - name: ShortPreferencesStoreName.Preferences, - scheme: _preferencesScheme, - permanent: true - } -}; -function isPredefinedValuesField(field /*: Maybe*/) /*: field is StoreFieldPredefinedValues*/{ - return !!field && Object.prototype.hasOwnProperty.call(field, 'values'); -} -function isNestingStoreField(field /*: Maybe*/) /*: field is StoreFieldNestingFields*/{ - return !!field && Object.prototype.hasOwnProperty.call(field, 'keys'); -} -function isCompositeKeyStoreField(field /*: Maybe*/) /*: field is StoreFieldCompositeKey*/{ - return !!field && Object.prototype.hasOwnProperty.call(field, 'composite'); -} -function isComplexStoreField(field /*: Maybe*/) /*: field is StoreFieldComplex*/{ - return !!field && typeof field !== 'string'; -} +/* harmony default export */ const activity_state = (ActivityState); +;// CONCATENATED MODULE: ./src/sdk/pub-sub.js -/* harmony default export */ const storage_scheme = (scheme); -;// CONCATENATED MODULE: ./src/sdk/storage/scheme-map.ts +/*:: type CallbackT = {| + id: string, + cb: (string, T) => mixed +|}*/ +/** + * List of events with subscribed callbacks + * + * @type {Object} + * @private + */ +var _list = {}; +/** + * Reference to timeout ids so they can be cleared on destroy + * + * @type {Array} + * @private + */ +var _timeoutIds = []; +/** + * Get unique id for the callback to use for unsubscribe + * + * @returns {string} + * @private + */ +function _getId() /*: string*/{ + return 'id' + Math.random().toString(36).substr(2, 16); +} /** - * Cast value into it's original type + * Subscribe to a certain event + * + * @param {string} name + * @param {Function} cb + * @returns {string} */ -function _parseValue(value /*: string*/) /*: any*/{ - // eslint-disable-line @typescript-eslint/no-explicit-any - try { - return JSON.parse(value); - } catch (e) { - return value; +function subscribe /*:: */(name /*: string*/, cb /*: $PropertyType, 'cb'>*/) /*: string*/{ + var id = _getId(); + var callback /*: CallbackT*/ = { + id: id, + cb: cb + }; + if (!_list[name]) { + _list[name] = []; } + _list[name].push(callback); + return id; } /** - * Flip key/value pairs + * Unsubscribe particular callback from an event + * + * @param {string} id */ -function _flipObject(obj /*: Record*/) /*: Record*/{ - return entries(obj).map(function (_ref) { +function unsubscribe(id /*: string*/) /*: void*/{ + if (!id) { + return; + } + entries(_list).some(function (_ref) { var _ref2 = _slicedToArray(_ref, 2), - key = _ref2[0], - value = _ref2[1]; - return [value, _parseValue(key)]; - }).reduce(reducer, {}); + callbacks = _ref2[1]; + return callbacks.some(function + /*:: */ + (callback /*: CallbackT*/, i /*: number*/) { + if (callback.id === id) { + callbacks.splice(i, 1); + return true; + } + }); + }); } /** - * Flip store name definition names: - * - short key pointing the long one along with additional configuration + * Publish certain event with optional arguments + * + * @param {string} name + * @param {*} args + * @returns {Array} */ -function _flipStoreNames(obj /*: StoresConfigurationMap*/) /*: StoresConfigurationMapFlipped*/{ - var flippedConfigs /*: Array<[ShortStoreNames, StoreConfigurationFlipped]>*/ = entries(obj).map(function (_ref3 /*:: */) { - var _ref4 = _slicedToArray(_ref3 /*:: */, 2), - name = _ref4[0], - options = _ref4[1]; - var config = { - name: name, - permanent: options.permanent - }; - return [options.name, config]; +function publish /*:: */(name /*: string*/, args /*: T*/) /*: void*/{ + if (!_list[name]) { + return; + } + _list[name].forEach(function (item /*: CallbackT*/) { + if (typeof item.cb === 'function') { + _timeoutIds.push(setTimeout(function () { + return item.cb(name, args); + })); + } }); - return flippedConfigs.reduce(reducer, {}); } /** - * Flip store scheme values + * Destroy all registered events with their callbacks */ -function _flipStoreScheme(storeName /*: StoreNames*/, key /*: string*/, scheme /*: StoreFieldScheme*/) { - var values = isPredefinedValuesField(scheme) ? { - values: _flipObject(scheme.values) - } : {}; - var keys = isNestingStoreField(scheme) ? { - keys: _flipScheme(storeName, scheme.keys) - } : {}; - var composite = isCompositeKeyStoreField(scheme) ? { - composite: scheme.composite.map(function (key) { - return _getShortKey(storeName, key); - }) - } : {}; - return _objectSpread2(_objectSpread2(_objectSpread2({ - key: key - }, values), keys), composite); +function pub_sub_destroy() /*: void*/{ + _timeoutIds.forEach(clearTimeout); + _timeoutIds = []; + _list = {}; } -/** - * Flip general scheme recursivelly - */ -function _flipScheme(storeName /*: StoreNames*/, fieldsScheme /*: StoreFields*/) { - return entries(fieldsScheme).map(function (_ref5 /*:: */) { - var _ref6 = _slicedToArray(_ref5 /*:: */, 2), - key = _ref6[0], - scheme = _ref6[1]; - return isComplexStoreField(scheme) ? [scheme.key, _flipStoreScheme(storeName, key, scheme)] : [scheme, key]; - }).reduce(reducer, {}); -} +;// CONCATENATED MODULE: ./src/sdk/storage/quick-storage.ts -/** - * Extend base scheme with some more maps for encoding - */ -function _prepareLeft() /*: StoreScheme*/{ - var storesOptions /*: Array<[StoreNames, StoreOptionsOptionalKey]>*/ = entries(storage_scheme).map(function (_ref7 /*:: */) { - var _ref8 = _slicedToArray(_ref7 /*:: */, 2), - storeName = _ref8[0], - store = _ref8[1]; - var options /*: StoreOptionsOptionalKey*/ = { - keyPath: store.scheme.keyPath, - autoIncrement: store.scheme.autoIncrement, - index: store.scheme.index, - fields: store.scheme.fields - }; - return [storeName, options]; - }); - return storesOptions.reduce(reducer, {}); -} -/** - * Prepare scheme for decoding - */ -function _prepareRight() /*: StoreScheme*/{ - var storesOptionsEncoded /*: Array<[StoreNames, StoreOptionsOptionalKey]>*/ = entries(Left).map(function (_ref9) { - var _ref10 = _slicedToArray(_ref9, 2), - storeName = _ref10[0], - storeScheme = _ref10[1]; - var options /*: StoreOptionsOptionalKey*/ = { - keyPath: _getShortKey(storeName, storeScheme.keyPath), - autoIncrement: storeScheme.autoIncrement, - index: _getShortKey(storeName, storeScheme.index), - fields: _flipScheme(storeName, storeScheme.fields) - }; - return [storeName, options]; - }); - return storesOptionsEncoded.reduce(reducer, {}); -} -/** - * Get available values for encoding - */ -function _getValuesMap() /*: Record*/{ - // all pairs of predefined keys and values such as {GET: 1} - return entries(storage_scheme).reduce(function (acc, _ref11) { - var _ref12 = _slicedToArray(_ref11, 2), - store = _ref12[1]; - return acc.concat(store.scheme.fields); - }, []).map(function (scheme) { - return values(scheme).filter(isPredefinedValuesField).map(function (map) { - return entries(map.values); - }).reduce(function (acc, map) { - return acc.concat(map); - }, []); - }).reduce(function (acc, map) { - return acc.concat(map); - }, []).reduce(reducer, {}); -} -/** - * Get short key version of a specified key - */ -function _getShortKey(storeName /*: StoreNames*/, key /*: Maybe*/) /*: Maybe*/{ - if (!key) { - return undefined; + + + + + +var InMemoryStorage = /*#__PURE__*/function () { + function InMemoryStorage() { + _classCallCheck(this, InMemoryStorage); + _defineProperty(this, "items", {}); } - var map = storage_scheme[storeName].scheme.fields[key]; - if (isComplexStoreField(map)) { - return map.key; + return _createClass(InMemoryStorage, [{ + key: "getItem", + value: function getItem(key /*: string*/) /*: string | null*/{ + return Object.prototype.hasOwnProperty.call(this.items, key) ? this.items[key] : null; + } + }, { + key: "removeItem", + value: function removeItem(key /*: string*/) /*: void*/{ + delete this.items[key]; + } + }, { + key: "setItem", + value: function setItem(key /*: string*/, value /*: string*/) /*: void*/{ + this.items[key] = value; + } + }]); +}(); +var QuickStorage = /*#__PURE__*/function () { + function QuickStorage() { + var _this = this; + _classCallCheck(this, QuickStorage); + _defineProperty(this, "defaultName", globals.namespace); + _defineProperty(this, "storageName", this.defaultName); + _defineProperty(this, "storeNames", scheme_map.storeNames.left); + this.storesMap = {}; + if (isLocalStorageSupported()) { + this.storage = window.localStorage; + } else { + this.storage = new InMemoryStorage(); + } + var read = this.read.bind(this); + var write = this.write.bind(this); + values(this.storeNames).forEach(function (store) { + var shortStoreName = store.name; + Object.defineProperty(_this.storesMap, shortStoreName, { + get: function get() { + return read(shortStoreName); + }, + set: function set(value) { + write(shortStoreName, value); + } + }); + }); + Object.freeze(this.storesMap); } - return map || key; -} -/** - * Get store names and their general configuration (if store is permanent or not) - */ -function _getStoreNames() /*: StoresConfigurationMap*/{ - var storeNames /*: Array<[StoreNames, StoreConfiguration]>*/ = entries(storage_scheme).map(function (_ref13) { - var _ref14 = _slicedToArray(_ref13, 2), - name = _ref14[0], - store = _ref14[1]; - var config = { - name: store.name, - permanent: store.permanent - }; - return [name, config]; - }); - return storeNames.reduce(reducer, {}); -} -var Left = _prepareLeft(); -var Right = _prepareRight(); -var Values = _getValuesMap(); -var StoreNamesAndConfigs = _getStoreNames(); -/* harmony default export */ const scheme_map = ({ - left: Left, - right: Right, - values: Values, - storeNames: { - left: StoreNamesAndConfigs, - right: _flipStoreNames(StoreNamesAndConfigs) - } -}); -;// CONCATENATED MODULE: ./src/sdk/storage/types.ts -var _Promise = typeof Promise === 'undefined' ? (__webpack_require__(702).Promise) : Promise; + /** + * Sets custom name to use in data keys and updates existing keys in localStorage + */ + return _createClass(QuickStorage, [{ + key: "read", + value: + /** + * Get the value for specified key + */ + function read(key /*: ShortStoreName | ShortPreferencesStoreName*/) /*: Nullable*/{ + var valueToParse = this.storage.getItem("".concat(this.storageName, ".").concat(key)); + var value = valueToParse ? JSON.parse(valueToParse) : null; + if (key === ShortPreferencesStoreName.Preferences && value) { + return convertRecord(ShortPreferencesStoreName.Preferences, Direction.right, value); + } + return value; + } -var KeyRangeCondition; -(function (KeyRangeCondition) { - KeyRangeCondition["LowerBound"] = "lowerBound"; - KeyRangeCondition["UpperBound"] = "upperBound"; -})(KeyRangeCondition || (KeyRangeCondition = {})); -function valueIsRecord(value /*: StoredValue | Record*/) /*: value is Record*/{ - return isObject(value); -} + /** + * Set the value for specified key + */ + }, { + key: "write", + value: function write(key /*: ShortStoreName | ShortPreferencesStoreName*/, value /*: StoreContent*/) { + if (!value) { + this.storage.removeItem("".concat(this.storageName, ".").concat(key)); + } else { + this.storage.setItem("".concat(this.storageName, ".").concat(key), JSON.stringify(value instanceof Array ? value : convertRecord(ShortPreferencesStoreName.Preferences, Direction.left, value))); + } + } -;// CONCATENATED MODULE: ./src/sdk/storage/converter.ts + /** + * Clear all data related to the sdk + */ + }, { + key: "clear", + value: function clear() { + this.deleteData(); + } + /** + * Clear all data related to the sdk + * + * @param wipe if true then also remove permanent data such as user's preferences + */ + }, { + key: "deleteData", + value: function deleteData() { + var _this2 = this; + var wipe = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; + values(this.storeNames).forEach(function (store) { + if (wipe || !store.permanent) { + _this2.storage.removeItem("".concat(_this2.storageName, ".").concat(store.name)); + } + }); + } + }, { + key: "setCustomName", + value: function setCustomName(customName /*: string*/) { + var _this3 = this; + if (!customName || !customName.length) { + return; + } + var newName = "".concat(globals.namespace, "-").concat(customName); + // Clone data + values(this.storeNames).forEach(function (store) { + var key = store.name; + var rawData = _this3.storage.getItem("".concat(_this3.storageName, ".").concat(key)); // Get data from the store, no need to encode it + if (rawData) { + _this3.storage.setItem("".concat(newName, ".").concat(key), rawData); // Put data into a new store + } + }); + this.deleteData(true); + this.storageName = newName; + } + }, { + key: "stores", + get: function get() { + return this.storesMap; + } + }]); +}(); +/* harmony default export */ const quick_storage = (new QuickStorage()); +;// CONCATENATED MODULE: ./src/sdk/preferences.js -var Direction; -(function (Direction) { - Direction["right"] = "right"; - Direction["left"] = "left"; -})(Direction || (Direction = {})); -/** - * Get value from the map if available - */ -function _getValue(map /*: Nullable>*/, value /*: StoredValue*/) /*: StoredValue*/{ - return map ? map[value] !== undefined ? map[value] : value : value; -} - +/*:: type SdkDisabledT = {| + reason: REASON_GENERAL | REASON_GDPR, + pending: boolean +|}*/ +/*:: type ThirdPartySharingDisabledT = {| + reason: REASON_GENERAL, + pending: boolean +|}*/ +/*:: type PreferencesT = {| + thirdPartySharingDisabled?: ?ThirdPartySharingDisabledT, + sdkDisabled?: ?SdkDisabledT +|}*/ /** - * Convert key and value by defined scheme + * Name of the store used by preferences + * + * @type {string} + * @private */ -function _convert(storeName /*: StoreNameType*/, dir /*: Direction*/, key /*: string*/, value /*: StoredValue | StoredRecord*/, scheme /*: StoreFieldScheme*/) /*: [string, unknown]*/{ - if (!scheme) { - return [key, value]; - } - var encodedKey = isComplexStoreField(scheme) ? scheme.key : scheme; - if (valueIsRecord(value)) { - var keys = isNestingStoreField(scheme) ? scheme.keys : null; - return [encodedKey, convertRecord(storeName, dir, value, keys)]; - } - var valuesMap = isPredefinedValuesField(scheme) ? scheme.values : null; - return [encodedKey, _getValue(valuesMap, value)]; -} +var _storeName /*: string*/ = storage_scheme.preferences.name; /** - * Convert record by defined direction and scheme + * Local reference to be used for recovering preserved state + * + * @type {Object} + * @private */ +var _preferences /*: ?PreferencesT*/ = _getPreferences(); /** - * Convert record by defined direction and scheme - * Note: the function signature is duplicated because TS hides function implementation + * Get preferences stored in the localStorage + * + * @returns {Object} + * @private */ -function convertRecord(storeName /*: StoreNameType*/, dir /*: Direction*/, record /*: Maybe*/, scheme /*: StoreFields*/) /*: Maybe*/{ - if (!record) { - return undefined; +function _getPreferences() /*: ?PreferencesT*/{ + if (!_preferences) { + _setPreferences(); } - var _scheme /*: StoreFields*/ = scheme || scheme_map[dir][convertStoreName(storeName, Direction.right)].fields; - return entries(record).map(function (_ref) { - var _ref2 = _slicedToArray(_ref, 2), - key = _ref2[0], - value = _ref2[1]; - return _convert(storeName, dir, key, value, _scheme[key]); - }).reduce(function (acc, _ref3) { - var _ref4 = _slicedToArray(_ref3, 2), - key = _ref4[0], - value = _ref4[1]; - return _objectSpread2(_objectSpread2({}, acc), {}, _defineProperty({}, key, value)); - }, {}); -} - -/** - * Convert records by defined direction - */ -function convertRecords(storeName /*: StoreNameType*/, dir /*: Direction*/) /*: Array*/{ - var records /*: Array*/ = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : []; - return records.map(function (record) { - return convertRecord(storeName, dir, record); - }); -} - -/** - * Convert values by defined direction - */ -function convertValues(storeName /*: StoreNameType*/, dir /*: Direction*/, target /*: StoredRecordId*/) /*: StoredValue | Array*/{ - var scheme /*: StoreOptions*/ = scheme_map[dir][convertStoreName(storeName, Direction.right)]; - var keyPathScheme = scheme.fields[scheme.keyPath]; - var values = target instanceof Array ? target.slice() : [target]; - var keys = isCompositeKeyStoreField(keyPathScheme) ? keyPathScheme.composite : [scheme.keyPath]; - var converted = keys.map(function (key /*: string*/, index /*: number*/) { - var field = scheme.fields[key]; - var predefinedValuesMap = isPredefinedValuesField(field) ? field.values : null; - return _getValue(predefinedValuesMap, values[index]); - }); - return converted.length === 1 ? converted[0] : converted; -} - -/** - * Encode value by defined scheme - */ -function encodeValue(target /*: StoredValue*/) /*: StoredValue*/{ - return scheme_map.values[target] || target; -} - -/** - * Convert store name by defined direction - */ -function convertStoreName(storeName /*: StoreNameType*/, dir /*: Direction*/) /*: StoreNameType*/{ - return (scheme_map.storeNames[dir][storeName] || {}).name || storeName; + return _preferences ? _objectSpread2({}, _preferences) : null; } /** - * Decode error message by replacing short store name with long readable one + * Set local reference of the preserved preferences + * + * @private */ -function decodeErrorMessage(storeName /*: ShortStoreNames*/, error /*: Error*/) /*: Error*/{ - return { - name: error.name, - message: error.message.replace("\"".concat(storeName, "\""), convertStoreName(storeName, Direction.right)) - }; -} - -;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/classCallCheck.js -function _classCallCheck(instance, Constructor) { - if (!(instance instanceof Constructor)) { - throw new TypeError("Cannot call a class as a function"); - } -} -;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/createClass.js -function _defineProperties(target, props) { - for (var i = 0; i < props.length; i++) { - var descriptor = props[i]; - descriptor.enumerable = descriptor.enumerable || false; - descriptor.configurable = true; - if ("value" in descriptor) descriptor.writable = true; - Object.defineProperty(target, descriptor.key, descriptor); - } -} -function _createClass(Constructor, protoProps, staticProps) { - if (protoProps) _defineProperties(Constructor.prototype, protoProps); - if (staticProps) _defineProperties(Constructor, staticProps); - Object.defineProperty(Constructor, "prototype", { - writable: false - }); - return Constructor; +function _setPreferences() /*: void*/{ + _preferences = quick_storage.stores[_storeName]; } -;// CONCATENATED MODULE: ./src/sdk/time.js /** - * Prepend zero to be used in certain format + * Get current disabled state * - * @param {number} value - * @param {number} power - * @returns {string} - * @private + * @returns {Object|null} */ -function _prependZero(value /*: number*/) /*: string*/{ - var power /*: number*/ = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1; - var formatted = value + ''; - for (var i = 1; i <= power; i += 1) { - if (value < Math.pow(10, i)) { - formatted = "0".concat(formatted); - } - } - return formatted; +function getDisabled() /*: ?SdkDisabledT*/{ + var preferences = _getPreferences(); + return preferences ? preferences.sdkDisabled : null; } /** - * Get formatted date (YYYY-MM-DD) + * Set current disabled state * - * @param date - * @returns {string} - * @private + * @param {Object|null} value */ -function _getDate(date /*: Date*/) /*: string*/{ - var day = _prependZero(date.getDate()); - var month = _prependZero(date.getMonth() + 1); - var year = date.getFullYear(); - return [year, month, day].join('-'); +function setDisabled(value /*: ?SdkDisabledT*/) /*: void*/{ + var sdkDisabled = value ? _objectSpread2({}, value) : null; + quick_storage.stores[_storeName] = _objectSpread2(_objectSpread2({}, _getPreferences()), {}, { + sdkDisabled: sdkDisabled + }); + _setPreferences(); } /** - * Get formatted hours, minutes, seconds and milliseconds (HH:mm:ss.SSS) + * Get current third-party-sharing disabled state * - * @param {Date} date - * @returns {string} + * @returns {Object} * @private */ -function _getTime(date /*: Date*/) /*: string*/{ - var hours = _prependZero(date.getHours(), 1); - var minutes = _prependZero(date.getMinutes()); - var seconds = _prependZero(date.getSeconds()); - var milliseconds = _prependZero(date.getMilliseconds(), 2); - return [hours, minutes, seconds].join(':') + '.' + milliseconds; +function getThirdPartySharing() /*: ?ThirdPartySharingDisabledT*/{ + var preferences = _getPreferences(); + return preferences ? preferences.thirdPartySharingDisabled : null; } /** - * Get formatted timezone (ZZ) + * Set current third-party-sharing disabled state * - * @param {Date} date - * @returns {string} + * @param {Object=} value * @private */ -function _getTimezone(date /*: Date*/) /*: string*/{ - var offsetInMinutes = date.getTimezoneOffset(); - var hoursOffset = _prependZero(Math.floor(Math.abs(offsetInMinutes) / 60)); - var minutesOffset = _prependZero(Math.abs(offsetInMinutes) % 60); - var sign = offsetInMinutes > 0 ? '-' : '+'; - return sign + hoursOffset + minutesOffset; +function setThirdPartySharing(value /*: ?ThirdPartySharingDisabledT*/) /*: void*/{ + var thirdPartySharingDisabled = value ? _objectSpread2({}, value) : null; + quick_storage.stores[_storeName] = _objectSpread2(_objectSpread2({}, _getPreferences()), {}, { + thirdPartySharingDisabled: thirdPartySharingDisabled + }); + _setPreferences(); } /** - * Get the timestamp in the backend format - * - * @param {number=} timestamp - * @returns {string} + * Reload current preferences from localStorage if changed outside of current scope (e.g. tab) */ -function getTimestamp(timestamp /*: number*/) /*: string*/{ - var d = timestamp ? new Date(timestamp) : new Date(); - var date = _getDate(d); - var time = _getTime(d); - var timezone = _getTimezone(d); - return "".concat(date, "T").concat(time, "Z").concat(timezone); +function reload() /*: void*/{ + var stored /*: PreferencesT*/ = quick_storage.stores[_storeName] || {}; + var sdkDisabled /*: ?SdkDisabledT*/ = (_preferences || {}).sdkDisabled || null; + if (stored.sdkDisabled && !sdkDisabled) { + publish('sdk:shutdown'); + } + _setPreferences(); } /** - * Calculate time passed between two dates in milliseconds - * - * @param {number} d1 - * @param {number} d2 - * @returns {number} + * Recover preferences from memory if storage was lost */ -function timePassed(d1 /*: number*/, d2 /*: number*/) /*: number*/{ - if (isNaN(d1) || isNaN(d2)) { - return 0; +function recover() /*: void*/{ + var stored /*: ?PreferencesT*/ = quick_storage.stores[_storeName]; + if (!stored) { + quick_storage.stores[_storeName] = _objectSpread2({}, _preferences); } - return Math.abs(d2 - d1); } -;// CONCATENATED MODULE: ./src/sdk/activity-state.js +;// CONCATENATED MODULE: ./src/sdk/storage/indexeddb.ts -/*:: // -import { type UrlT, type ActivityStateMapT, type AttributionMapT, type CommonRequestParams } from './types';*/ -/** - * Reference to the activity state - * - * @type {Object} - * @private - */ -var _activityState /*: ActivityStateMapT*/ = {}; -/** - * Started flag, if activity state has been initiated - * - * @type {boolean} - * @private - */ -var _started /*: boolean*/ = false; -/** - * Active flag, if in foreground - * - * @type {boolean} - * @private - */ -var _active /*: boolean*/ = false; -/** - * Get current activity state - * - * @returns {Object} - */ -function currentGetter() /*: ActivityStateMapT*/{ - return _started ? _objectSpread2({}, _activityState) : {}; -} -/** - * Set current activity state - * - * @param {Object} params - */ -function currentSetter() { - var params /*: ActivityStateMapT*/ = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - _activityState = _started ? _objectSpread2({}, params) : {}; -} -/** - * Initiate in-memory activity state - * - * @param {Object} params - */ -function init(params /*: ActivityStateMapT*/) { - _started = true; - currentSetter(params); -} -/** - * Check if activity state is started - * - * @returns {boolean} - */ -function isStarted() { - return _started; -} -/** - * Update last active point - * - * @private - */ -function updateLastActive() /*: void*/{ - if (!_started) { - return; + +var Action = /*#__PURE__*/function (Action) { + Action["add"] = "add"; + Action["put"] = "put"; + Action["get"] = "get"; + Action["list"] = "list"; + Action["clear"] = "clear"; + Action["delete"] = "delete"; + return Action; +}(Action || {}); +var AccessMode = /*#__PURE__*/function (AccessMode) { + AccessMode["readonly"] = "readonly"; + AccessMode["readwrite"] = "readwrite"; + return AccessMode; +}(AccessMode || {}); +var IndexedDBWrapper = /*#__PURE__*/function () { + function IndexedDBWrapper() { + _classCallCheck(this, IndexedDBWrapper); + _defineProperty(this, "dbDefaultName", globals.namespace); + _defineProperty(this, "dbName", this.dbDefaultName); + _defineProperty(this, "dbVersion", 1); + _defineProperty(this, "indexedDbConnection", null); + _defineProperty(this, "notSupportedError", { + name: 'IDBNotSupported', + message: 'IndexedDB is not supported' + }); + _defineProperty(this, "databaseOpenError", { + name: 'CannotOpenDatabaseError', + message: 'Cannot open a database' + }); + _defineProperty(this, "noConnectionError", { + name: 'NoDatabaseConnection', + message: 'Cannot open a transaction' + }); + var idb = IndexedDBWrapper.getIndexedDB(); + if (!idb) { + throw this.notSupportedError; + } + this.idbFactory = idb; } - _activityState.lastInterval = _getLastInterval(); - _activityState.lastActive = Date.now(); -} -/** - * Update activity state with new params - * - * @param {Object} params - * @private - */ -function _update(params /*: ActivityStateMapT*/) /*: void*/{ - _activityState = _objectSpread2(_objectSpread2({}, _activityState), params); -} + /** + * Sets custom name if provided and migrates database + */ + return _createClass(IndexedDBWrapper, [{ + key: "setCustomName", + value: function setCustomName(customName /*: string*/) /*: Promise*/{ + if (customName && customName.length > 0) { + this.dbName = "".concat(globals.namespace, "-").concat(customName); + return this.migrateDb(this.dbDefaultName, this.dbName); + } + return Promise.resolve(); + } -/** - * Set active flag to true when going foreground - */ -function toForeground() /*: void*/{ - _active = true; -} + /** + * Opens database with defined name and resolves with database connection if successed + * @param name name of database to open + * @param version optional version of database schema + * @param upgradeCallback optional `IDBOpenRequest.onupgradeneeded` event handler + */ + }, { + key: "openDatabase", + value: function openDatabase(name /*: string*/, upgradeCallback /*: (event: IDBVersionChangeEvent, reject: () => void) => void*/, version /*: number*/) /*: Promise*/{ + var _this = this; + return IndexedDBWrapper.isSupported().then(function (supported) { + if (!supported) { + return Promise.reject(_this.notSupportedError); + } else { + return new Promise(function (resolve, reject) { + var request = _this.idbFactory.open(name, version); + if (upgradeCallback) { + request.onupgradeneeded = function (event) { + return upgradeCallback(event, reject); + }; + } + request.onsuccess = function (event /*: IDBOpenDBEvent*/) { + var connection = event.target.result; + if (connection) { + resolve(connection); + } else { + reject(_this.databaseOpenError); + } + }; + request.onerror = reject; + }); + } + }); + } -/** - * Set active flag to false when going background - */ -function toBackground() /*: void*/{ - _active = false; -} + /** + * Checks if database with passed name exists + */ + }, { + key: "databaseExists", + value: function databaseExists(name /*: string*/) /*: Promise*/{ + var _this2 = this; + return new Promise(function (resolve /*: (result: boolean) => void*/) { + var existed = true; + _this2.openDatabase(name, function () { + existed = false; + }).then(function (connection) { + connection.close(); + if (existed) { + return; + } -/** - * Get time offset from the last active point - * - * @returns {number} - * @private - */ -function _getOffset() /*: number*/{ - var lastActive = _activityState.lastActive; - return Math.round(timePassed(lastActive, Date.now()) / SECOND); -} + // We didn't have this database before the check, so remove it + return _this2.deleteDatabaseByName(name); + }).then(function () { + return resolve(existed); + }); + }); + } + }, { + key: "cloneData", + value: function cloneData(defaultDbConnection /*: IDBDatabase*/, customDbConnection /*: IDBDatabase*/) /*: Promise*/{ + var _this3 = this; + // Function to clone a single store + var cloneStore = function cloneStore(storeName /*: ShortStoreName*/) { + var connection = _this3.indexedDbConnection; + _this3.indexedDbConnection = defaultDbConnection; + return _this3.getAll(storeName) // Get all records from default-named database + .then(function (records) { + _this3.indexedDbConnection = customDbConnection; + if (records.length < 1) { + // There is no records in the store + return; + } + return _this3.addBulk(storeName, records, true); // Put all records into custom-named database + }).then(function () { + _this3.indexedDbConnection = connection; // Restore initial state + }); + }; -/** - * Get time spent with optional offset from last point - * - * @returns {number} - * @private - */ -function _getTimeSpent() /*: number*/{ - return (_activityState.timeSpent || 0) + (_active ? _getOffset() : 0); -} + // Type guard to filter stores + function isStoreName(key /*: ShortStoreNames*/) /*: key is ShortStoreName*/{ + return key !== 'p'; + } -/** - * Get session length with optional offset from last point - * - * @returns {number} - * @private - */ -function _getSessionLength() /*: number*/{ - var lastActive = _activityState.lastActive; - var withinWindow = timePassed(lastActive, Date.now()) < config.sessionWindow; - var withOffset = _active || !_active && withinWindow; - return (_activityState.sessionLength || 0) + (withOffset ? _getOffset() : 0); -} + // Get names of stores + var storeNames /*: ShortStoreName[]*/ = values(scheme_map.storeNames.left).map(function (store) { + return store.name; + }).filter(isStoreName); + var cloneStorePromises = storeNames.map(function (name) { + return function () { + return cloneStore(name); + }; + }); -/** - * Get total number of sessions so far - * - * @returns {number} - * @private - */ -function _getSessionCount() /*: number*/{ - return _activityState.sessionCount || 0; -} - -/** - * Get total number of events so far - * - * @returns {number} - * @private - */ -function _getEventCount() /*: number*/{ - return _activityState.eventCount || 0; -} - -/** - * Get time passed since last activity was recorded - * - * @returns {number} - * @private - */ -function _getLastInterval() /*: number*/{ - var lastActive = _activityState.lastActive; - if (lastActive) { - return Math.round(timePassed(lastActive, Date.now()) / SECOND); - } - return -1; -} - -/** - * Initiate session params and go to foreground - */ -function initParams() /*: void*/{ - updateSessionOffset(); - toForeground(); -} - -/** - * Get activity state params that are sent with each request - * - * @returns {Object} - */ -function getParams(url /*: UrlT*/) /*: ?CommonRequestParams*/{ - if (!_started) { - return null; - } - var lastInterval = _activityState.lastInterval >= 0 ? _activityState.lastInterval : 0; - var baseParams /*: CommonRequestParams*/ = { - timeSpent: _activityState.timeSpent || 0, - sessionLength: _activityState.sessionLength || 0, - sessionCount: _activityState.sessionCount || 1, - lastInterval: lastInterval || 0 - }; - if (url && isRequest(url, 'event')) { - baseParams.eventCount = _activityState.eventCount; - } - return baseParams; -} - -/** - * Update activity state parameters depending on the endpoint which has been run - * - * @param {string} url - * @param {boolean=false} auto - */ -function updateParams(url /*: string*/, auto /*: boolean*/) /*: void*/{ - if (!_started) { - return; - } - var params = {}; - params.timeSpent = _getTimeSpent(); - params.sessionLength = _getSessionLength(); - if (isRequest(url, 'session')) { - params.sessionCount = _getSessionCount() + 1; - } - if (isRequest(url, 'event')) { - params.eventCount = _getEventCount() + 1; - } - _update(params); - if (!auto) { - updateLastActive(); - } -} - -/** - * Update installed flag - first session has been finished - */ -function updateInstalled() /*: void*/{ - if (!_started) { - return; - } - if (_activityState.installed) { - return; - } - _update({ - installed: true - }); -} - -/** - * Update session params which depend on the time offset since last measure point - */ -function updateSessionOffset() /*: void*/{ - if (!_started) { - return; - } - var timeSpent = _getTimeSpent(); - var sessionLength = _getSessionLength(); - _update({ - timeSpent: timeSpent, - sessionLength: sessionLength - }); - updateLastActive(); -} - -/** - * Update session length - */ -function updateSessionLength() /*: void*/{ - if (!_started) { - return; - } - var sessionLength = _getSessionLength(); - _update({ - sessionLength: sessionLength - }); - updateLastActive(); -} - -/** - * Reset time spent and session length to zero - */ -function resetSessionOffset() /*: void*/{ - if (!_started) { - return; - } - _update({ - timeSpent: 0, - sessionLength: 0 - }); -} - -/** - * Destroy current activity state - */ -function activity_state_destroy() /*: void*/{ - _activityState = {}; - _started = false; - _active = false; -} -function getAttribution() /*: AttributionMapT | null*/{ - if (!_started) { - return null; - } - if (!_activityState.attribution) { - logger.log('No attribution data yet'); - return null; - } - return _activityState.attribution; -} -function getWebUUID() /*: string*/{ - if (!_started) { - return null; - } - return _activityState.uuid; -} -var ActivityState = { - get current() { - return currentGetter(); - }, - set current(value) { - currentSetter(value); - }, - init: init, - isStarted: isStarted, - toForeground: toForeground, - toBackground: toBackground, - initParams: initParams, - getParams: getParams, - updateParams: updateParams, - updateInstalled: updateInstalled, - updateSessionOffset: updateSessionOffset, - updateSessionLength: updateSessionLength, - resetSessionOffset: resetSessionOffset, - updateLastActive: updateLastActive, - destroy: activity_state_destroy, - getAttribution: getAttribution, - getWebUUID: getWebUUID -}; -/* harmony default export */ const activity_state = (ActivityState); -;// CONCATENATED MODULE: ./src/sdk/pub-sub.js - - -/*:: type CallbackT = {| - id: string, - cb: (string, T) => mixed -|}*/ -/** - * List of events with subscribed callbacks - * - * @type {Object} - * @private - */ -var _list = {}; - -/** - * Reference to timeout ids so they can be cleared on destroy - * - * @type {Array} - * @private - */ -var _timeoutIds = []; - -/** - * Get unique id for the callback to use for unsubscribe - * - * @returns {string} - * @private - */ -function _getId() /*: string*/{ - return 'id' + Math.random().toString(36).substr(2, 16); -} - -/** - * Subscribe to a certain event - * - * @param {string} name - * @param {Function} cb - * @returns {string} - */ -function subscribe /*:: */(name /*: string*/, cb /*: $PropertyType, 'cb'>*/) /*: string*/{ - var id = _getId(); - var callback /*: CallbackT*/ = { - id: id, - cb: cb - }; - if (!_list[name]) { - _list[name] = []; - } - _list[name].push(callback); - return id; -} - -/** - * Unsubscribe particular callback from an event - * - * @param {string} id - */ -function unsubscribe(id /*: string*/) /*: void*/{ - if (!id) { - return; - } - entries(_list).some(function (_ref) { - var _ref2 = _slicedToArray(_ref, 2), - callbacks = _ref2[1]; - return callbacks.some(function - /*:: */ - (callback /*: CallbackT*/, i /*: number*/) { - if (callback.id === id) { - callbacks.splice(i, 1); - return true; - } - }); - }); -} - -/** - * Publish certain event with optional arguments - * - * @param {string} name - * @param {*} args - * @returns {Array} - */ -function publish /*:: */(name /*: string*/, args /*: T*/) /*: void*/{ - if (!_list[name]) { - return; - } - _list[name].forEach(function (item /*: CallbackT*/) { - if (typeof item.cb === 'function') { - _timeoutIds.push(setTimeout(function () { - return item.cb(name, args); - })); - } - }); -} - -/** - * Destroy all registered events with their callbacks - */ -function pub_sub_destroy() /*: void*/{ - _timeoutIds.forEach(clearTimeout); - _timeoutIds = []; - _list = {}; -} - -;// CONCATENATED MODULE: ./src/sdk/storage/quick-storage.ts - - - - - - - - - -var InMemoryStorage = /*#__PURE__*/function () { - function InMemoryStorage() { - _classCallCheck(this, InMemoryStorage); - _defineProperty(this, "items", {}); - } - _createClass(InMemoryStorage, [{ - key: "getItem", - value: function getItem(key /*: string*/) /*: string | null*/{ - return Object.prototype.hasOwnProperty.call(this.items, key) ? this.items[key] : null; - } - }, { - key: "removeItem", - value: function removeItem(key /*: string*/) /*: void*/{ - delete this.items[key]; - } - }, { - key: "setItem", - value: function setItem(key /*: string*/, value /*: string*/) /*: void*/{ - this.items[key] = value; - } - }]); - return InMemoryStorage; -}(); -var QuickStorage = /*#__PURE__*/function () { - function QuickStorage() { - var _this = this; - _classCallCheck(this, QuickStorage); - _defineProperty(this, "defaultName", globals.namespace); - _defineProperty(this, "storageName", this.defaultName); - _defineProperty(this, "storeNames", scheme_map.storeNames.left); - _defineProperty(this, "storesMap", void 0); - _defineProperty(this, "storage", void 0); - this.storesMap = {}; - if (isLocalStorageSupported()) { - this.storage = window.localStorage; - } else { - this.storage = new InMemoryStorage(); - } - var read = this.read.bind(this); - var write = this.write.bind(this); - values(this.storeNames).forEach(function (store) { - var shortStoreName = store.name; - Object.defineProperty(_this.storesMap, shortStoreName, { - get: function get() { - return read(shortStoreName); - }, - set: function set(value) { - write(shortStoreName, value); - } - }); - }); - Object.freeze(this.storesMap); - } - - /** - * Sets custom name to use in data keys and updates existing keys in localStorage - */ - _createClass(QuickStorage, [{ - key: "read", - value: - /** - * Get the value for specified key - */ - function read(key /*: ShortStoreName | ShortPreferencesStoreName*/) /*: Nullable*/{ - var valueToParse = this.storage.getItem("".concat(this.storageName, ".").concat(key)); - var value = valueToParse ? JSON.parse(valueToParse) : null; - if (key === ShortPreferencesStoreName.Preferences && value) { - return convertRecord(ShortPreferencesStoreName.Preferences, Direction.right, value); - } - return value; - } - - /** - * Set the value for specified key - */ - }, { - key: "write", - value: function write(key /*: ShortStoreName | ShortPreferencesStoreName*/, value /*: StoreContent*/) { - if (!value) { - this.storage.removeItem("".concat(this.storageName, ".").concat(key)); - } else { - this.storage.setItem("".concat(this.storageName, ".").concat(key), JSON.stringify(value instanceof Array ? value : convertRecord(ShortPreferencesStoreName.Preferences, Direction.left, value))); - } - } - - /** - * Clear all data related to the sdk - */ - }, { - key: "clear", - value: function clear() { - this.deleteData(); - } - - /** - * Clear all data related to the sdk - * - * @param wipe if true then also remove permanent data such as user's preferences - */ - }, { - key: "deleteData", - value: function deleteData() { - var _this2 = this; - var wipe = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; - values(this.storeNames).forEach(function (store) { - if (wipe || !store.permanent) { - _this2.storage.removeItem("".concat(_this2.storageName, ".").concat(store.name)); - } - }); - } - }, { - key: "setCustomName", - value: function setCustomName(customName /*: string*/) { - var _this3 = this; - if (!customName || !customName.length) { - return; - } - var newName = "".concat(globals.namespace, "-").concat(customName); - - // Clone data - values(this.storeNames).forEach(function (store) { - var key = store.name; - var rawData = _this3.storage.getItem("".concat(_this3.storageName, ".").concat(key)); // Get data from the store, no need to encode it - if (rawData) { - _this3.storage.setItem("".concat(newName, ".").concat(key), rawData); // Put data into a new store - } - }); - - this.deleteData(true); - this.storageName = newName; - } - }, { - key: "stores", - get: function get() { - return this.storesMap; - } - }]); - return QuickStorage; -}(); -/* harmony default export */ const quick_storage = (new QuickStorage()); -;// CONCATENATED MODULE: ./src/sdk/preferences.js - - - - - -/*:: type SdkDisabledT = {| - reason: REASON_GENERAL | REASON_GDPR, - pending: boolean -|}*/ -/*:: type ThirdPartySharingDisabledT = {| - reason: REASON_GENERAL, - pending: boolean -|}*/ -/*:: type PreferencesT = {| - thirdPartySharingDisabled?: ?ThirdPartySharingDisabledT, - sdkDisabled?: ?SdkDisabledT -|}*/ -/** - * Name of the store used by preferences - * - * @type {string} - * @private - */ -var _storeName /*: string*/ = storage_scheme.preferences.name; - -/** - * Local reference to be used for recovering preserved state - * - * @type {Object} - * @private - */ -var _preferences /*: ?PreferencesT*/ = _getPreferences(); - -/** - * Get preferences stored in the localStorage - * - * @returns {Object} - * @private - */ -function _getPreferences() /*: ?PreferencesT*/{ - if (!_preferences) { - _setPreferences(); - } - return _preferences ? _objectSpread2({}, _preferences) : null; -} - -/** - * Set local reference of the preserved preferences - * - * @private - */ -function _setPreferences() /*: void*/{ - _preferences = quick_storage.stores[_storeName]; -} - -/** - * Get current disabled state - * - * @returns {Object|null} - */ -function getDisabled() /*: ?SdkDisabledT*/{ - var preferences = _getPreferences(); - return preferences ? preferences.sdkDisabled : null; -} - -/** - * Set current disabled state - * - * @param {Object|null} value - */ -function setDisabled(value /*: ?SdkDisabledT*/) /*: void*/{ - var sdkDisabled = value ? _objectSpread2({}, value) : null; - quick_storage.stores[_storeName] = _objectSpread2(_objectSpread2({}, _getPreferences()), {}, { - sdkDisabled: sdkDisabled - }); - _setPreferences(); -} - -/** - * Get current third-party-sharing disabled state - * - * @returns {Object} - * @private - */ -function getThirdPartySharing() /*: ?ThirdPartySharingDisabledT*/{ - var preferences = _getPreferences(); - return preferences ? preferences.thirdPartySharingDisabled : null; -} - -/** - * Set current third-party-sharing disabled state - * - * @param {Object=} value - * @private - */ -function setThirdPartySharing(value /*: ?ThirdPartySharingDisabledT*/) /*: void*/{ - var thirdPartySharingDisabled = value ? _objectSpread2({}, value) : null; - quick_storage.stores[_storeName] = _objectSpread2(_objectSpread2({}, _getPreferences()), {}, { - thirdPartySharingDisabled: thirdPartySharingDisabled - }); - _setPreferences(); -} - -/** - * Reload current preferences from localStorage if changed outside of current scope (e.g. tab) - */ -function reload() /*: void*/{ - var stored /*: PreferencesT*/ = quick_storage.stores[_storeName] || {}; - var sdkDisabled /*: ?SdkDisabledT*/ = (_preferences || {}).sdkDisabled || null; - if (stored.sdkDisabled && !sdkDisabled) { - publish('sdk:shutdown'); - } - _setPreferences(); -} - -/** - * Recover preferences from memory if storage was lost - */ -function recover() /*: void*/{ - var stored /*: ?PreferencesT*/ = quick_storage.stores[_storeName]; - if (!stored) { - quick_storage.stores[_storeName] = _objectSpread2({}, _preferences); - } -} - -;// CONCATENATED MODULE: ./src/sdk/storage/indexeddb.ts - - - - - -var indexeddb_Promise = typeof Promise === 'undefined' ? (__webpack_require__(702).Promise) : Promise; - - - - - - - - - - -var Action; -(function (Action) { - Action["add"] = "add"; - Action["put"] = "put"; - Action["get"] = "get"; - Action["list"] = "list"; - Action["clear"] = "clear"; - Action["delete"] = "delete"; -})(Action || (Action = {})); -var AccessMode; -(function (AccessMode) { - AccessMode["readonly"] = "readonly"; - AccessMode["readwrite"] = "readwrite"; -})(AccessMode || (AccessMode = {})); -var IndexedDBWrapper = /*#__PURE__*/function () { - function IndexedDBWrapper() { - _classCallCheck(this, IndexedDBWrapper); - _defineProperty(this, "dbDefaultName", globals.namespace); - _defineProperty(this, "dbName", this.dbDefaultName); - _defineProperty(this, "dbVersion", 1); - _defineProperty(this, "idbFactory", void 0); - _defineProperty(this, "indexedDbConnection", null); - _defineProperty(this, "notSupportedError", { - name: 'IDBNotSupported', - message: 'IndexedDB is not supported' - }); - _defineProperty(this, "databaseOpenError", { - name: 'CannotOpenDatabaseError', - message: 'Cannot open a database' - }); - _defineProperty(this, "noConnectionError", { - name: 'NoDatabaseConnection', - message: 'Cannot open a transaction' - }); - var idb = IndexedDBWrapper.getIndexedDB(); - if (!idb) { - throw this.notSupportedError; - } - this.idbFactory = idb; - } - - /** - * Sets custom name if provided and migrates database - */ - _createClass(IndexedDBWrapper, [{ - key: "setCustomName", - value: function setCustomName(customName /*: string*/) /*: Promise*/{ - if (customName && customName.length > 0) { - this.dbName = "".concat(globals.namespace, "-").concat(customName); - return this.migrateDb(this.dbDefaultName, this.dbName); - } - return indexeddb_Promise.resolve(); - } - - /** - * Opens database with defined name and resolves with database connection if successed - * @param name name of database to open - * @param version optional version of database schema - * @param upgradeCallback optional `IDBOpenRequest.onupgradeneeded` event handler - */ - }, { - key: "openDatabase", - value: function openDatabase(name /*: string*/, upgradeCallback /*: (event: IDBVersionChangeEvent, reject: () => void) => void*/, version /*: number*/) /*: Promise*/{ - var _this = this; - return IndexedDBWrapper.isSupported().then(function (supported) { - if (!supported) { - return indexeddb_Promise.reject(_this.notSupportedError); - } else { - return new indexeddb_Promise(function (resolve, reject) { - var request = _this.idbFactory.open(name, version); - if (upgradeCallback) { - request.onupgradeneeded = function (event) { - return upgradeCallback(event, reject); - }; - } - request.onsuccess = function (event /*: IDBOpenDBEvent*/) { - var connection = event.target.result; - if (connection) { - resolve(connection); - } else { - reject(_this.databaseOpenError); - } - }; - request.onerror = reject; - }); - } - }); - } - - /** - * Checks if database with passed name exists - */ - }, { - key: "databaseExists", - value: function databaseExists(name /*: string*/) /*: Promise*/{ - var _this2 = this; - return new indexeddb_Promise(function (resolve /*: (result: boolean) => void*/) { - var existed = true; - _this2.openDatabase(name, function () { - existed = false; - }).then(function (connection) { - connection.close(); - if (existed) { - return; - } - - // We didn't have this database before the check, so remove it - return _this2.deleteDatabaseByName(name); - }).then(function () { - return resolve(existed); - }); - }); - } - }, { - key: "cloneData", - value: function cloneData(defaultDbConnection /*: IDBDatabase*/, customDbConnection /*: IDBDatabase*/) /*: Promise*/{ - var _this3 = this; - // Function to clone a single store - var cloneStore = function cloneStore(storeName /*: ShortStoreName*/) { - var connection = _this3.indexedDbConnection; - _this3.indexedDbConnection = defaultDbConnection; - return _this3.getAll(storeName) // Get all records from default-named database - .then(function (records) { - _this3.indexedDbConnection = customDbConnection; - if (records.length < 1) { - // There is no records in the store - return; - } - return _this3.addBulk(storeName, records, true); // Put all records into custom-named database - }).then(function () { - _this3.indexedDbConnection = connection; // Restore initial state - }); - }; - - // Type guard to filter stores - function isStoreName(key /*: ShortStoreNames*/) /*: key is ShortStoreName*/{ - return key !== 'p'; - } - - // Get names of stores - var storeNames /*: ShortStoreName[]*/ = values(scheme_map.storeNames.left).map(function (store) { - return store.name; - }).filter(isStoreName); - var cloneStorePromises = storeNames.map(function (name) { - return function () { - return cloneStore(name); - }; - }); - - // Run clone operations one by one - return cloneStorePromises.reduce(function (previousTask, currentTask) { - return previousTask.then(currentTask); - }, indexeddb_Promise.resolve()); - } + // Run clone operations one by one + return cloneStorePromises.reduce(function (previousTask, currentTask) { + return previousTask.then(currentTask); + }, Promise.resolve()); + } /** * Migrates created database with default name to custom @@ -4029,7 +2289,7 @@ var IndexedDBWrapper = /*#__PURE__*/function () { return this.databaseExists(defaultName).then(function (defaultExists) { if (defaultExists) { // Migration hadn't finished yet - return indexeddb_Promise.all([_this4.openDatabase(defaultName, _this4.handleUpgradeNeeded, _this4.dbVersion), + return Promise.all([_this4.openDatabase(defaultName, _this4.handleUpgradeNeeded, _this4.dbVersion), // Open the default database, migrate version if needed _this4.openDatabase(customName, _this4.handleUpgradeNeeded, _this4.dbVersion) // Open or create a new database, migrate version if needed ]).then(function (_ref) { @@ -4109,7 +2369,7 @@ var IndexedDBWrapper = /*#__PURE__*/function () { value: function open() /*: Promise<{ success: boolean }>*/{ var _this5 = this; if (this.indexedDbConnection) { - return indexeddb_Promise.resolve({ + return Promise.resolve({ success: true }); } @@ -4192,7 +2452,6 @@ var IndexedDBWrapper = /*#__PURE__*/function () { if (action === Action.clear || !target) { return null; // No target needed when we clear the whole store } - var composite = this.getCompositeKeys(options); var needObjectTarget = [Action.add, Action.put].indexOf(action) !== -1; if (needObjectTarget) { @@ -4239,7 +2498,7 @@ var IndexedDBWrapper = /*#__PURE__*/function () { _ref8$mode = _ref8 /*:: */.mode, mode = _ref8$mode === void 0 ? AccessMode.readonly : _ref8$mode; return this.open().then(function () { - return new indexeddb_Promise(function (resolve, reject) { + return new Promise(function (resolve, reject) { if (!_this6.indexedDbConnection) { reject(_this6.noConnectionError); } else { @@ -4282,13 +2541,13 @@ var IndexedDBWrapper = /*#__PURE__*/function () { _ref9$mode = _ref9 /*:: */.mode, mode = _ref9$mode === void 0 ? AccessMode.readwrite : _ref9$mode; if (!target || target && !target.length) { - return indexeddb_Promise.reject({ + return Promise.reject({ name: 'NoTargetDefined', message: "No array provided to perform ".concat(action, " bulk operation into \"").concat(storeName, "\" store") }); } return this.open().then(function () { - return new indexeddb_Promise(function (resolve, reject) { + return new Promise(function (resolve, reject) { if (!_this7.indexedDbConnection) { reject(_this7.noConnectionError); } else { @@ -4340,7 +2599,7 @@ var IndexedDBWrapper = /*#__PURE__*/function () { _ref10$mode = _ref10 /*:: */.mode, mode = _ref10$mode === void 0 ? AccessMode.readonly : _ref10$mode; return this.open().then(function () { - return new indexeddb_Promise(function (resolve, reject) { + return new Promise(function (resolve, reject) { if (!_this8.indexedDbConnection) { reject(_this8.noConnectionError); } else { @@ -4382,7 +2641,7 @@ var IndexedDBWrapper = /*#__PURE__*/function () { key: "deleteDatabaseByName", value: function deleteDatabaseByName(dbName /*: string*/) /*: Promise*/{ var _this9 = this; - return new indexeddb_Promise(function (resolve, reject) { + return new Promise(function (resolve, reject) { var request = _this9.idbFactory.deleteDatabase(dbName); request.onerror = function (error) { return _this9.overrideError(reject, error); @@ -4542,7 +2801,7 @@ var IndexedDBWrapper = /*#__PURE__*/function () { value: function count(storeName /*: ShortStoreName*/) /*: Promise*/{ var _this11 = this; return this.open().then(function () { - return new indexeddb_Promise(function (resolve, reject) { + return new Promise(function (resolve, reject) { if (!_this11.indexedDbConnection) { reject(_this11.noConnectionError); } else { @@ -4601,15 +2860,11 @@ var IndexedDBWrapper = /*#__PURE__*/function () { }], [{ key: "tryOpen", value: - /** - * Cached promise of IndexedDB validation - */ - /** * Tries to open a temporary database */ function tryOpen(db /*: IDBFactory*/) /*: Promise*/{ - return new indexeddb_Promise(function (resolve) { + return new Promise(function (resolve) { try { var request = db.open(IndexedDBWrapper.dbValidationName); request.onsuccess = function () { @@ -4636,7 +2891,7 @@ var IndexedDBWrapper = /*#__PURE__*/function () { return IndexedDBWrapper.isSupportedPromise; } else { var notSupportedMessage = 'IndexedDB is not supported in this browser'; - IndexedDBWrapper.isSupportedPromise = new indexeddb_Promise(function (resolve) { + IndexedDBWrapper.isSupportedPromise = new Promise(function (resolve) { var indexedDB = IndexedDBWrapper.getIndexedDB(); var iOS = !!navigator.platform && /iPad|iPhone|iPod/.test(navigator.platform); if (!indexedDB || iOS) { @@ -4665,9 +2920,11 @@ var IndexedDBWrapper = /*#__PURE__*/function () { return window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB; } }]); - return IndexedDBWrapper; }(); _defineProperty(IndexedDBWrapper, "dbValidationName", 'validate-db-openable'); +/** + * Cached promise of IndexedDB validation + */ _defineProperty(IndexedDBWrapper, "isSupportedPromise", null); ;// CONCATENATED MODULE: ./src/sdk/storage/localstorage.ts @@ -4677,7 +2934,6 @@ _defineProperty(IndexedDBWrapper, "isSupportedPromise", null); -var localstorage_Promise = typeof Promise === 'undefined' ? (__webpack_require__(702).Promise) : Promise; @@ -4691,7 +2947,7 @@ var LocalStorageWrapper = /*#__PURE__*/function () { function LocalStorageWrapper() { _classCallCheck(this, LocalStorageWrapper); } - _createClass(LocalStorageWrapper, [{ + return _createClass(LocalStorageWrapper, [{ key: "open", value: /** @@ -4776,9 +3032,9 @@ var LocalStorageWrapper = /*#__PURE__*/function () { var options = scheme_map.right[convertStoreName(storeName, Direction.right)]; return this.open().then(function (open) { if (open.status === 'error') { - return localstorage_Promise.reject(open.error); + return Promise.reject(open.error); } - return new localstorage_Promise(function (resolve, reject) { + return new Promise(function (resolve, reject) { var items /*: Array*/ = quick_storage.stores[storeName]; var keys = _this.getKeys(storeName); var lastId = (items[items.length - 1] || {})[options.keyPath] || 0; @@ -4848,8 +3104,7 @@ var LocalStorageWrapper = /*#__PURE__*/function () { return composite.map(function (key) { return target[key]; }).filter(function (value) { - return (/*: value is StoredValue*/!valueIsRecord(value) - ); + return /*: value is StoredValue*/!valueIsRecord(value); }); } return target[options.keyPath]; @@ -4865,9 +3120,9 @@ var LocalStorageWrapper = /*#__PURE__*/function () { var firstOnly = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; return this.open().then(function (open) { if (open.status === 'error') { - return localstorage_Promise.reject(open.error); + return Promise.reject(open.error); } - return new localstorage_Promise(function (resolve, reject) { + return new Promise(function (resolve, reject) { var value = quick_storage.stores[storeName]; if (value instanceof Array) { resolve(firstOnly ? [value[0]] : _this2.sort(value, _this2.getKeys(storeName))); @@ -4954,2500 +3209,2029 @@ var LocalStorageWrapper = /*#__PURE__*/function () { message: "Constraint was not satisfied, trying to add existing item into \"".concat(storeName, "\" store") }); } else { - items.push(_this4.prepareTarget(options, item, _this4.nextIndex(lastId))); - quick_storage.stores[storeName] = items; - resolve(_this4.prepareResult(options, item)); - } - }); - } - - /** - * Add multiple items into particular store - */ - }, { - key: "addBulk", - value: function addBulk(storeName /*: ShortStoreName*/, target /*: Array*/, overwrite /*: boolean*/) /*: Promise>*/{ - var _this5 = this; - return this.initRequest({ - storeName: storeName - }, function (resolve, reject, _ref8) { - var keys = _ref8.keys, - items = _ref8.items, - options = _ref8.options, - lastId = _ref8.lastId; - if (!target || target && !target.length) { - reject({ - name: 'NoTargetDefined', - message: "No array provided to perform add bulk operation into \"".concat(storeName, "\" store") - }); - return; - } - var id = lastId; - var newItems = target.map(function (item) { - return _this5.prepareTarget(options, item, id = _this5.nextIndex(id)); - }); - var overlapping = newItems.filter(function (item) { - return findIndex(items, keys, item) !== -1; - }).map(function (item) { - return item[options.keyPath]; - }); - var currentItems = overwrite ? items.filter(function (item) { - return overlapping.indexOf(item[options.keyPath]) === -1; - }) : _toConsumableArray(items); - if (overlapping.length && !overwrite) { - reject({ - name: 'ConstraintError', - message: "Constraint was not satisfied, trying to add existing items into \"".concat(storeName, "\" store") - }); - } else { - quick_storage.stores[storeName] = _this5.sort([].concat(_toConsumableArray(currentItems), _toConsumableArray(newItems)), keys); - var result = target.map(function (item) { - return _this5.prepareResult(options, item); - }); - resolve(result); - } - }); - } - - /** - * Update item in a particular store - */ - }, { - key: "updateItem", - value: function updateItem(storeName /*: ShortStoreName*/, item /*: StoredRecord*/) /*: Promise*/{ - var _this6 = this; - return this.initRequest({ - storeName: storeName, - item: item - }, function (resolve, _, _ref9) { - var items = _ref9.items, - index = _ref9.index, - options = _ref9.options, - lastId = _ref9.lastId; - var nextId = index === -1 ? _this6.nextIndex(lastId) : undefined; - var target = _this6.prepareTarget(options, item, nextId); - if (index === -1) { - items.push(target); - } else { - items.splice(index, 1, target); - } - quick_storage.stores[storeName] = items; - resolve(_this6.prepareResult(options, item)); - }); - } - - /** - * Delete item from a particular store - */ - }, { - key: "deleteItem", - value: function deleteItem(storeName /*: ShortStoreName*/, id /*: StoredRecordId*/) /*: Promise*/{ - return this.initRequest({ - storeName: storeName, - id: id - }, function (resolve, _, _ref10) { - var items = _ref10.items, - index = _ref10.index; - if (index !== -1) { - items.splice(index, 1); - quick_storage.stores[storeName] = items; - } - resolve(id); - }); - } - - /** - * Find index of the item with the closest value to the bound - */ - }, { - key: "findMax", - value: function findMax(array /*: Array*/, key /*: string*/, value /*: StoredValue*/) /*: number*/{ - if (!array.length) { - return -1; - } - var max = { - index: -1, - value: typeof value === 'string' ? '' : 0 - }; - for (var i = 0; i < array.length; i += 1) { - if (array[i][key] <= value) { - if (array[i][key] >= max.value) { - max = { - value: array[i][key], - index: i - }; - } - } else { - return max.index; - } - } - return max.index; - } - - /** - * Delete items until certain bound (primary key as a bound scope) - * Returns array of deleted elements - */ - }, { - key: "deleteBulk", - value: function deleteBulk(storeName /*: ShortStoreName*/, value /*: StoredValue*/, condition /*: KeyRangeCondition*/) /*: Promise>*/{ - var _this7 = this; - return this.getAll(storeName).then(function (items /*: Array*/) { - var keys = _this7.getKeys(storeName); - var key = scheme_map.right[convertStoreName(storeName, Direction.right)].index || keys[0]; - var exact = condition ? null : value; - var sorted /*: Array*/ = _this7.sort(items, keys, exact); - var index = _this7.findMax(sorted, key, value); - if (index === -1) { - return []; - } - var start = condition === KeyRangeCondition.LowerBound ? index : 0; - var end = !condition || condition === KeyRangeCondition.UpperBound ? index + 1 : sorted.length; - var deleted /*: Array*/ = sorted.splice(start, end).map(function (item) { - return keys.length === 1 ? item[key] : keys.map(function (k) { - return item[k]; - }); - }); - quick_storage.stores[storeName] = sorted; - return deleted; - }); - } - - /** - * Trim the store from the left by specified length - */ - }, { - key: "trimItems", - value: function trimItems(storeName /*: ShortStoreName*/, length /*: number*/) /*: Promise>*/{ - var _this8 = this; - var convertedName = convertStoreName(storeName, Direction.right); - var options /*: StoreOptions*/ = scheme_map.right[convertedName]; - return this.getAll(storeName).then(function (records /*: Array>*/) { - return records.length ? records[length - 1] : null; - }).then(function (record) { - return record ? _this8.deleteBulk(storeName, record[options.keyPath], KeyRangeCondition.UpperBound) : []; - }); - } - - /** - * Count the number of records in the store - */ - }, { - key: "count", - value: function count(storeName /*: ShortStoreName*/) /*: Promise*/{ - return this.open().then(function (open) { - if (open.status === 'error') { - return localstorage_Promise.reject(open.error); - } - var records = quick_storage.stores[storeName]; - return localstorage_Promise.resolve(records instanceof Array ? records.length : 1); - }); - } - - /** - * Clear all records from a particular store - */ - }, { - key: "clear", - value: function clear(storeName /*: ShortStoreName*/) /*: Promise*/{ - return this.open().then(function (open) { - if (open.status === 'error') { - return localstorage_Promise.reject(open.error); + items.push(_this4.prepareTarget(options, item, _this4.nextIndex(lastId))); + quick_storage.stores[storeName] = items; + resolve(_this4.prepareResult(options, item)); } - return new localstorage_Promise(function (resolve) { - quick_storage.stores[storeName] = []; - resolve(); - }); }); } /** - * Does nothing, it simply matches the common storage interface - */ - }, { - key: "destroy", - value: function destroy() {} // eslint-disable-line - - /** - * Does nothing, it simply matches the common storage interface + * Add multiple items into particular store */ }, { - key: "deleteDatabase", - value: function deleteDatabase() {} // eslint-disable-line - }], [{ - key: "isSupported", - value: - /** - * Cached promise of LocalStorage validation - */ - - /** - * Check if LocalStorage is supported in the current browser - */ - function isSupported() /*: Promise*/{ - if (LocalStorageWrapper.isSupportedPromise) { - return LocalStorageWrapper.isSupportedPromise; - } else { - LocalStorageWrapper.isSupportedPromise = new localstorage_Promise(function (resolve /*: (value: boolean) => void*/) { - var supported = isLocalStorageSupported(); - if (!supported) { - logger.warn('LocalStorage is not supported in this browser'); - } - resolve(supported); + key: "addBulk", + value: function addBulk(storeName /*: ShortStoreName*/, target /*: Array*/, overwrite /*: boolean*/) /*: Promise>*/{ + var _this5 = this; + return this.initRequest({ + storeName: storeName + }, function (resolve, reject, _ref8) { + var keys = _ref8.keys, + items = _ref8.items, + options = _ref8.options, + lastId = _ref8.lastId; + if (!target || target && !target.length) { + reject({ + name: 'NoTargetDefined', + message: "No array provided to perform add bulk operation into \"".concat(storeName, "\" store") + }); + return; + } + var id = lastId; + var newItems = target.map(function (item) { + return _this5.prepareTarget(options, item, id = _this5.nextIndex(id)); }); - } - return LocalStorageWrapper.isSupportedPromise; + var overlapping = newItems.filter(function (item) { + return findIndex(items, keys, item) !== -1; + }).map(function (item) { + return item[options.keyPath]; + }); + var currentItems = overwrite ? items.filter(function (item) { + return overlapping.indexOf(item[options.keyPath]) === -1; + }) : _toConsumableArray(items); + if (overlapping.length && !overwrite) { + reject({ + name: 'ConstraintError', + message: "Constraint was not satisfied, trying to add existing items into \"".concat(storeName, "\" store") + }); + } else { + quick_storage.stores[storeName] = _this5.sort([].concat(_toConsumableArray(currentItems), _toConsumableArray(newItems)), keys); + var result = target.map(function (item) { + return _this5.prepareResult(options, item); + }); + resolve(result); + } + }); } - }]); - return LocalStorageWrapper; -}(); -_defineProperty(LocalStorageWrapper, "isSupportedPromise", null); - -;// CONCATENATED MODULE: ./src/sdk/storage/storage.ts - - -var storage_Promise = typeof Promise === 'undefined' ? (__webpack_require__(702).Promise) : Promise; - - - - - - - -var StorageType; -(function (StorageType) { - StorageType[StorageType["noStorage"] = STORAGE_TYPES.NO_STORAGE] = "noStorage"; - StorageType[StorageType["indexedDB"] = STORAGE_TYPES.INDEXED_DB] = "indexedDB"; - StorageType[StorageType["localStorage"] = STORAGE_TYPES.LOCAL_STORAGE] = "localStorage"; -})(StorageType || (StorageType = {})); -/** - * Methods to extend - */ -var _methods /*: CommonStorageMethods*/ = { - getAll: _getAll, - getFirst: _getFirst, - getItem: _getItem, - filterBy: _filterBy, - addItem: _addItem, - addBulk: _addBulk, - updateItem: _updateItem, - deleteItem: _deleteItem, - deleteBulk: _deleteBulk, - trimItems: _trimItems, - count: _count, - clear: _clear, - destroy: _destroy, - deleteDatabase: _deleteDatabase -}; - -/** - * Extends storage's getAll method by decoding returned records - */ -function _getAll(storage /*: IStorage*/, storeName /*: ShortStoreName*/, firstOnly /*: boolean*/) { - return storage.getAll(storeName, firstOnly).then(function (records) { - return convertRecords(storeName, Direction.right, records); - }); -} - -/** - * Extends storage's getFirst method by decoding returned record - */ -function _getFirst(storage /*: IStorage*/, storeName /*: ShortStoreName*/) { - return storage.getFirst(storeName).then(function (record) { - return convertRecord(storeName, Direction.right, record); - }); -} - -/** - * Extends storage's getItem method by encoding target value and then decoding returned record - */ -function _getItem(storage /*: IStorage*/, storeName /*: ShortStoreName*/, target /*: StoredRecordId*/) { - return storage.getItem(storeName, convertValues(storeName, Direction.left, target)).then(function (record) { - return convertRecord(storeName, Direction.right, record); - }).catch(function (error) { - return storage_Promise.reject(decodeErrorMessage(storeName, error)); - }); -} - -/** - * Extends storage's filterBy method by encoding target value and then decoding returned records - */ -function _filterBy(storage /*: IStorage*/, storeName /*: ShortStoreName*/, target /*: string*/) { - return storage.filterBy(storeName, encodeValue(target)).then(function (records) { - return convertRecords(storeName, Direction.right, records); - }); -} - -/** - * Extends storage's addItem method by encoding target record and then decoding returned keys - */ -function _addItem(storage /*: IStorage*/, storeName /*: ShortStoreName*/, record /*: StoredRecord*/) { - var convertedRecord = convertRecord(storeName, Direction.left, record); - return storage.addItem(storeName, convertedRecord).then(function (target) { - return convertValues(storeName, Direction.right, target); - }).catch(function (error) { - return storage_Promise.reject(decodeErrorMessage(storeName, error)); - }); -} - -/** - * Extends storage's addBulk method by encoding target records and then decoding returned keys - */ -function _addBulk(storage /*: IStorage*/, storeName /*: ShortStoreName*/, records /*: Array*/, overwrite /*: boolean*/) { - var convertedRecords /*: Array*/ = convertRecords(storeName, Direction.left, records); - return storage.addBulk(storeName, convertedRecords, overwrite).then(function (values) { - return values.map(function (target) { - return convertValues(storeName, Direction.right, target); - }); - }).catch(function (error) { - return storage_Promise.reject(decodeErrorMessage(storeName, error)); - }); -} - -/** - * Extends storage's updateItem method by encoding target record and then decoding returned keys - */ -function _updateItem(storage /*: IStorage*/, storeName /*: ShortStoreName*/, record /*: StoredRecord*/) { - var convertedRecord = convertRecord(storeName, Direction.left, record); - return storage.updateItem(storeName, convertedRecord).then(function (target) { - return convertValues(storeName, Direction.right, target); - }); -} - -/** - * Extends storage's deleteItem method by encoding target value and then decoding returned keys - */ -function _deleteItem(storage /*: IStorage*/, storeName /*: ShortStoreName*/, target /*: StoredRecordId*/) { - return storage.deleteItem(storeName, convertValues(storeName, Direction.left, target)).then(function (target) { - return convertValues(storeName, Direction.right, target); - }); -} - -/** - * Extends storage's deleteBulk method by encoding target value and then decoding returned records that are deleted - */ -function _deleteBulk(storage /*: IStorage*/, storeName /*: ShortStoreName*/, value /*: StoredValue*/, condition /*: KeyRangeCondition*/) { - return storage.deleteBulk(storeName, encodeValue(value), condition).then(function (records) { - return records.map(function (record) { - return convertValues(storeName, Direction.right, record); - }); - }); -} - -/** - * Extends storage's trimItems method by passing encoded storage name - */ -function _trimItems(storage /*: IStorage*/, storeName /*: ShortStoreName*/, length /*: number*/) { - return storage.trimItems(storeName, length); -} - -/** - * Extends storage's count method by passing encoded storage name - */ -function _count(storage /*: IStorage*/, storeName /*: ShortStoreName*/) { - return storage.count(storeName); -} - -/** - * Extends storage's clear method by passing encoded storage name - */ -function _clear(storage /*: IStorage*/, storeName /*: ShortStoreName*/) { - return storage.clear(storeName); -} - -/** - * Calls storage's destroy method - */ -function _destroy(storage /*: IStorage*/) { - return storage.destroy(); -} - -/** - * Calls storage's deleteDatabase method - */ -function _deleteDatabase(storage /*: IndexedDB | LocalStorage*/) { - return storage.deleteDatabase(); -} -/** - * Augment whitelisted methods with encoding/decoding functionality - */ -function _augment() /*: StorageMethods*/{ - var methods /*: Array<[MethodName, StorageMethod]>*/ = entries(_methods).map(function (_ref /*:: */) { - var _ref2 = _slicedToArray(_ref /*:: */, 2), - methodName = _ref2[0], - method = _ref2[1]; - var augmentedMethod /*: StorageMethod*/ = function augmentedMethod /*: StorageMethod*/(storeName /*: StoreName*/) { - for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { - args[_key - 1] = arguments[_key]; - } - return storage_init().then(function (_ref3) { - var storage = _ref3.storage; - if (storage) { - return method.call.apply(method, [null, storage, convertStoreName(storeName, Direction.left)].concat(args)); + /** + * Update item in a particular store + */ + }, { + key: "updateItem", + value: function updateItem(storeName /*: ShortStoreName*/, item /*: StoredRecord*/) /*: Promise*/{ + var _this6 = this; + return this.initRequest({ + storeName: storeName, + item: item + }, function (resolve, _, _ref9) { + var items = _ref9.items, + index = _ref9.index, + options = _ref9.options, + lastId = _ref9.lastId; + var nextId = index === -1 ? _this6.nextIndex(lastId) : undefined; + var target = _this6.prepareTarget(options, item, nextId); + if (index === -1) { + items.push(target); + } else { + items.splice(index, 1, target); } + quick_storage.stores[storeName] = items; + resolve(_this6.prepareResult(options, item)); }); - }; - return [methodName, augmentedMethod]; - }); - return methods.reduce(reducer, {}); -} - -/** - * Type of available storage - */ -var type /*: StorageType*/; - -/** - * Returns type of used storage which is one of possible values INDEXED_DB, LOCAL_STORAGE or NO_STORAGE if there is no - * storage available - */ -function getType() /*: StorageType*/{ - return type; -} + } -/** - * Cached promise of Storage initialization - */ -var _initializationPromise /*: Nullable>*/ = null; + /** + * Delete item from a particular store + */ + }, { + key: "deleteItem", + value: function deleteItem(storeName /*: ShortStoreName*/, id /*: StoredRecordId*/) /*: Promise*/{ + return this.initRequest({ + storeName: storeName, + id: id + }, function (resolve, _, _ref10) { + var items = _ref10.items, + index = _ref10.index; + if (index !== -1) { + items.splice(index, 1); + quick_storage.stores[storeName] = items; + } + resolve(id); + }); + } -/** - * Check which storage is available and pick it up - * Prefer indexedDB over localStorage - */ -function storage_init(dbName /*: string*/) /*: Promise*/{ - var storage /*: Nullable*/ = null; - if (_initializationPromise !== null) { - return _initializationPromise; - } else { - _initializationPromise = storage_Promise.all([IndexedDBWrapper.isSupported(), LocalStorageWrapper.isSupported()]).then(function (_ref4) { - var _ref5 = _slicedToArray(_ref4, 2), - idbSupported = _ref5[0], - lsSupported = _ref5[1]; - quick_storage.setCustomName(dbName); - if (idbSupported) { - type = StorageType.indexedDB; - var idb = new IndexedDBWrapper(); - return idb.setCustomName(dbName).then(function () { - return storage = idb; - }); - } else if (lsSupported) { - type = StorageType.localStorage; - storage = new LocalStorageWrapper(); - return storage_Promise.resolve(storage); - } else { - logger.error('There is no storage available, app will run with minimum set of features'); - type = StorageType.noStorage; - storage = null; - return storage_Promise.resolve(storage); + /** + * Find index of the item with the closest value to the bound + */ + }, { + key: "findMax", + value: function findMax(array /*: Array*/, key /*: string*/, value /*: StoredValue*/) /*: number*/{ + if (!array.length) { + return -1; } - }).then(function () { - return { - type: type, - storage: storage + var max = { + index: -1, + value: typeof value === 'string' ? '' : 0 }; - }); - } - return _initializationPromise; -} -/* harmony default export */ const storage = (_objectSpread2({ - init: storage_init, - getType: getType -}, _augment())); -;// CONCATENATED MODULE: ./src/sdk/default-params.js - - -var default_params_Promise = typeof Promise === 'undefined' ? (__webpack_require__(702).Promise) : Promise; -/*:: // -import { type NavigatorT, type CreatedAtT, type SentAtT, type WebUuidT, type TrackEnabledT, type PlatformT, type LanguageT, type MachineTypeT, type QueueSizeT, type DefaultParamsT } from './types';*/ - - - - -/** - * Get created at timestamp - * - * @returns {{createdAt: string}} - * @private - */ -function _getCreatedAt() /*: CreatedAtT*/{ - return { - createdAt: getTimestamp() - }; -} - -/** - * Get sent at timestamp - * - * @returns {{sentAt: string}} - * @private - */ -function _getSentAt() /*: SentAtT*/{ - return { - sentAt: getTimestamp() - }; -} + for (var i = 0; i < array.length; i += 1) { + if (array[i][key] <= value) { + if (array[i][key] >= max.value) { + max = { + value: array[i][key], + index: i + }; + } + } else { + return max.index; + } + } + return max.index; + } -/** - * Read uuid from the activity state - * - * @returns {{webUuid: string}} - * @private - */ -function _getWebUuid() /*: WebUuidT*/{ - return { - webUuid: activity_state.current.uuid - }; -} + /** + * Delete items until certain bound (primary key as a bound scope) + * Returns array of deleted elements + */ + }, { + key: "deleteBulk", + value: function deleteBulk(storeName /*: ShortStoreName*/, value /*: StoredValue*/, condition /*: KeyRangeCondition*/) /*: Promise>*/{ + var _this7 = this; + return this.getAll(storeName).then(function (items /*: Array*/) { + var keys = _this7.getKeys(storeName); + var key = scheme_map.right[convertStoreName(storeName, Direction.right)].index || keys[0]; + var exact = condition ? null : value; + var sorted /*: Array*/ = _this7.sort(items, keys, exact); + var index = _this7.findMax(sorted, key, value); + if (index === -1) { + return []; + } + var start = condition === KeyRangeCondition.LowerBound ? index : 0; + var end = !condition || condition === KeyRangeCondition.UpperBound ? index + 1 : sorted.length; + var deleted /*: Array*/ = sorted.splice(start, end).map(function (item) { + return keys.length === 1 ? item[key] : keys.map(function (k) { + return item[k]; + }); + }); + quick_storage.stores[storeName] = sorted; + return deleted; + }); + } -/** - * Get track enabled parameter by reading doNotTrack - * - * @returns {{trackingEnabled: boolean}|null} - * @private - */ -function _getTrackEnabled() /*: ?TrackEnabledT*/{ - var navigatorExt = (navigator /*: NavigatorT*/); - var isNavigatorDNT = typeof navigatorExt.doNotTrack !== 'undefined'; - var isWindowDNT = typeof window.doNotTrack !== 'undefined'; - var isMsDNT = typeof navigatorExt.msDoNotTrack !== 'undefined'; - var dnt = isNavigatorDNT ? navigatorExt.doNotTrack : isWindowDNT ? window.doNotTrack : isMsDNT ? navigatorExt.msDoNotTrack : null; - if (parseInt(dnt, 10) === 0 || dnt === 'no') { - return { - trackingEnabled: true - }; - } - if (parseInt(dnt, 10) === 1 || dnt === 'yes') { - return { - trackingEnabled: false - }; - } - return null; -} + /** + * Trim the store from the left by specified length + */ + }, { + key: "trimItems", + value: function trimItems(storeName /*: ShortStoreName*/, length /*: number*/) /*: Promise>*/{ + var _this8 = this; + var convertedName = convertStoreName(storeName, Direction.right); + var options /*: StoreOptions*/ = scheme_map.right[convertedName]; + return this.getAll(storeName).then(function (records /*: Array>*/) { + return records.length ? records[length - 1] : null; + }).then(function (record) { + return record ? _this8.deleteBulk(storeName, record[options.keyPath], KeyRangeCondition.UpperBound) : []; + }); + } -/** - * Get platform parameter => hardcoded to `web` - * - * @returns {{platform: string}} - * @private - */ -function _getPlatform() /*: PlatformT*/{ - return { - platform: 'web' - }; -} + /** + * Count the number of records in the store + */ + }, { + key: "count", + value: function count(storeName /*: ShortStoreName*/) /*: Promise*/{ + return this.open().then(function (open) { + if (open.status === 'error') { + return Promise.reject(open.error); + } + var records = quick_storage.stores[storeName]; + return Promise.resolve(records instanceof Array ? records.length : 1); + }); + } -/** - * Get language preferences - * - * @returns {{language: string, country: string|undefined}} - * @private - */ -function _getLanguage() /*: LanguageT*/{ - var navigatorExt = (navigator /*: NavigatorT*/); - var _split = (navigatorExt.language || navigatorExt.userLanguage || 'en').split('-'), - _split2 = _slicedToArray(_split, 2), - language = _split2[0], - country = _split2[1]; - return { - language: language, - country: country ? '' + country.toLowerCase() : undefined - }; -} + /** + * Clear all records from a particular store + */ + }, { + key: "clear", + value: function clear(storeName /*: ShortStoreName*/) /*: Promise*/{ + return this.open().then(function (open) { + if (open.status === 'error') { + return Promise.reject(open.error); + } + return new Promise(function (resolve) { + quick_storage.stores[storeName] = []; + resolve(); + }); + }); + } -/** - * Get machine type from navigator.platform property - * - * @returns {{machineType: (string|undefined)}} - */ -function _getMachineType() /*: MachineTypeT*/{ - var ua = navigator.userAgent || navigator.vendor; - var overrideWin32 = navigator.platform === 'Win32' && (ua.indexOf('WOW64') !== -1 || ua.indexOf('Win64') !== -1); - return { - machineType: overrideWin32 ? 'Win64' : navigator.platform - }; -} + /** + * Does nothing, it simply matches the common storage interface + */ + }, { + key: "destroy", + value: function destroy() {} // eslint-disable-line + /** + * Does nothing, it simply matches the common storage interface + */ + }, { + key: "deleteDatabase", + value: function deleteDatabase() {} // eslint-disable-line + }], [{ + key: "isSupported", + value: + /** + * Check if LocalStorage is supported in the current browser + */ + function isSupported() /*: Promise*/{ + if (LocalStorageWrapper.isSupportedPromise) { + return LocalStorageWrapper.isSupportedPromise; + } else { + LocalStorageWrapper.isSupportedPromise = new Promise(function (resolve /*: (value: boolean) => void*/) { + var supported = isLocalStorageSupported(); + if (!supported) { + logger.warn('LocalStorage is not supported in this browser'); + } + resolve(supported); + }); + } + return LocalStorageWrapper.isSupportedPromise; + } + }]); +}(); /** - * Get the current queue size - * - * @returns {Promise} - * @private + * Cached promise of LocalStorage validation */ -function _getQueueSize() /*: Promise*/{ - return storage.getAll('queue').then(function (records) { - return { - queueSize: records.length - }; - }); -} -function defaultParams() /*: Promise*/{ - return _getQueueSize().then(function (queueSize) { - return _objectSpread2(_objectSpread2(_objectSpread2(_objectSpread2(_objectSpread2(_objectSpread2(_objectSpread2(_objectSpread2({}, _getCreatedAt()), _getSentAt()), _getWebUuid()), _getTrackEnabled()), _getPlatform()), _getLanguage()), _getMachineType()), queueSize); - }); -} -;// CONCATENATED MODULE: ./src/sdk/http.js - - -var http_Promise = typeof Promise === 'undefined' ? (__webpack_require__(702).Promise) : Promise; -/*:: // -import { type UrlT, type DefaultParamsT, type HttpSuccessResponseT, type HttpErrorResponseT, type HttpRequestParamsT, type ErrorCodeT } from './types';*/ - +_defineProperty(LocalStorageWrapper, "isSupportedPromise", null); +;// CONCATENATED MODULE: ./src/sdk/storage/storage.ts -/*:: type ParamsWithAttemptsT = $PropertyType*/ -/** - * Get filtered response from successful request - * - * @param {Object} xhr - * @param {String} url - * @returns {Object} - * @private - */ -function _getSuccessResponse(xhr /*: XMLHttpRequest*/, url /*: UrlT*/) /*: HttpSuccessResponseT*/{ - var result = JSON.parse(xhr.responseText); - var response = { - status: 'success', - adid: result.adid, - timestamp: result.timestamp, - ask_in: result.ask_in, - retry_in: result.retry_in, - continue_in: result.continue_in, - tracking_state: result.tracking_state, - attribution: undefined, - message: undefined - }; - if (isRequest(url, 'attribution')) { - response.attribution = result.attribution; - response.message = result.message; - } - return entries(response).filter(function (_ref) { - var _ref2 = _slicedToArray(_ref, 2), - value = _ref2[1]; - return !!value; - }).reduce(reducer, {}); -} -/** - * Get an error object which is about to be passed to resolve or reject method - * - * @param {Object} xhr - * @param {string} code - * @param {boolean=} proceed - * @returns {Object} - * @private - */ -function _getErrorResponse(xhr /*: XMLHttpRequest*/, code /*: ErrorCodeT*/) /*: HttpErrorResponseT*/{ - var proceed /*: boolean*/ = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; - return { - status: 'error', - action: proceed ? 'CONTINUE' : 'RETRY', - response: isValidJson(xhr.responseText) ? JSON.parse(xhr.responseText) : xhr.responseText, - message: HTTP_ERRORS[code], - code: code - }; -} -/** - * Encode parameter depending on the type - * - * @param {string} key - * @param {*} value - * @returns {string} - * @private - */ -function _encodeParam(_ref3 /*:: */) /*: string*/{ - var _ref4 = _slicedToArray(_ref3 /*:: */, 2), - key = _ref4[0], - value = _ref4[1]; - var encodedKey = encodeURIComponent(key); - var encodedValue = value; - if (typeof value === 'string') { - encodedValue = encodeURIComponent(value); - } - if (isObject(value)) { - encodedValue = encodeURIComponent(JSON.stringify(value) || ''); - } - return [encodedKey, encodedValue].join('='); -} -/** - * Creates the log key with some spaces appended to it - * - * @param {string} header - * @param {string} str - * @returns {string} - * @private - */ -function _logKey(header /*: string*/, str /*: string*/) /*: string*/{ - var spaces = header.slice(0, header.length - str.length - 1).split('').reduce(function (acc) { - return acc.concat(' '); - }, ''); - return "".concat(str).concat(spaces, ":"); -} -/** - * Encode key-value pairs to be used in url - * - * @param {Object} params - * @param {Object} defaultParams - * @returns {string} - * @private - */ -function _encodeParams(params /*: ParamsWithAttemptsT*/, defaultParams /*: DefaultParamsT*/) /*: string*/{ - var logParamsHeader = 'REQUEST PARAMETERS:'; - var toSnakeCase = function toSnakeCase(key) { - return key.replace(/([A-Z])/g, function ($1) { - return "_".concat($1.toLowerCase()); - }); - }; - var allParams = entries(_objectSpread2(_objectSpread2(_objectSpread2({}, config.getBaseParams()), defaultParams), params)).map(function (_ref5 /*:: */) { - var _ref6 = _slicedToArray(_ref5 /*:: */, 2), - key = _ref6[0], - value = _ref6[1]; - return [toSnakeCase(key), value]; - }); - logger.log(logParamsHeader); - return allParams.filter(function (_ref7) { - var _ref8 = _slicedToArray(_ref7, 2), - value = _ref8[1]; - return isEmptyEntry(value); - }).map(function (_ref9) { - var _ref10 = _slicedToArray(_ref9, 2), - key = _ref10[0], - value = _ref10[1]; - logger.log(_logKey(logParamsHeader, key), value); - return _encodeParam([key, value]); - }).join('&'); -} +// eslint-disable-line @typescript-eslint/no-explicit-any +var StorageType = function (StorageType) { + StorageType[StorageType["noStorage"] = STORAGE_TYPES.NO_STORAGE] = "noStorage"; + StorageType[StorageType["indexedDB"] = STORAGE_TYPES.INDEXED_DB] = "indexedDB"; + StorageType[StorageType["localStorage"] = STORAGE_TYPES.LOCAL_STORAGE] = "localStorage"; + return StorageType; +}(StorageType || {}); /** - * Handle xhr response from server - * - * @param {Function} reject - * @param {Function} resolve - * @param {Object} xhr - * @param {string} url - * @private + * Methods to extend */ -function _handleReadyStateChange(reject, resolve, _ref11 /*:: */) { - var xhr = _ref11 /*:: */.xhr, - url = _ref11 /*:: */.url; - if (xhr.readyState !== 4) { - return; - } - var okStatus = xhr.status >= 200 && xhr.status < 300; - var validJson = isValidJson(xhr.responseText); - if (xhr.status === 0) { - reject(_getErrorResponse(xhr, 'NO_CONNECTION')); - } else { - if (validJson) { - return okStatus ? resolve(_getSuccessResponse(xhr, url)) : resolve(_getErrorResponse(xhr, 'SERVER_CANNOT_PROCESS', true)); - } else { - return okStatus ? reject(_getErrorResponse(xhr, 'SERVER_MALFORMED_RESPONSE')) : reject(_getErrorResponse(xhr, 'SERVER_INTERNAL_ERROR')); - } - } -} +var _methods /*: CommonStorageMethods*/ = { + getAll: _getAll, + getFirst: _getFirst, + getItem: _getItem, + filterBy: _filterBy, + addItem: _addItem, + addBulk: _addBulk, + updateItem: _updateItem, + deleteItem: _deleteItem, + deleteBulk: _deleteBulk, + trimItems: _trimItems, + count: _count, + clear: _clear, + destroy: _destroy, + deleteDatabase: _deleteDatabase +}; /** - * Prepare url and params depending on the resource type - * - * @param {string} url - * @param {string} method - * @param {Object} params - * @param {Object} defaultParams - * @returns {{encodedParams: string, fullUrl: string}} - * @private + * Extends storage's getAll method by decoding returned records */ -function _prepareUrlAndParams(_ref12 /*:: */, defaultParams /*: DefaultParamsT*/) /*: {fullUrl: string, encodedParams: string}*/{ - var endpoint = _ref12 /*:: */.endpoint, - url = _ref12 /*:: */.url, - method = _ref12 /*:: */.method, - params = _ref12 /*:: */.params; - var encodedParams = _encodeParams(params, defaultParams); - return { - fullUrl: endpoint + url + (method === 'GET' ? "?".concat(encodedParams) : ''), - encodedParams: encodedParams - }; +function _getAll(storage /*: IStorage*/, storeName /*: ShortStoreName*/, firstOnly /*: boolean*/) { + return storage.getAll(storeName, firstOnly).then(function (records) { + return convertRecords(storeName, Direction.right, records); + }); } /** - * Set headers for the xhr object - * - * @param {XMLHttpRequest} xhr - * @param {string} method - * @private + * Extends storage's getFirst method by decoding returned record */ -function _prepareHeaders(xhr /*: XMLHttpRequest*/, method /*: $PropertyType*/) /*: void*/{ - var logHeader = 'REQUEST HEADERS:'; - var headers = [['Client-SDK', "js".concat(globals.version)], ['Content-Type', method === 'POST' ? 'application/x-www-form-urlencoded' : 'application/json']]; - logger.log(logHeader); - headers.forEach(function (_ref13) { - var _ref14 = _slicedToArray(_ref13, 2), - key = _ref14[0], - value = _ref14[1]; - xhr.setRequestHeader(key, value); - logger.log(_logKey(logHeader, key), value); +function _getFirst(storage /*: IStorage*/, storeName /*: ShortStoreName*/) { + return storage.getFirst(storeName).then(function (record) { + return convertRecord(storeName, Direction.right, record); }); } /** - * Build xhr to perform all kind of api requests - * - * @param {string} url - * @param {string} [method='GET'] - * @param {Object} [params={}] - * @param {Object} defaultParams - * @returns {Promise} + * Extends storage's getItem method by encoding target value and then decoding returned record */ -function _buildXhr(_ref15 /*:: */, defaultParams /*: DefaultParamsT*/) /*: Promise*/{ - var endpoint = _ref15 /*:: */.endpoint, - url = _ref15 /*:: */.url, - _ref15$method = _ref15 /*:: */.method, - method = _ref15$method === void 0 ? 'GET' : _ref15$method, - _ref15$params = _ref15 /*:: */.params, - params = _ref15$params === void 0 ? {} : _ref15$params; - var _prepareUrlAndParams2 = _prepareUrlAndParams({ - endpoint: endpoint, - url: url, - method: method, - params: params - }, defaultParams), - fullUrl = _prepareUrlAndParams2.fullUrl, - encodedParams = _prepareUrlAndParams2.encodedParams; - return new http_Promise(function (resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open(method, fullUrl, true); - _prepareHeaders(xhr, method); - xhr.onreadystatechange = function () { - return _handleReadyStateChange(reject, resolve, { - xhr: xhr, - url: url - }); - }; - xhr.onerror = function () { - return reject(_getErrorResponse(xhr, 'TRANSACTION_ERROR')); - }; - xhr.send(method === 'GET' ? undefined : encodedParams); +function _getItem(storage /*: IStorage*/, storeName /*: ShortStoreName*/, target /*: StoredRecordId*/) { + return storage.getItem(storeName, convertValues(storeName, Direction.left, target)).then(function (record) { + return convertRecord(storeName, Direction.right, record); + }).catch(function (error) { + return Promise.reject(decodeErrorMessage(storeName, error)); }); } /** - * Intercept response from backend - * - * @param {Object} result - * @param {string} result.status - * @param {string} url - * @returns {Object} - * @private + * Extends storage's filterBy method by encoding target value and then decoding returned records */ -function _interceptResponse(result /*: HttpSuccessResponseT | HttpErrorResponseT*/, url /*: UrlT*/) /*: HttpSuccessResponseT | HttpErrorResponseT*/{ - if (result.status === 'success') { - return _interceptSuccess(result, url); - } - return result; +function _filterBy(storage /*: IStorage*/, storeName /*: ShortStoreName*/, target /*: string*/) { + return storage.filterBy(storeName, encodeValue(target)).then(function (records) { + return convertRecords(storeName, Direction.right, records); + }); } /** - * Intercept successful response from backend and: - * - always check if tracking_state is set to `opted_out` and if yes disable sdk - * - check if ask_in parameter is present in order to check if attribution have been changed - * - emit session finish event if session request - * - * @param {Object} result - * @param {string} result.tracking_state - * @param {number} result.ask_in - * @param {string} url - * @returns {Object} - * @private + * Extends storage's addItem method by encoding target record and then decoding returned keys */ -function _interceptSuccess(result /*: HttpSuccessResponseT*/, url) /*: HttpSuccessResponseT*/{ - var isGdprRequest = isRequest(url, 'gdpr_forget_device'); - var isAttributionRequest = isRequest(url, 'attribution'); - var isSessionRequest = isRequest(url, 'session'); - var isThirdPartySharingOptOutRequest = isRequest(url, 'disable_third_party_sharing'); - var optedOut = result.tracking_state === 'opted_out'; - if (!isGdprRequest && optedOut) { - publish('sdk:gdpr-forget-me'); - return result; - } - if (!isAttributionRequest && !isGdprRequest && !optedOut && result.ask_in) { - publish('attribution:check', result); - } - if (isSessionRequest) { - publish('session:finished', result); - } - if (isThirdPartySharingOptOutRequest) { - publish('sdk:third-party-sharing-opt-out'); - return result; - } - return result; +function _addItem(storage /*: IStorage*/, storeName /*: ShortStoreName*/, record /*: StoredRecord*/) { + var convertedRecord = convertRecord(storeName, Direction.left, record); + return storage.addItem(storeName, convertedRecord).then(function (target) { + return convertValues(storeName, Direction.right, target); + }).catch(function (error) { + return Promise.reject(decodeErrorMessage(storeName, error)); + }); } /** - * Http request factory to perform all kind of api requests - * - * @param {Object} options - * @returns {Promise} + * Extends storage's addBulk method by encoding target records and then decoding returned keys */ -function http(options /*: HttpRequestParamsT*/) /*: Promise*/{ - return defaultParams().then(function (defaultParams) { - return _buildXhr(options, defaultParams); - }).then(function (result) { - return _interceptResponse(result, options.url); +function _addBulk(storage /*: IStorage*/, storeName /*: ShortStoreName*/, records /*: Array*/, overwrite /*: boolean*/) { + var convertedRecords /*: Array*/ = convertRecords(storeName, Direction.left, records); + return storage.addBulk(storeName, convertedRecords, overwrite).then(function (values) { + return values.map(function (target) { + return convertValues(storeName, Direction.right, target); + }); + }).catch(function (error) { + return Promise.reject(decodeErrorMessage(storeName, error)); }); } -;// CONCATENATED MODULE: ./src/sdk/backoff.js -/*:: // -import { type BackOffStrategyT } from './types';*/ - /** - * Options for the back-off strategy for different environments - * - * @type {Object} + * Extends storage's updateItem method by encoding target record and then decoding returned keys */ -var _options = { - long: { - delay: 2 * MINUTE, - maxDelay: DAY, - minRange: 0.5, - maxRange: 1.0 - }, - short: { - delay: 200, - maxDelay: HOUR, - minRange: 0.5, - maxRange: 1.0 - }, - test: { - delay: 100, - maxDelay: 300 - } -}; +function _updateItem(storage /*: IStorage*/, storeName /*: ShortStoreName*/, record /*: StoredRecord*/) { + var convertedRecord = convertRecord(storeName, Direction.left, record); + return storage.updateItem(storeName, convertedRecord).then(function (target) { + return convertValues(storeName, Direction.right, target); + }); +} /** - * Get random number in provided range - * - * @param {number} min - * @param {number} max - * @returns {number} - * @private + * Extends storage's deleteItem method by encoding target value and then decoding returned keys */ -function _randomInRange(min, max) { - return Math.random() * (max - min) + min; +function _deleteItem(storage /*: IStorage*/, storeName /*: ShortStoreName*/, target /*: StoredRecordId*/) { + return storage.deleteItem(storeName, convertValues(storeName, Direction.left, target)).then(function (target) { + return convertValues(storeName, Direction.right, target); + }); } /** - * Calculate exponential back-off with optional jitter factor applied - * - * @param {number} attempts - * @param {string} strategy - * @returns {number} + * Extends storage's deleteBulk method by encoding target value and then decoding returned records that are deleted */ -function backOff(attempts /*: number*/, strategy /*: ?BackOffStrategyT*/) /*: number*/{ - strategy = strategy || 'long'; - var options = false ? 0 : _options[strategy]; - var delay = options.delay * Math.pow(2, attempts - 1); - delay = Math.min(delay, options.maxDelay); - if (options.minRange && options.maxRange) { - delay = delay * _randomInRange(options.minRange, options.maxRange); - } - return Math.round(delay); +function _deleteBulk(storage /*: IStorage*/, storeName /*: ShortStoreName*/, value /*: StoredValue*/, condition /*: KeyRangeCondition*/) { + return storage.deleteBulk(storeName, encodeValue(value), condition).then(function (records) { + return records.map(function (record) { + return convertValues(storeName, Direction.right, record); + }); + }); } -;// CONCATENATED MODULE: ./src/sdk/listeners.js - -/*:: // -import { type DocumentT } from './types';*/ - -/*:: type EventCbT = (e: Event) => void*/ -/*:: type PageVisibilityHiddenAttr = 'hidden' | 'mozHidden' | 'msHidden' | 'oHidden' | 'webkitHidden'*/ -/*:: type PageVisibilityEventName = 'visibilitychange' | 'mozvisibilitychange' | 'msvisibilitychange' | 'ovisibilitychange' | 'webkitvisibilitychange'*/ -/*:: type PageVisibilityApiMap = {| - hidden: PageVisibilityHiddenAttr, - visibilityChange: PageVisibilityEventName -|}*/ -var _connected /*: boolean*/ = navigator.onLine; /** - * Bind to online and offline events + * Extends storage's trimItems method by passing encoded storage name */ -function register() /*: void*/{ - on(window, 'online', _handleOnline); - on(window, 'offline', _handleOffline); +function _trimItems(storage /*: IStorage*/, storeName /*: ShortStoreName*/, length /*: number*/) { + return storage.trimItems(storeName, length); } /** - * Handle online event, set connected flag to true - * - * @private + * Extends storage's count method by passing encoded storage name */ -function _handleOnline() /*: void*/{ - _connected = true; +function _count(storage /*: IStorage*/, storeName /*: ShortStoreName*/) { + return storage.count(storeName); } /** - * Handle offline event, set connected flag to false - * @private + * Extends storage's clear method by passing encoded storage name */ -function _handleOffline() /*: void*/{ - _connected = false; +function _clear(storage /*: IStorage*/, storeName /*: ShortStoreName*/) { + return storage.clear(storeName); } /** - * Bind event to an element - * - * @param {Window|Document} element - * @param {string} eventName - * @param {Function} func + * Calls storage's destroy method */ -function on(element /*: Document | any*/, eventName /*: string*/, func /*: EventCbT*/) /*: void*/{ - if (element.addEventListener) { - element.addEventListener(eventName, func, false); - } +function _destroy(storage /*: IStorage*/) { + return storage.destroy(); } /** - * Unbind event off an element - * - * @param {Window|Document} element - * @param {string} eventName - * @param {Function} func + * Calls storage's deleteDatabase method */ -function off(element /*: Document | any*/, eventName /*: string*/, func /*: EventCbT*/) /*: void*/{ - if (element.removeEventListener) { - element.removeEventListener(eventName, func, false); - } +function _deleteDatabase(storage /*: IndexedDB | LocalStorage*/) { + return storage.deleteDatabase(); } /** - * Get Page Visibility API attributes that can be accessed depending on the browser implementation - * - * @returns {{hidden: string, visibilityChange: string}|null} - * @private + * Augment whitelisted methods with encoding/decoding functionality */ -function getVisibilityApiAccess() /*: ?PageVisibilityApiMap*/{ - var documentExt = (document /*: DocumentT*/); - if (typeof documentExt.hidden !== 'undefined') { - return { - hidden: 'hidden', - visibilityChange: 'visibilitychange' +function _augment() /*: StorageMethods*/{ + var methods /*: Array<[MethodName, StorageMethod]>*/ = entries(_methods).map(function (_ref /*:: */) { + var _ref2 = _slicedToArray(_ref /*:: */, 2), + methodName = _ref2[0], + method = _ref2[1]; + var augmentedMethod /*: StorageMethod*/ = function augmentedMethod /*: StorageMethod*/(storeName /*: StoreName*/) { + for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + args[_key - 1] = arguments[_key]; + } + return storage_init().then(function (_ref3) { + var storage = _ref3.storage; + if (storage) { + return method.call.apply(method, [null, storage, convertStoreName(storeName, Direction.left)].concat(args)); + } + }); }; - } - var accessMap /*: {[key: PageVisibilityHiddenAttr]: PageVisibilityEventName}*/ = { - mozHidden: 'mozvisibilitychange', - msHidden: 'msvisibilitychange', - oHidden: 'ovisibilitychange', - webkitHidden: 'webkitvisibilitychange' - }; - var accessMapEntries = entries(accessMap); - for (var i = 0; i < accessMapEntries.length; i += 1) { - var _accessMapEntries$i = _slicedToArray(accessMapEntries[i], 2), - hidden = _accessMapEntries$i[0], - visibilityChange = _accessMapEntries$i[1]; - if (typeof documentExt[hidden] !== 'undefined') { - return { - hidden: hidden, - visibilityChange: visibilityChange - }; - } - } - return null; + return [methodName, augmentedMethod]; + }); + return methods.reduce(reducer, {}); } /** - * Check if connected to internet - * - * @returns {boolean} + * Type of available storage */ -function isConnected() /*: boolean*/{ - return _connected; -} +var type /*: StorageType*/; /** - * Unbind from online and offline events + * Returns type of used storage which is one of possible values INDEXED_DB, LOCAL_STORAGE or NO_STORAGE if there is no + * storage available */ -function listeners_destroy() /*: void*/{ - off(window, 'online', _handleOnline); - off(window, 'offline', _handleOffline); +function getType() /*: StorageType*/{ + return type; } -;// CONCATENATED MODULE: ./src/sdk/url-strategy.ts - -var _endpointMap; - - - -var UrlStrategy; -(function (UrlStrategy) { - UrlStrategy["Default"] = "default"; - UrlStrategy["India"] = "india"; - UrlStrategy["China"] = "china"; -})(UrlStrategy || (UrlStrategy = {})); -var DataResidency; -(function (DataResidency) { - DataResidency["EU"] = "EU"; - DataResidency["TR"] = "TR"; - DataResidency["US"] = "US"; -})(DataResidency || (DataResidency = {})); -function incorrectOptionIgnoredMessage(higherPriority /*: string*/, lowerPriority /*: string*/) { - logger.warn("Both ".concat(higherPriority, " and ").concat(lowerPriority, " are set in config, ").concat(lowerPriority, " will be ignored")); -} +/** + * Cached promise of Storage initialization + */ +var _initializationPromise /*: Nullable>*/ = null; /** - * Returns a map of base URLs or a list of endpoint names depending on SDK configuration + * Check which storage is available and pick it up + * Prefer indexedDB over localStorage */ -function getEndpointPreference() /*: BaseUrlsMap | EndpointName[]*/{ - var _Config$getCustomConf = config.getCustomConfig(), - customUrl = _Config$getCustomConf.customUrl, - urlStrategy = _Config$getCustomConf.urlStrategy, - dataResidency = _Config$getCustomConf.dataResidency; - if (customUrl) { - // If custom URL is set then send all requests there - if (dataResidency || urlStrategy) { - incorrectOptionIgnoredMessage('customUrl', dataResidency ? 'dataResidency' : 'urlStrategy'); - } - return { - app: customUrl, - gdpr: customUrl - }; - } - if (dataResidency && urlStrategy) { - incorrectOptionIgnoredMessage('dataResidency', 'urlStrategy'); - } - if (dataResidency) { - return [dataResidency]; - } - if (urlStrategy === UrlStrategy.India) { - return [UrlStrategy.India, UrlStrategy.Default]; - } - if (urlStrategy === UrlStrategy.China) { - return [UrlStrategy.China, UrlStrategy.Default]; - } - return [UrlStrategy.Default, UrlStrategy.India, UrlStrategy.China]; -} -var endpointMap /*: Record*/ = (_endpointMap = {}, _defineProperty(_endpointMap, UrlStrategy.Default, ENDPOINTS["default"]), _defineProperty(_endpointMap, UrlStrategy.India, ENDPOINTS.india), _defineProperty(_endpointMap, UrlStrategy.China, ENDPOINTS.china), _defineProperty(_endpointMap, DataResidency.EU, ENDPOINTS.EU), _defineProperty(_endpointMap, DataResidency.TR, ENDPOINTS.TR), _defineProperty(_endpointMap, DataResidency.US, ENDPOINTS.US), _endpointMap); -function getPreferredUrls(endpoints /*: Partial>*/) /*: BaseUrlsMap[]*/{ - var preference = getEndpointPreference(); - if (!Array.isArray(preference)) { - return [preference]; +function storage_init(dbName /*: string*/) /*: Promise*/{ + var storage /*: Nullable*/ = null; + if (_initializationPromise !== null) { + return _initializationPromise; } else { - var res = preference.map(function (strategy) { - return endpoints[strategy] || null; - }).filter(function (i) { - return (/*: i is BaseUrlsMap*/!!i - ); - }); - return res; - } -} -function getBaseUrlsIterator() /*: BaseUrlsIterator*/{ - var endpoints /*: Partial>*/ = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : endpointMap; - var _urls = getPreferredUrls(endpoints); - var _counter = 0; - return { - next: function next() { - if (_counter < _urls.length) { - return { - value: _urls[_counter++], - done: false - }; - } else { - return { - value: undefined, - done: true - }; - } - }, - reset: function reset() { - _counter = 0; - } - }; -} - -;// CONCATENATED MODULE: ./src/sdk/request.js - - -var request_Promise = typeof Promise === 'undefined' ? (__webpack_require__(702).Promise) : Promise; -/*:: // -import { type HttpSuccessResponseT, type HttpErrorResponseT, type HttpContinueCbT, type BackOffStrategyT, type WaitT, type UrlT, type MethodT, type RequestParamsT, type HttpRequestParamsT } from './types';*/ - - - - - - - - -/*:: type RequestConfigT = {| - url?: UrlT, - method?: MethodT, - params?: RequestParamsT, - continueCb?: HttpContinueCbT, - strategy?: BackOffStrategyT, - wait?: ?WaitT -|}*/ -/*:: type DefaultConfigT = {| - url?: UrlT, - method: MethodT, - params?: RequestParamsT, - continueCb?: HttpContinueCbT -|}*/ -/*:: type AttemptsT = number*/ -/*:: type StartAtT = number*/ -var DEFAULT_ATTEMPTS /*: AttemptsT*/ = 0; -var DEFAULT_WAIT /*: WaitT*/ = 150; -var MAX_WAIT /*: WaitT*/ = 0x7FFFFFFF; // 2^31 - 1 -var NO_CONNECTION_WAIT = 60 * SECOND; -var Request = function Request() { - var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, - url = _ref.url, - _ref$method = _ref.method, - method = _ref$method === void 0 ? 'GET' : _ref$method, - _ref$params = _ref.params, - params = _ref$params === void 0 ? {} : _ref$params, - continueCb = _ref.continueCb, - strategy = _ref.strategy, - wait = _ref.wait; - /** - * Global param values set on request instantiation and later used for restore - * - * @type {{url: string, method: string, params: Object, continueCb: Function}} - * @private - */ - var _default /*: DefaultConfigT*/ = { - url: url, - method: method, - params: params, - continueCb: continueCb - }; - - /** - * Url param per instance or per request - * - * @type {string} - * @private - */ - var _url /*: ?UrlT*/ = url; + _initializationPromise = Promise.all([IndexedDBWrapper.isSupported(), LocalStorageWrapper.isSupported()]).then(function (_ref4) { + var _ref5 = _slicedToArray(_ref4, 2), + idbSupported = _ref5[0], + lsSupported = _ref5[1]; + quick_storage.setCustomName(dbName); + if (idbSupported) { + type = StorageType.indexedDB; + var idb = new IndexedDBWrapper(); + return idb.setCustomName(dbName).then(function () { + return storage = idb; + }); + } else if (lsSupported) { + type = StorageType.localStorage; + storage = new LocalStorageWrapper(); + return Promise.resolve(storage); + } else { + logger.error('There is no storage available, app will run with minimum set of features'); + type = StorageType.noStorage; + storage = null; + return Promise.resolve(storage); + } + }).then(function () { + return { + type: type, + storage: storage + }; + }); + } + return _initializationPromise; +} +/* harmony default export */ const storage = (_objectSpread2({ + init: storage_init, + getType: getType +}, _augment())); +;// CONCATENATED MODULE: ./src/sdk/default-params.js - /** - * Method param per instance or per request, defaults to `GET` - * - * @type {string} - * @private - */ - var _method /*: MethodT*/ = method; - /** - * Request params per instance or per request - * - * @type {Object} - * @private - */ - var _params /*: RequestParamsT*/ = _objectSpread2({}, params); +/*:: // +import { type NavigatorT, type CreatedAtT, type SentAtT, type WebUuidT, type TrackEnabledT, type PlatformT, type LanguageT, type MachineTypeT, type QueueSizeT, type DefaultParamsT } from './types';*/ - /** - * Optional continue callback per instance or per request - * - * @type {Function} - * @private - */ - var _continueCb /*: ?HttpContinueCbT*/ = continueCb; - /** - * Back-off strategy - * - * @type {string|null} - * @private - */ - var _strategy /*: ?BackOffStrategyT*/ = strategy; - /** - * Url Startegy iterator to go through endpoints to retry to send request - */ - var _baseUrlsIterator /*: BaseUrlsIterator*/; - /** - * Current base urls map to send request - */ - var _baseUrlsIteratorCurrent /*: { value: BaseUrlsMap, done: boolean }*/; +/** + * Get created at timestamp + * + * @returns {{createdAt: string}} + * @private + */ +function _getCreatedAt() /*: CreatedAtT*/{ + return { + createdAt: getTimestamp() + }; +} - /** - * Reset iterator state and get the first endpoint to use it in the next try - */ - var _resetBaseUrlsIterator = function _resetBaseUrlsIterator() { - _baseUrlsIterator.reset(); - _baseUrlsIteratorCurrent = _baseUrlsIterator.next(); +/** + * Get sent at timestamp + * + * @returns {{sentAt: string}} + * @private + */ +function _getSentAt() /*: SentAtT*/{ + return { + sentAt: getTimestamp() }; +} - /** - * Returns base url depending on request path - */ - var _getBaseUrl = function _getBaseUrl(urlsMap /*: BaseUrlsMap*/, url /*: UrlT*/) /*: string*/{ - var base = url === '/gdpr_forget_device' ? 'gdpr' : 'app'; - return urlsMap[base]; +/** + * Read uuid from the activity state + * + * @returns {{webUuid: string}} + * @private + */ +function _getWebUuid() /*: WebUuidT*/{ + return { + webUuid: activity_state.current.uuid }; +} - /** - * Timeout id to be used for clearing - * - * @type {number|null} - * @private - */ - var _timeoutId /*: ?TimeoutID*/ = null; +/** + * Get track enabled parameter by reading doNotTrack + * + * @returns {{trackingEnabled: boolean}|null} + * @private + */ +function _getTrackEnabled() /*: ?TrackEnabledT*/{ + var navigatorExt = (navigator /*: NavigatorT*/); + var isNavigatorDNT = typeof navigatorExt.doNotTrack !== 'undefined'; + var isWindowDNT = typeof window.doNotTrack !== 'undefined'; + var isMsDNT = typeof navigatorExt.msDoNotTrack !== 'undefined'; + var dnt = isNavigatorDNT ? navigatorExt.doNotTrack : isWindowDNT ? window.doNotTrack : isMsDNT ? navigatorExt.msDoNotTrack : null; + if (parseInt(dnt, 10) === 0 || dnt === 'no') { + return { + trackingEnabled: true + }; + } + if (parseInt(dnt, 10) === 1 || dnt === 'yes') { + return { + trackingEnabled: false + }; + } + return null; +} - /** - * Number of request and connection attempts - * - * @type {{request: number, connection: number}} - * @private - */ - var _attempts - /*: { - request: AttemptsT, - connection: AttemptsT - }*/ - = { - request: DEFAULT_ATTEMPTS, - connection: DEFAULT_ATTEMPTS +/** + * Get platform parameter => hardcoded to `web` + * + * @returns {{platform: string}} + * @private + */ +function _getPlatform() /*: PlatformT*/{ + return { + platform: 'web' }; +} - /** - * Waiting time for the request to be sent - * - * @type {number} - * @private - */ - var _wait /*: WaitT*/ = _prepareWait(wait); - - /** - * Timestamp when the request has been scheduled - * - * @type {Date|null} - * @private - */ - var _startAt /*: ?StartAtT*/ = null; +/** + * Get language preferences + * + * @returns {{language: string, country: string|undefined}} + * @private + */ +function _getLanguage() /*: LanguageT*/{ + var navigatorExt = (navigator /*: NavigatorT*/); + var _split = (navigatorExt.language || navigatorExt.userLanguage || 'en').split('-'), + _split2 = _slicedToArray(_split, 2), + language = _split2[0], + country = _split2[1]; + return { + language: language, + country: country ? '' + country.toLowerCase() : undefined + }; +} - /** - * Ensure that wait is not more than maximum 32int so it does not cause overflow in setTimeout - * - * @param {number} wait - * @returns {number} - * @private - */ - function _prepareWait(wait /*: ?WaitT*/) /*: WaitT*/{ - wait = wait || DEFAULT_WAIT; - return wait > MAX_WAIT ? MAX_WAIT : wait; - } +/** + * Get machine type from navigator.platform property + * + * @returns {{machineType: (string|undefined)}} + */ +function _getMachineType() /*: MachineTypeT*/{ + var ua = navigator.userAgent || navigator.vendor; + var overrideWin32 = navigator.platform === 'Win32' && (ua.indexOf('WOW64') !== -1 || ua.indexOf('Win64') !== -1); + return { + machineType: overrideWin32 ? 'Win64' : navigator.platform + }; +} - /** - * Override current parameters if available - * - * @param {string=} url - * @param {string=} method - * @param {Object=} params - * @param {Function=} continueCb - * @private - */ - function _prepareParams(_ref2 /*:: */) /*: void*/{ - var url = _ref2 /*:: */.url, - method = _ref2 /*:: */.method, - params = _ref2 /*:: */.params, - continueCb = _ref2 /*:: */.continueCb; - if (url) { - _url = url; - } - if (method) { - _method = method; - } - if (!isEmpty(params)) { - _params = _objectSpread2({}, params); - } - _params = _objectSpread2({ - createdAt: getTimestamp() - }, _params); - if (typeof continueCb === 'function') { - _continueCb = continueCb; - } - } +/** + * Get the current queue size + * + * @returns {Promise} + * @private + */ +function _getQueueSize() /*: Promise*/{ + return storage.getAll('queue').then(function (records) { + return { + queueSize: records.length + }; + }); +} +function defaultParams() /*: Promise*/{ + return _getQueueSize().then(function (queueSize) { + return _objectSpread2(_objectSpread2(_objectSpread2(_objectSpread2(_objectSpread2(_objectSpread2(_objectSpread2(_objectSpread2({}, _getCreatedAt()), _getSentAt()), _getWebUuid()), _getTrackEnabled()), _getPlatform()), _getLanguage()), _getMachineType()), queueSize); + }); +} +;// CONCATENATED MODULE: ./src/sdk/http.js - /** - * Clear previous attempt if new one is about to happen faster - * - * @param {number} wait - * @returns {boolean} - * @private - */ - function _skip(wait /*: ?WaitT*/) /*: boolean*/{ - if (!_startAt) { - return false; - } - if (_timeoutId) { - var remainingTime = _wait - (Date.now() - _startAt); - if (wait && remainingTime < wait) { - return true; - } - clear(); - } - return false; - } - /** - * Prepare request to be sent away - * - * @param {number=} wait - * @param {boolean=false} retrying - * @returns {Promise} - * @private - */ - function _prepareRequest(_ref3 /*:: */) /*: Promise*/{ - var wait = _ref3 /*:: */.wait, - retrying = _ref3 /*:: */.retrying; - if (!_baseUrlsIterator) { - _baseUrlsIterator = getBaseUrlsIterator(); - _baseUrlsIteratorCurrent = _baseUrlsIterator.next(); - } - _wait = wait ? _prepareWait(wait) : _wait; - if (_skip(wait)) { - return request_Promise.resolve({ - status: 'error', - action: 'CONTINUE', - response: '', - message: HTTP_ERRORS.SKIP, - code: 'SKIP' - }); - } - if (!_url) { - logger.error('You must define url for the request to be sent'); - return request_Promise.reject({ - status: 'error', - action: 'CONTINUE', - response: '', - message: HTTP_ERRORS.MISSING_URL, - code: 'MISSING_URL' - }); - } - logger.log("".concat(retrying ? 'Re-trying' : 'Trying', " request ").concat(_url, " in ").concat(_wait, "ms")); - _startAt = Date.now(); - return _preRequest({ - endpoint: _getBaseUrl(_baseUrlsIteratorCurrent.value, _url), - url: _url, - method: _method, - params: _objectSpread2({ - attempts: 1 - }, _params) - }); - } +/*:: // +import { type UrlT, type DefaultParamsT, type HttpSuccessResponseT, type HttpErrorResponseT, type HttpRequestParamsT, type ErrorCodeT } from './types';*/ - /** - * Check if there is internet connect and if not then setup the timeout - * - * @param {Object} options - * @returns {Promise} - * @private - */ - function _preRequest(options /*: HttpRequestParamsT*/) /*: Promise*/{ - _clearTimeout(); - if (isConnected()) { - return _request(options); - } - _attempts.connection += 1; - logger.log("No internet connectivity, trying request ".concat(options.url, " in ").concat(NO_CONNECTION_WAIT, "ms")); - return new request_Promise(function (resolve) { - _timeoutId = setTimeout(function () { - resolve(_preRequest(options)); - }, NO_CONNECTION_WAIT); - }); - } - /** - * Do the timed-out request with retry mechanism - * - * @param {Object} options - * @returns {Promise} - * @private - */ - function _request(options /*: HttpRequestParamsT*/) /*: Promise*/{ - return new request_Promise(function (resolve, reject) { - _timeoutId = setTimeout(function () { - _startAt = null; - var filteredParams = entries(options.params).filter(function (_ref4) { - var _ref5 = _slicedToArray(_ref4, 2), - value = _ref5[1]; - return isEmptyEntry(value); - }).reduce(reducer, {}); - return http({ - endpoint: options.endpoint, - url: options.url, - method: options.method, - params: _objectSpread2(_objectSpread2({}, filteredParams), {}, { - attempts: (_attempts.request ? _attempts.request + 1 : 1) + _attempts.connection - }) - }).then(function (result) { - return _continue(result, resolve); - }).catch(function (result) { - return _error(result, resolve, reject); - }); - }, _wait); - }); - } - /** - * Restore to global parameters - * - * @private - */ - function _restore() /*: void*/{ - _url = _default.url; - _method = _default.method; - _params = _objectSpread2({}, _default.params); - _continueCb = _default.continueCb; + + + + +/*:: type ParamsWithAttemptsT = $PropertyType*/ +/** + * Get filtered response from successful request + * + * @param {Object} xhr + * @param {String} url + * @returns {Object} + * @private + */ +function _getSuccessResponse(xhr /*: XMLHttpRequest*/, url /*: UrlT*/) /*: HttpSuccessResponseT*/{ + var result = JSON.parse(xhr.responseText); + var response = { + status: 'success', + adid: result.adid, + timestamp: result.timestamp, + ask_in: result.ask_in, + retry_in: result.retry_in, + continue_in: result.continue_in, + tracking_state: result.tracking_state, + attribution: undefined, + message: undefined + }; + if (isRequest(url, 'attribution')) { + response.attribution = result.attribution; + response.message = result.message; } + return entries(response).filter(function (_ref) { + var _ref2 = _slicedToArray(_ref, 2), + value = _ref2[1]; + return !!value; + }).reduce(reducer, {}); +} - /** - * Finish the request by restoring and clearing - * - * @param {boolean=false} failed - * @private - */ - function _finish(failed /*: boolean*/) /*: void*/{ - logger.log("Request ".concat(_url || 'unknown', " ").concat(failed ? 'failed' : 'has been finished')); - _attempts.request = DEFAULT_ATTEMPTS; - _attempts.connection = DEFAULT_ATTEMPTS; - _wait = DEFAULT_WAIT; - _restore(); - clear(); +/** + * Get an error object which is about to be passed to resolve or reject method + * + * @param {Object} xhr + * @param {string} code + * @param {boolean=} proceed + * @returns {Object} + * @private + */ +function _getErrorResponse(xhr /*: XMLHttpRequest*/, code /*: ErrorCodeT*/) /*: HttpErrorResponseT*/{ + var proceed /*: boolean*/ = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; + return { + status: 'error', + action: proceed ? 'CONTINUE' : 'RETRY', + response: isValidJson(xhr.responseText) ? JSON.parse(xhr.responseText) : xhr.responseText, + message: HTTP_ERRORS[code], + code: code + }; +} + +/** + * Encode parameter depending on the type + * + * @param {string} key + * @param {*} value + * @returns {string} + * @private + */ +function _encodeParam(_ref3 /*:: */) /*: string*/{ + var _ref4 = _slicedToArray(_ref3 /*:: */, 2), + key = _ref4[0], + value = _ref4[1]; + var encodedKey = encodeURIComponent(key); + var encodedValue = value; + if (typeof value === 'string') { + encodedValue = encodeURIComponent(value); + } + if (isObject(value)) { + encodedValue = encodeURIComponent(JSON.stringify(value) || ''); } + return [encodedKey, encodedValue].join('='); +} - /** - * Retry request with optional new waiting period - * - * @param {number=} wait - * @returns {Promise} - * @private - */ - function _retry(wait /*: WaitT*/) /*: Promise*/{ - _attempts.request += 1; - clear(); - return _prepareRequest({ - wait: wait || backOff(_attempts.request, _strategy), - retrying: true +/** + * Creates the log key with some spaces appended to it + * + * @param {string} header + * @param {string} str + * @returns {string} + * @private + */ +function _logKey(header /*: string*/, str /*: string*/) /*: string*/{ + var spaces = header.slice(0, header.length - str.length - 1).split('').reduce(function (acc) { + return acc.concat(' '); + }, ''); + return "".concat(str).concat(spaces, ":"); +} + +/** + * Encode key-value pairs to be used in url + * + * @param {Object} params + * @param {Object} defaultParams + * @returns {string} + * @private + */ +function _encodeParams(params /*: ParamsWithAttemptsT*/, defaultParams /*: DefaultParamsT*/) /*: string*/{ + var logParamsHeader = 'REQUEST PARAMETERS:'; + var toSnakeCase = function toSnakeCase(key) { + return key.replace(/([A-Z])/g, function ($1) { + return "_".concat($1.toLowerCase()); }); - } + }; + var allParams = entries(_objectSpread2(_objectSpread2(_objectSpread2({}, config.getBaseParams()), defaultParams), params)).map(function (_ref5 /*:: */) { + var _ref6 = _slicedToArray(_ref5 /*:: */, 2), + key = _ref6[0], + value = _ref6[1]; + return [toSnakeCase(key), value]; + }); + logger.log(logParamsHeader); + return allParams.filter(function (_ref7) { + var _ref8 = _slicedToArray(_ref7, 2), + value = _ref8[1]; + return isEmptyEntry(value); + }).map(function (_ref9) { + var _ref10 = _slicedToArray(_ref9, 2), + key = _ref10[0], + value = _ref10[1]; + logger.log(_logKey(logParamsHeader, key), value); + return _encodeParam([key, value]); + }).join('&'); +} - /** - * Decide how to continue, either: - * - retry if requested - * - call custom success callback - * - or finish the request by default - * - * @param {Object} result - * @param {number} result.retry_in - * @param {Function} resolve - * @private - */ - function _continue(result /*: HttpSuccessResponseT | HttpErrorResponseT*/, resolve) /*: void*/{ - if (result && result.retry_in) { - resolve(_retry(result.retry_in)); - return; - } - _resetBaseUrlsIterator(); - if (typeof _continueCb === 'function') { - _continueCb(result, _finish, _retry); +/** + * Handle xhr response from server + * + * @param {Function} reject + * @param {Function} resolve + * @param {Object} xhr + * @param {string} url + * @private + */ +function _handleReadyStateChange(reject, resolve, _ref11 /*:: */) { + var xhr = _ref11 /*:: */.xhr, + url = _ref11 /*:: */.url; + if (xhr.readyState !== 4) { + return; + } + var okStatus = xhr.status >= 200 && xhr.status < 300; + var validJson = isValidJson(xhr.responseText); + if (xhr.status === 0) { + reject(_getErrorResponse(xhr, 'NO_CONNECTION')); + } else { + if (validJson) { + return okStatus ? resolve(_getSuccessResponse(xhr, url)) : resolve(_getErrorResponse(xhr, 'SERVER_CANNOT_PROCESS', true)); } else { - _finish(); + return okStatus ? reject(_getErrorResponse(xhr, 'SERVER_MALFORMED_RESPONSE')) : reject(_getErrorResponse(xhr, 'SERVER_INTERNAL_ERROR')); } - resolve(result); } +} - /** - * Ensure to resolve on retry and finish request when unknown error - * - * @param {Object} result - * @param {Function} resolve - * @param {Function} reject - * @private - */ - function _error(result /*: HttpErrorResponseT*/, resolve, reject) /*: void*/{ - if (result && result.action === 'RETRY') { - if (result.code === 'NO_CONNECTION') { - var nextEndpoint = _baseUrlsIterator.next(); // get next endpoint +/** + * Prepare url and params depending on the resource type + * + * @param {string} url + * @param {string} method + * @param {Object} params + * @param {Object} defaultParams + * @returns {{encodedParams: string, fullUrl: string}} + * @private + */ +function _prepareUrlAndParams(_ref12 /*:: */, defaultParams /*: DefaultParamsT*/) /*: {fullUrl: string, encodedParams: string}*/{ + var endpoint = _ref12 /*:: */.endpoint, + url = _ref12 /*:: */.url, + method = _ref12 /*:: */.method, + params = _ref12 /*:: */.params; + var encodedParams = _encodeParams(params, defaultParams); + return { + fullUrl: endpoint + url + (method === 'GET' ? "?".concat(encodedParams) : ''), + encodedParams: encodedParams + }; +} - if (!nextEndpoint.done) { - // next endpoint exists - _baseUrlsIteratorCurrent = nextEndpoint; // use the endpoint in the next try - resolve(_retry(DEFAULT_WAIT)); - } else { - // no more endpoints, seems there is no connection at all - _resetBaseUrlsIterator(); - resolve(_retry(NO_CONNECTION_WAIT)); - } - } else { - resolve(_retry()); - } - return; - } - _finish(true); - reject(result || {}); - } +/** + * Set headers for the xhr object + * + * @param {XMLHttpRequest} xhr + * @param {string} method + * @private + */ +function _prepareHeaders(xhr /*: XMLHttpRequest*/, method /*: $PropertyType*/) /*: void*/{ + var logHeader = 'REQUEST HEADERS:'; + var headers = [['Client-SDK', "js".concat(globals.version)], ['Content-Type', method === 'POST' ? 'application/x-www-form-urlencoded' : 'application/json']]; + logger.log(logHeader); + headers.forEach(function (_ref13) { + var _ref14 = _slicedToArray(_ref13, 2), + key = _ref14[0], + value = _ref14[1]; + xhr.setRequestHeader(key, value); + logger.log(_logKey(logHeader, key), value); + }); +} - /** - * Send the request after specified or default waiting period - * - * @param {string=} url - * @param {string=} method - * @param {Object=} params - * @param {Function=} continueCb - * @param {number=} wait - * @returns {Promise} - */ - function send() /*: Promise*/{ - var _ref6 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, - url = _ref6.url, - method = _ref6.method, - _ref6$params = _ref6.params, - params = _ref6$params === void 0 ? {} : _ref6$params, - continueCb = _ref6.continueCb, - wait = _ref6.wait; - _prepareParams({ +/** + * Build xhr to perform all kind of api requests + * + * @param {string} url + * @param {string} [method='GET'] + * @param {Object} [params={}] + * @param {Object} defaultParams + * @returns {Promise} + */ +function _buildXhr(_ref15 /*:: */, defaultParams /*: DefaultParamsT*/) /*: Promise*/{ + var endpoint = _ref15 /*:: */.endpoint, + url = _ref15 /*:: */.url, + _ref15$method = _ref15 /*:: */.method, + method = _ref15$method === void 0 ? 'GET' : _ref15$method, + _ref15$params = _ref15 /*:: */.params, + params = _ref15$params === void 0 ? {} : _ref15$params; + var _prepareUrlAndParams2 = _prepareUrlAndParams({ + endpoint: endpoint, url: url, method: method, - params: params, - continueCb: continueCb - }); - return _prepareRequest({ - wait: wait - }); + params: params + }, defaultParams), + fullUrl = _prepareUrlAndParams2.fullUrl, + encodedParams = _prepareUrlAndParams2.encodedParams; + return new Promise(function (resolve, reject) { + var xhr = new XMLHttpRequest(); + xhr.open(method, fullUrl, true); + _prepareHeaders(xhr, method); + xhr.onreadystatechange = function () { + return _handleReadyStateChange(reject, resolve, { + xhr: xhr, + url: url + }); + }; + xhr.onerror = function () { + return reject(_getErrorResponse(xhr, 'TRANSACTION_ERROR')); + }; + xhr.send(method === 'GET' ? undefined : encodedParams); + }); +} + +/** + * Intercept response from backend + * + * @param {Object} result + * @param {string} result.status + * @param {string} url + * @returns {Object} + * @private + */ +function _interceptResponse(result /*: HttpSuccessResponseT | HttpErrorResponseT*/, url /*: UrlT*/) /*: HttpSuccessResponseT | HttpErrorResponseT*/{ + if (result.status === 'success') { + return _interceptSuccess(result, url); + } + return result; +} + +/** + * Intercept successful response from backend and: + * - always check if tracking_state is set to `opted_out` and if yes disable sdk + * - check if ask_in parameter is present in order to check if attribution have been changed + * - emit session finish event if session request + * + * @param {Object} result + * @param {string} result.tracking_state + * @param {number} result.ask_in + * @param {string} url + * @returns {Object} + * @private + */ +function _interceptSuccess(result /*: HttpSuccessResponseT*/, url) /*: HttpSuccessResponseT*/{ + var isGdprRequest = isRequest(url, 'gdpr_forget_device'); + var isAttributionRequest = isRequest(url, 'attribution'); + var isSessionRequest = isRequest(url, 'session'); + var isThirdPartySharingOptOutRequest = isRequest(url, 'disable_third_party_sharing'); + var optedOut = result.tracking_state === 'opted_out'; + if (!isGdprRequest && optedOut) { + publish('sdk:gdpr-forget-me'); + return result; + } + if (!isAttributionRequest && !isGdprRequest && !optedOut && result.ask_in) { + publish('attribution:check', result); + } + if (isSessionRequest) { + publish('session:finished', result); + } + if (isThirdPartySharingOptOutRequest) { + publish('sdk:third-party-sharing-opt-out'); + return result; } + return result; +} - /** - * Check if request is running - * - * @returns {boolean} - */ - function isRunning() /*: boolean*/{ - return !!_timeoutId; - } +/** + * Http request factory to perform all kind of api requests + * + * @param {Object} options + * @returns {Promise} + */ +function http(options /*: HttpRequestParamsT*/) /*: Promise*/{ + return defaultParams().then(function (defaultParams) { + return _buildXhr(options, defaultParams); + }).then(function (result) { + return _interceptResponse(result, options.url); + }); +} +;// CONCATENATED MODULE: ./src/sdk/backoff.js +/*:: // +import { type BackOffStrategyT } from './types';*/ - /** - * Clear request/connection timeout - * - * @private - */ - function _clearTimeout() /*: void*/{ - if (_timeoutId) { - clearTimeout(_timeoutId); - } - _timeoutId = null; - } - /** - * Clear the current request - */ - function clear() /*: void*/{ - var stillRunning = !!_startAt; - _clearTimeout(); - _startAt = null; - if (stillRunning) { - _wait = DEFAULT_WAIT; - _attempts.request = DEFAULT_ATTEMPTS; - _attempts.connection = DEFAULT_ATTEMPTS; - logger.log("Previous ".concat(_url || 'unknown', " request attempt canceled")); - _restore(); - } +/** + * Options for the back-off strategy for different environments + * + * @type {Object} + */ +var _options = { + long: { + delay: 2 * MINUTE, + maxDelay: DAY, + minRange: 0.5, + maxRange: 1.0 + }, + short: { + delay: 200, + maxDelay: HOUR, + minRange: 0.5, + maxRange: 1.0 + }, + test: { + delay: 100, + maxDelay: 300 } - return { - send: send, - isRunning: isRunning, - clear: clear - }; }; -/* harmony default export */ const request = (Request); -;// CONCATENATED MODULE: ./src/sdk/disable.js +/** + * Get random number in provided range + * + * @param {number} min + * @param {number} max + * @returns {number} + * @private + */ +function _randomInRange(min, max) { + return Math.random() * (max - min) + min; +} +/** + * Calculate exponential back-off with optional jitter factor applied + * + * @param {number} attempts + * @param {string} strategy + * @returns {number} + */ +function backOff(attempts /*: number*/, strategy /*: ?BackOffStrategyT*/) /*: number*/{ + strategy = strategy || 'long'; + var options = false ? 0 : _options[strategy]; + var delay = options.delay * Math.pow(2, attempts - 1); + delay = Math.min(delay, options.maxDelay); + if (options.minRange && options.maxRange) { + delay = delay * _randomInRange(options.minRange, options.maxRange); + } + return Math.round(delay); +} +;// CONCATENATED MODULE: ./src/sdk/listeners.js +/*:: // +import { type DocumentT } from './types';*/ -/*:: type StatusT = 'on' | 'off' | 'paused'*/ -/*:: type ReasonT = REASON_GDPR | REASON_GENERAL*/ -/*:: type PendingT = boolean*/ -/*:: type ReasonMapT = {| - reason: ReasonT, - pending: PendingT +/*:: type EventCbT = (e: Event) => void*/ +/*:: type PageVisibilityHiddenAttr = 'hidden' | 'mozHidden' | 'msHidden' | 'oHidden' | 'webkitHidden'*/ +/*:: type PageVisibilityEventName = 'visibilitychange' | 'mozvisibilitychange' | 'msvisibilitychange' | 'ovisibilitychange' | 'webkitvisibilitychange'*/ +/*:: type PageVisibilityApiMap = {| + hidden: PageVisibilityHiddenAttr, + visibilityChange: PageVisibilityEventName |}*/ +var _connected /*: boolean*/ = navigator.onLine; + /** - * Get the disable action name depending on the reason - * - * @param {string} reason - * @returns {string} - * @private + * Bind to online and offline events */ -var _disableReason = function _disableReason(reason /*: ReasonT*/) { - return reason === REASON_GDPR ? 'GDPR disable' : 'disable'; -}; +function register() /*: void*/{ + on(window, 'online', _handleOnline); + on(window, 'offline', _handleOffline); +} /** - * Get log messages depending on the disable reason + * Handle online event, set connected flag to true * - * @param {string} reason - * @returns {Object} * @private */ -var _logMessages = function _logMessages(reason /*: ReasonT*/) { - return { - start: { - inProgress: "Adjust SDK ".concat(_disableReason(reason), " process has already started"), - done: "Adjust SDK ".concat(_disableReason(reason), " process is now started") - }, - finish: { - inProgress: "Adjust SDK ".concat(_disableReason(reason), " process has already finished"), - done: "Adjust SDK ".concat(_disableReason(reason), " process is now finished") - } - }; -}; +function _handleOnline() /*: void*/{ + _connected = true; +} /** - * Start or finish disable process - * - * @param {string} reason - * @param {boolean} pending - * @param {string} expectedAction - * @returns {boolean} + * Handle offline event, set connected flag to false * @private */ -function _disable(_ref /*:: */, expectedAction /*: 'start' | 'finish'*/) /*: boolean*/{ - var reason = _ref /*:: */.reason, - pending = _ref /*:: */.pending; - var disabled = getDisabled() || {}; - var action = expectedAction === 'start' && disabled.pending ? 'start' : 'finish'; - var shouldNotStart = expectedAction === 'start' && disabled.reason; - var shouldNotFinish = expectedAction === 'finish' && disabled.reason && !disabled.pending; - if (shouldNotStart || shouldNotFinish) { - logger.log(_logMessages(disabled.reason)[action].inProgress); - return false; - } - logger.log(_logMessages(reason)[action].done); - setDisabled({ - reason: reason || REASON_GENERAL, - pending: pending - }); - return true; +function _handleOffline() /*: void*/{ + _connected = false; } /** - * Disable sdk due to a particular reason + * Bind event to an element * - * @param {string} reason - * @param {boolean} pending - * @private + * @param {Window|Document} element + * @param {string} eventName + * @param {Function} func */ -function disable(reason /*: ?ReasonT*/) /*: boolean*/{ - var pending /*: ?PendingT*/ = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - return _disable({ - reason: reason, - pending: pending || false - }, 'start'); +function on(element /*: Document | any*/, eventName /*: string*/, func /*: EventCbT*/) /*: void*/{ + if (element.addEventListener) { + element.addEventListener(eventName, func, false); + } } /** - * Finish disable process if previously set to pending state + * Unbind event off an element * - * @param {string} reason - * @returns {boolean} + * @param {Window|Document} element + * @param {string} eventName + * @param {Function} func */ -function finish(reason /*: ReasonT*/) /*: boolean*/{ - return _disable({ - reason: reason, - pending: false - }, 'finish'); +function off(element /*: Document | any*/, eventName /*: string*/, func /*: EventCbT*/) /*: void*/{ + if (element.removeEventListener) { + element.removeEventListener(eventName, func, false); + } } /** - * Enable sdk if not GDPR forgotten + * Get Page Visibility API attributes that can be accessed depending on the browser implementation + * + * @returns {{hidden: string, visibilityChange: string}|null} + * @private */ -function restore() /*: boolean*/{ - var disabled = getDisabled() || {}; - if (disabled.reason === REASON_GDPR) { - logger.log('Adjust SDK is disabled due to GDPR-Forget-Me request and it can not be re-enabled'); - return false; +function getVisibilityApiAccess() /*: ?PageVisibilityApiMap*/{ + var documentExt = (document /*: DocumentT*/); + if (typeof documentExt.hidden !== 'undefined') { + return { + hidden: 'hidden', + visibilityChange: 'visibilitychange' + }; } - if (!disabled.reason) { - logger.log('Adjust SDK is already enabled'); - return false; + var accessMap /*: {[key: PageVisibilityHiddenAttr]: PageVisibilityEventName}*/ = { + mozHidden: 'mozvisibilitychange', + msHidden: 'msvisibilitychange', + oHidden: 'ovisibilitychange', + webkitHidden: 'webkitvisibilitychange' + }; + var accessMapEntries = entries(accessMap); + for (var i = 0; i < accessMapEntries.length; i += 1) { + var _accessMapEntries$i = _slicedToArray(accessMapEntries[i], 2), + hidden = _accessMapEntries$i[0], + visibilityChange = _accessMapEntries$i[1]; + if (typeof documentExt[hidden] !== 'undefined') { + return { + hidden: hidden, + visibilityChange: visibilityChange + }; + } } - logger.log('Adjust SDK has been enabled'); - setDisabled(null); - return true; + return null; } /** - * Get the current status of the sdk - * - on: not disabled - * - paused: partially disabled, waiting for the opt-out confirmation from the backend - * - off: completely disabled + * Check if connected to internet * - * @returns {string} + * @returns {boolean} */ -function disable_status() /*: StatusT*/{ - var disabled = getDisabled() || {}; - if (disabled.reason === REASON_GENERAL || disabled.reason === REASON_GDPR && !disabled.pending) { - return 'off'; - } else if (disabled.reason === REASON_GDPR && disabled.pending) { - return 'paused'; - } - return 'on'; +function isConnected() /*: boolean*/{ + return _connected; } -;// CONCATENATED MODULE: ./src/sdk/identity.js - -var identity_Promise = typeof Promise === 'undefined' ? (__webpack_require__(702).Promise) : Promise; -/*:: // -import { type ActivityStateMapT } from './types';*/ - - - - +/** + * Unbind from online and offline events + */ +function listeners_destroy() /*: void*/{ + off(window, 'online', _handleOnline); + off(window, 'offline', _handleOffline); +} +;// CONCATENATED MODULE: ./src/sdk/url-strategy.ts -/*:: type InterceptT = {| - exists: boolean, - stored?: ?ActivityStateMapT -|}*/ -/** - * Name of the store used by activityState - * - * @type {string} - * @private - */ -var identity_storeName = 'activityState'; -/** - * Boolean used in start in order to avoid duplicated activity state - * - * @type {boolean} - * @private - */ -var _starting /*: boolean*/ = false; -/** - * Generate random uuid v4 - * - * @returns {string} - * @private - */ -function _generateUuid() /*: string*/{ - var seed = Date.now(); - return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) { - var r = (seed + Math.random() * 16) % 16 | 0; - seed = Math.floor(seed / 16); - return (c === 'x' ? r : r & (0x3 | 0x8)).toString(16); - }); +var UrlStrategy = /*#__PURE__*/function (UrlStrategy) { + UrlStrategy["Default"] = "default"; + UrlStrategy["India"] = "india"; + UrlStrategy["China"] = "china"; + return UrlStrategy; +}(UrlStrategy || {}); +var DataResidency = /*#__PURE__*/function (DataResidency) { + DataResidency["EU"] = "EU"; + DataResidency["TR"] = "TR"; + DataResidency["US"] = "US"; + return DataResidency; +}(DataResidency || {}); +function incorrectOptionIgnoredMessage(higherPriority /*: string*/, lowerPriority /*: string*/) { + logger.warn("Both ".concat(higherPriority, " and ").concat(lowerPriority, " are set in config, ").concat(lowerPriority, " will be ignored")); } /** - * Inspect stored activity state and check if disable needs to be repeated - * - * @param {Object=} stored - * @returns {Object} - * @private + * Returns a map of base URLs or a list of endpoint names depending on SDK configuration */ -function _intercept(stored /*: ActivityStateMapT*/) /*: InterceptT*/{ - if (!stored) { +function getEndpointPreference() /*: BaseUrlsMap | EndpointName[]*/{ + var _Config$getCustomConf = config.getCustomConfig(), + customUrl = _Config$getCustomConf.customUrl, + urlStrategy = _Config$getCustomConf.urlStrategy, + dataResidency = _Config$getCustomConf.dataResidency; + if (customUrl) { + // If custom URL is set then send all requests there + if (dataResidency || urlStrategy) { + incorrectOptionIgnoredMessage('customUrl', dataResidency ? 'dataResidency' : 'urlStrategy'); + } return { - exists: false + app: customUrl, + gdpr: customUrl }; } - if (stored.uuid === 'unknown') { - disable({ - reason: REASON_GDPR - }); - activity_state.destroy(); - return { - exists: true, - stored: null - }; + if (dataResidency && urlStrategy) { + incorrectOptionIgnoredMessage('dataResidency', 'urlStrategy'); } - activity_state.init(stored); - return { - exists: true, - stored: stored - }; + if (dataResidency) { + return [dataResidency]; + } + if (urlStrategy === UrlStrategy.India) { + return [UrlStrategy.India, UrlStrategy.Default]; + } + if (urlStrategy === UrlStrategy.China) { + return [UrlStrategy.China, UrlStrategy.Default]; + } + return [UrlStrategy.Default, UrlStrategy.India, UrlStrategy.China]; } - -/** - * Cache stored activity state into running memory - * - * @returns {Promise} - */ -function start() /*: Promise*/{ - if (_starting) { - return identity_Promise.reject({ - interrupted: true, - message: 'Adjust SDK start already in progress' +var endpointMap /*: Record*/ = _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty({}, UrlStrategy.Default, ENDPOINTS.default), UrlStrategy.India, ENDPOINTS.india), UrlStrategy.China, ENDPOINTS.china), DataResidency.EU, ENDPOINTS.EU), DataResidency.TR, ENDPOINTS.TR), DataResidency.US, ENDPOINTS.US); +function getPreferredUrls(endpoints /*: Partial>*/) /*: BaseUrlsMap[]*/{ + var preference = getEndpointPreference(); + if (!Array.isArray(preference)) { + return [preference]; + } else { + var res = preference.map(function (strategy) { + return endpoints[strategy] || null; + }).filter(function (i) { + return /*: i is BaseUrlsMap*/!!i; }); + return res; } - _starting = true; - return storage.getFirst(identity_storeName).then(_intercept).then(function (result /*: InterceptT*/) { - if (result.exists) { - _starting = false; - return result.stored; +} +function getBaseUrlsIterator() /*: BaseUrlsIterator*/{ + var endpoints /*: Partial>*/ = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : endpointMap; + var _urls = getPreferredUrls(endpoints); + var _counter = 0; + return { + next: function next() { + if (_counter < _urls.length) { + return { + value: _urls[_counter++], + done: false + }; + } else { + return { + value: undefined, + done: true + }; + } + }, + reset: function reset() { + _counter = 0; } - var activityState = isEmpty(activity_state.current) ? { - uuid: _generateUuid() - } : activity_state.current; - return storage.addItem(identity_storeName, activityState).then(function () { - activity_state.init(activityState); - reload(); - _starting = false; - return activityState; - }); - }); + }; } -/** - * Check if sdk is running at all (totally disabled or inactive activity state) - * - * @returns {boolean} - * @private - */ -function _isLive() { - return disable_status() !== 'off' && activity_state.isStarted(); -} +;// CONCATENATED MODULE: ./src/sdk/request.js + + +/*:: // +import { type HttpSuccessResponseT, type HttpErrorResponseT, type HttpContinueCbT, type BackOffStrategyT, type WaitT, type UrlT, type MethodT, type RequestParamsT, type HttpRequestParamsT } from './types';*/ + + + + + + + + +/*:: type RequestConfigT = {| + url?: UrlT, + method?: MethodT, + params?: RequestParamsT, + continueCb?: HttpContinueCbT, + strategy?: BackOffStrategyT, + wait?: ?WaitT +|}*/ +/*:: type DefaultConfigT = {| + url?: UrlT, + method: MethodT, + params?: RequestParamsT, + continueCb?: HttpContinueCbT +|}*/ +/*:: type AttemptsT = number*/ +/*:: type StartAtT = number*/ +var DEFAULT_ATTEMPTS /*: AttemptsT*/ = 0; +var DEFAULT_WAIT /*: WaitT*/ = 150; +var MAX_WAIT /*: WaitT*/ = 0x7FFFFFFF; // 2^31 - 1 +var NO_CONNECTION_WAIT = 60 * SECOND; +var Request = function Request() { + var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, + url = _ref.url, + _ref$method = _ref.method, + method = _ref$method === void 0 ? 'GET' : _ref$method, + _ref$params = _ref.params, + params = _ref$params === void 0 ? {} : _ref$params, + continueCb = _ref.continueCb, + strategy = _ref.strategy, + wait = _ref.wait; + /** + * Global param values set on request instantiation and later used for restore + * + * @type {{url: string, method: string, params: Object, continueCb: Function}} + * @private + */ + var _default /*: DefaultConfigT*/ = { + url: url, + method: method, + params: params, + continueCb: continueCb + }; + + /** + * Url param per instance or per request + * + * @type {string} + * @private + */ + var _url /*: ?UrlT*/ = url; + + /** + * Method param per instance or per request, defaults to `GET` + * + * @type {string} + * @private + */ + var _method /*: MethodT*/ = method; + + /** + * Request params per instance or per request + * + * @type {Object} + * @private + */ + var _params /*: RequestParamsT*/ = _objectSpread2({}, params); + + /** + * Optional continue callback per instance or per request + * + * @type {Function} + * @private + */ + var _continueCb /*: ?HttpContinueCbT*/ = continueCb; -/** - * Persist changes made directly in activity state and update lastActive flag - * - * @returns {Promise} - */ -function persist() /*: Promise*/{ - if (!_isLive()) { - return identity_Promise.resolve(null); - } - var activityState = _objectSpread2(_objectSpread2({}, activity_state.current), {}, { - lastActive: Date.now() - }); - return storage.updateItem(identity_storeName, activityState).then(function () { - return activity_state.current = activityState; - }); -} + /** + * Back-off strategy + * + * @type {string|null} + * @private + */ + var _strategy /*: ?BackOffStrategyT*/ = strategy; -/** - * Sync in-memory activityState with the one from store - * - should be used when change from another tab is possible and critical - * - * @returns {Promise} - */ -function sync() /*: Promise*/{ - return storage.getFirst(identity_storeName).then(function (activityState /*: ActivityStateMapT*/) { - var current = activity_state.current; - var lastActive = current.lastActive || 0; - if (_isLive() && lastActive < activityState.lastActive) { - // Checking if another SDK instance was installed while this one was in backgound - var installedUpdated = !current.installed && activityState.installed; - var sessionCountUpdated = (current.sessionCount || 0) < (activityState.sessionCount || 0); - if (installedUpdated || sessionCountUpdated) { - publish('sdk:installed'); - } - activity_state.current = activityState; - reload(); - } - return activityState; - }); -} + /** + * Url Startegy iterator to go through endpoints to retry to send request + */ + var _baseUrlsIterator /*: BaseUrlsIterator*/; -/** - * Clear activity state store - set uuid to be unknown - */ -function clear() /*: void*/{ - var newActivityState = { - uuid: 'unknown' + /** + * Current base urls map to send request + */ + var _baseUrlsIteratorCurrent /*: { value: BaseUrlsMap, done: boolean }*/; + + /** + * Reset iterator state and get the first endpoint to use it in the next try + */ + var _resetBaseUrlsIterator = function _resetBaseUrlsIterator() { + _baseUrlsIterator.reset(); + _baseUrlsIteratorCurrent = _baseUrlsIterator.next(); }; - activity_state.current = newActivityState; - return storage.clear(identity_storeName).then(function () { - return storage.addItem(identity_storeName, newActivityState); - }); -} -/** - * Destroy current activity state - */ -function identity_destroy() /*: void*/{ - activity_state.destroy(); -} + /** + * Returns base url depending on request path + */ + var _getBaseUrl = function _getBaseUrl(urlsMap /*: BaseUrlsMap*/, url /*: UrlT*/) /*: string*/{ + var base = url === '/gdpr_forget_device' ? 'gdpr' : 'app'; + return urlsMap[base]; + }; -;// CONCATENATED MODULE: ./src/sdk/queue.js + /** + * Timeout id to be used for clearing + * + * @type {number|null} + * @private + */ + var _timeoutId /*: ?TimeoutID*/ = null; + /** + * Number of request and connection attempts + * + * @type {{request: number, connection: number}} + * @private + */ + var _attempts + /*: { + request: AttemptsT, + connection: AttemptsT + }*/ + = { + request: DEFAULT_ATTEMPTS, + connection: DEFAULT_ATTEMPTS + }; -var queue_Promise = typeof Promise === 'undefined' ? (__webpack_require__(702).Promise) : Promise; -/*:: // -import { type HttpSuccessResponseT, type HttpErrorResponseT, type HttpFinishCbT, type WaitT, type UrlT, type MethodT, type RequestParamsT, type ActivityStateMapT } from './types';*/ + /** + * Waiting time for the request to be sent + * + * @type {number} + * @private + */ + var _wait /*: WaitT*/ = _prepareWait(wait); + + /** + * Timestamp when the request has been scheduled + * + * @type {Date|null} + * @private + */ + var _startAt /*: ?StartAtT*/ = null; + /** + * Ensure that wait is not more than maximum 32int so it does not cause overflow in setTimeout + * + * @param {number} wait + * @returns {number} + * @private + */ + function _prepareWait(wait /*: ?WaitT*/) /*: WaitT*/{ + wait = wait || DEFAULT_WAIT; + return wait > MAX_WAIT ? MAX_WAIT : wait; + } + + /** + * Override current parameters if available + * + * @param {string=} url + * @param {string=} method + * @param {Object=} params + * @param {Function=} continueCb + * @private + */ + function _prepareParams(_ref2 /*:: */) /*: void*/{ + var url = _ref2 /*:: */.url, + method = _ref2 /*:: */.method, + params = _ref2 /*:: */.params, + continueCb = _ref2 /*:: */.continueCb; + if (url) { + _url = url; + } + if (method) { + _method = method; + } + if (!isEmpty(params)) { + _params = _objectSpread2({}, params); + } + _params = _objectSpread2({ + createdAt: getTimestamp() + }, _params); + if (typeof continueCb === 'function') { + _continueCb = continueCb; + } + } + /** + * Clear previous attempt if new one is about to happen faster + * + * @param {number} wait + * @returns {boolean} + * @private + */ + function _skip(wait /*: ?WaitT*/) /*: boolean*/{ + if (!_startAt) { + return false; + } + if (_timeoutId) { + var remainingTime = _wait - (Date.now() - _startAt); + if (wait && remainingTime < wait) { + return true; + } + clear(); + } + return false; + } + /** + * Prepare request to be sent away + * + * @param {number=} wait + * @param {boolean=false} retrying + * @returns {Promise} + * @private + */ + function _prepareRequest(_ref3 /*:: */) /*: Promise*/{ + var wait = _ref3 /*:: */.wait, + retrying = _ref3 /*:: */.retrying; + if (!_baseUrlsIterator) { + _baseUrlsIterator = getBaseUrlsIterator(); + _baseUrlsIteratorCurrent = _baseUrlsIterator.next(); + } + _wait = wait ? _prepareWait(wait) : _wait; + if (_skip(wait)) { + return Promise.resolve({ + status: 'error', + action: 'CONTINUE', + response: '', + message: HTTP_ERRORS['SKIP'], + code: 'SKIP' + }); + } + if (!_url) { + logger.error('You must define url for the request to be sent'); + return Promise.reject({ + status: 'error', + action: 'CONTINUE', + response: '', + message: HTTP_ERRORS['MISSING_URL'], + code: 'MISSING_URL' + }); + } + logger.log("".concat(retrying ? 'Re-trying' : 'Trying', " request ").concat(_url, " in ").concat(_wait, "ms")); + _startAt = Date.now(); + return _preRequest({ + endpoint: _getBaseUrl(_baseUrlsIteratorCurrent.value, _url), + url: _url, + method: _method, + params: _objectSpread2({ + attempts: 1 + }, _params) + }); + } + /** + * Check if there is internet connect and if not then setup the timeout + * + * @param {Object} options + * @returns {Promise} + * @private + */ + function _preRequest(options /*: HttpRequestParamsT*/) /*: Promise*/{ + _clearTimeout(); + if (isConnected()) { + return _request(options); + } + _attempts.connection += 1; + logger.log("No internet connectivity, trying request ".concat(options.url, " in ").concat(NO_CONNECTION_WAIT, "ms")); + return new Promise(function (resolve) { + _timeoutId = setTimeout(function () { + resolve(_preRequest(options)); + }, NO_CONNECTION_WAIT); + }); + } + /** + * Do the timed-out request with retry mechanism + * + * @param {Object} options + * @returns {Promise} + * @private + */ + function _request(options /*: HttpRequestParamsT*/) /*: Promise*/{ + return new Promise(function (resolve, reject) { + _timeoutId = setTimeout(function () { + _startAt = null; + var filteredParams = entries(options.params).filter(function (_ref4) { + var _ref5 = _slicedToArray(_ref4, 2), + value = _ref5[1]; + return isEmptyEntry(value); + }).reduce(reducer, {}); + return http({ + endpoint: options.endpoint, + url: options.url, + method: options.method, + params: _objectSpread2(_objectSpread2({}, filteredParams), {}, { + attempts: (_attempts.request ? _attempts.request + 1 : 1) + _attempts.connection + }) + }).then(function (result) { + return _continue(result, resolve); + }).catch(function (result) { + return _error(result, resolve, reject); + }); + }, _wait); + }); + } + /** + * Restore to global parameters + * + * @private + */ + function _restore() /*: void*/{ + _url = _default.url; + _method = _default.method; + _params = _objectSpread2({}, _default.params); + _continueCb = _default.continueCb; + } + /** + * Finish the request by restoring and clearing + * + * @param {boolean=false} failed + * @private + */ + function _finish(failed /*: boolean*/) /*: void*/{ + logger.log("Request ".concat(_url || 'unknown', " ").concat(failed ? 'failed' : 'has been finished')); + _attempts.request = DEFAULT_ATTEMPTS; + _attempts.connection = DEFAULT_ATTEMPTS; + _wait = DEFAULT_WAIT; + _restore(); + clear(); + } -/*:: type PendingT = {| - timestamp: number, - url: UrlT, - method?: MethodT, - createdAt?: number, - params: RequestParamsT -|}*/ -/** - * Http request instance - * - * @type {Object} - * @private - */ -var _request = request({ - strategy: 'long', - continueCb: _continue -}); + /** + * Retry request with optional new waiting period + * + * @param {number=} wait + * @returns {Promise} + * @private + */ + function _retry(wait /*: WaitT*/) /*: Promise*/{ + _attempts.request += 1; + clear(); + return _prepareRequest({ + wait: wait || backOff(_attempts.request, _strategy), + retrying: true + }); + } -/** - * Check if in offline mode - * - * @type {boolean} - * @private - */ -var _isOffline = false; + /** + * Decide how to continue, either: + * - retry if requested + * - call custom success callback + * - or finish the request by default + * + * @param {Object} result + * @param {number} result.retry_in + * @param {Function} resolve + * @private + */ + function _continue(result /*: HttpSuccessResponseT | HttpErrorResponseT*/, resolve) /*: void*/{ + if (result && result.retry_in) { + resolve(_retry(result.retry_in)); + return; + } + _resetBaseUrlsIterator(); + if (typeof _continueCb === 'function') { + _continueCb(result, _finish, _retry); + } else { + _finish(); + } + resolve(result); + } -/** - * Name of the store used by queue - * - * @type {string} - * @private - */ -var queue_storeName = 'queue'; + /** + * Ensure to resolve on retry and finish request when unknown error + * + * @param {Object} result + * @param {Function} resolve + * @param {Function} reject + * @private + */ + function _error(result /*: HttpErrorResponseT*/, resolve, reject) /*: void*/{ + if (result && result.action === 'RETRY') { + if (result.code === 'NO_CONNECTION') { + var nextEndpoint = _baseUrlsIterator.next(); // get next endpoint -/** - * Current running state and task timestamp - * - * @type {{running: boolean, timestamp: void|number, pause: void|Object}} - * @private - */ -var _current -/*: {| - running: boolean, - timestamp: ?number, - pause: ?{| - timestamp: number, - wait: WaitT - |} -|}*/ -= { - running: false, - timestamp: null, - pause: null -}; + if (!nextEndpoint.done) { + // next endpoint exists + _baseUrlsIteratorCurrent = nextEndpoint; // use the endpoint in the next try + resolve(_retry(DEFAULT_WAIT)); + } else { + // no more endpoints, seems there is no connection at all + _resetBaseUrlsIterator(); + resolve(_retry(NO_CONNECTION_WAIT)); + } + } else { + resolve(_retry()); + } + return; + } + _finish(true); + reject(result || {}); + } -/** - * Remove from the top and continue running pending requests - * - * @param {Object} result - * @param {Function} finish - * @returns {Promise} - * @private - */ -function _continue(result /*: HttpSuccessResponseT | HttpErrorResponseT*/, finish /*: HttpFinishCbT*/) /*: Promise*/{ - var wait = result && result.continue_in || null; - _current.pause = wait ? { - timestamp: Date.now(), - wait: wait - } : null; - return storage.getFirst(queue_storeName).then(function (pending) { - return pending ? storage.deleteItem(queue_storeName, pending.timestamp) : null; - }).then(function () { - finish(); - _current.running = false; - return run({ + /** + * Send the request after specified or default waiting period + * + * @param {string=} url + * @param {string=} method + * @param {Object=} params + * @param {Function=} continueCb + * @param {number=} wait + * @returns {Promise} + */ + function send() /*: Promise*/{ + var _ref6 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, + url = _ref6.url, + method = _ref6.method, + _ref6$params = _ref6.params, + params = _ref6$params === void 0 ? {} : _ref6$params, + continueCb = _ref6.continueCb, + wait = _ref6.wait; + _prepareParams({ + url: url, + method: method, + params: params, + continueCb: continueCb + }); + return _prepareRequest({ wait: wait }); - }); -} + } -/** - * Correct timestamp if equal or less then previous one to avoid constraint errors - * Cases when needed: - * - test environment - * - when pushing to queue synchronously, one after an other - * - * @returns {number} - * @private - */ -function _prepareTimestamp() /*: number*/{ - var timestamp = Date.now(); - if (_current.timestamp && timestamp <= _current.timestamp) { - timestamp = _current.timestamp + 1; + /** + * Check if request is running + * + * @returns {boolean} + */ + function isRunning() /*: boolean*/{ + return !!_timeoutId; } - _current.timestamp = timestamp; - return timestamp; -} -/** - * Persist activity state change with session offset reset after session request - * - * @param {string} url - * @returns {Promise} - * @private - */ -function _persist(url) /*: Promise*/{ - if (isRequest(url, 'session')) { - activity_state.resetSessionOffset(); + /** + * Clear request/connection timeout + * + * @private + */ + function _clearTimeout() /*: void*/{ + if (_timeoutId) { + clearTimeout(_timeoutId); + } + _timeoutId = null; } - activity_state.updateLastActive(); - return persist(); -} -/** - * Push request to the queue - * - * @param {string} url - * @param {string} method - * @param {Object=} params - * @param {boolean=} auto - * @param {number=} timestamp - * @returns {Promise} - */ -function push(_ref /*:: */) { - var url = _ref /*:: */.url, - method = _ref /*:: */.method, - params = _ref /*:: */.params; - var _ref2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, - auto = _ref2.auto, - timestamp = _ref2.timestamp; - activity_state.updateParams(url, auto); - var filteredParams = entries(params || {}).filter(function (_ref3) { - var _ref4 = _slicedToArray(_ref3, 2), - value = _ref4[1]; - return isEmptyEntry(value); - }).reduce(reducer, {}); - var pending /*: PendingT*/ = { - timestamp: _prepareTimestamp(), - url: url, - method: method, - params: _objectSpread2(_objectSpread2({}, activity_state.getParams(url)), filteredParams) - }; - if (timestamp) { - pending.createdAt = timestamp; + /** + * Clear the current request + */ + function clear() /*: void*/{ + var stillRunning = !!_startAt; + _clearTimeout(); + _startAt = null; + if (stillRunning) { + _wait = DEFAULT_WAIT; + _attempts.request = DEFAULT_ATTEMPTS; + _attempts.connection = DEFAULT_ATTEMPTS; + logger.log("Previous ".concat(_url || 'unknown', " request attempt canceled")); + _restore(); + } } - return storage.addItem(queue_storeName, pending).then(function () { - return _persist(url); - }).then(function () { - return _current.running ? {} : run(); - }); -} + return { + send: send, + isRunning: isRunning, + clear: clear + }; +}; +/* harmony default export */ const request = (Request); +;// CONCATENATED MODULE: ./src/sdk/disable.js + + +/*:: type StatusT = 'on' | 'off' | 'paused'*/ +/*:: type ReasonT = REASON_GDPR | REASON_GENERAL*/ +/*:: type PendingT = boolean*/ +/*:: type ReasonMapT = {| + reason: ReasonT, + pending: PendingT +|}*/ /** - * Prepare to send pending request if available + * Get the disable action name depending on the reason * - * @param {number} timestamp - * @param {number=} createdAt - * @param {string=} url - * @param {string=} method - * @param {Object=} params - * @param {number=} wait - * @returns {Promise} + * @param {string} reason + * @returns {string} * @private */ -function _prepareToSend() /*: Promise*/{ - var _ref5 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, - timestamp = _ref5.timestamp, - createdAt = _ref5.createdAt, - url = _ref5.url, - method = _ref5.method, - params = _ref5.params; - var wait /*:: ?: ?WaitT*/ = arguments.length > 1 ? arguments[1] : undefined; - var activityState = activity_state.current || {}; - var firstSession = url === '/session' && !activityState.installed; - var noPending = !url && !method && !params; - if (_isOffline && !firstSession || noPending) { - _current.running = false; - return queue_Promise.resolve({}); - } - return _request.send({ - url: url, - method: method, - params: _objectSpread2(_objectSpread2({}, params), {}, { - createdAt: getTimestamp(createdAt || timestamp) - }), - wait: wait || _checkWait() - }); -} +var _disableReason = function _disableReason(reason /*: ReasonT*/) { + return reason === REASON_GDPR ? 'GDPR disable' : 'disable'; +}; /** - * Check if there is waiting period required + * Get log messages depending on the disable reason * - * @returns {void|number} + * @param {string} reason + * @returns {Object} * @private */ -function _checkWait() /*: ?WaitT*/{ - var _ref6 = _current.pause || {}, - timestamp = _ref6.timestamp, - wait = _ref6.wait; - var rest = Date.now() - (timestamp || 0); - return rest < wait ? wait - rest : null; -} +var _logMessages = function _logMessages(reason /*: ReasonT*/) { + return { + start: { + inProgress: "Adjust SDK ".concat(_disableReason(reason), " process has already started"), + done: "Adjust SDK ".concat(_disableReason(reason), " process is now started") + }, + finish: { + inProgress: "Adjust SDK ".concat(_disableReason(reason), " process has already finished"), + done: "Adjust SDK ".concat(_disableReason(reason), " process is now finished") + } + }; +}; /** - * Run all pending requests + * Start or finish disable process * - * @param {boolean=false} cleanUp - * @param {number=} wait - * @returns {Promise} + * @param {string} reason + * @param {boolean} pending + * @param {string} expectedAction + * @returns {boolean} + * @private */ -function run() /*: Promise*/{ - var _ref7 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, - cleanUp = _ref7.cleanUp, - wait = _ref7.wait; - if (_current.running) { - return queue_Promise.resolve({}); - } - _current.running = true; - var chain = queue_Promise.resolve({}); - if (cleanUp) { - chain = chain.then(_cleanUp); +function _disable(_ref /*:: */, expectedAction /*: 'start' | 'finish'*/) /*: boolean*/{ + var reason = _ref /*:: */.reason, + pending = _ref /*:: */.pending; + var disabled = getDisabled() || {}; + var action = expectedAction === 'start' && disabled.pending ? 'start' : 'finish'; + var shouldNotStart = expectedAction === 'start' && disabled.reason; + var shouldNotFinish = expectedAction === 'finish' && disabled.reason && !disabled.pending; + if (shouldNotStart || shouldNotFinish) { + logger.log(_logMessages(disabled.reason)[action].inProgress); + return false; } - return chain.then(function () { - return storage.getFirst(queue_storeName); - }).then(function (pending) { - return _prepareToSend(pending, wait); + logger.log(_logMessages(reason)[action].done); + setDisabled({ + reason: reason || REASON_GENERAL, + pending: pending }); + return true; } /** - * Set offline mode to on or off - * - if on then all requests are queued - * - if off then run all pending requests - * - * @param {boolean} state - */ -function setOffline(state /*: boolean*/) /*: void*/{ - if (state === undefined) { - logger.error('State not provided, true or false has to be defined'); - return; - } - if (state === _isOffline) { - logger.error("The app is already in ".concat(state ? 'offline' : 'online', " mode")); - return; - } - var wasOffline = _isOffline; - _isOffline = state; - if (!state && wasOffline) { - run(); - } - logger.info("The app is now in ".concat(state ? 'offline' : 'online', " mode")); -} - -/** - * Clean up stale pending requests + * Disable sdk due to a particular reason * + * @param {string} reason + * @param {boolean} pending * @private - * @returns {Promise} */ -function _cleanUp() /*: Promise*/{ - var upperBound = Date.now() - config.requestValidityWindow; - return storage.deleteBulk(queue_storeName, upperBound, 'upperBound'); +function disable(reason /*: ?ReasonT*/) /*: boolean*/{ + var pending /*: ?PendingT*/ = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + return _disable({ + reason: reason, + pending: pending || false + }, 'start'); } /** - * Check if there is pending timeout to be flushed - * i.e. if queue is running + * Finish disable process if previously set to pending state * + * @param {string} reason * @returns {boolean} */ -function isRunning() /*: boolean*/{ - return _current.running; +function finish(reason /*: ReasonT*/) /*: boolean*/{ + return _disable({ + reason: reason, + pending: false + }, 'finish'); } /** - * Clear queue store + * Enable sdk if not GDPR forgotten */ -function queue_clear() /*: void*/{ - return storage.clear(queue_storeName); +function restore() /*: boolean*/{ + var disabled = getDisabled() || {}; + if (disabled.reason === REASON_GDPR) { + logger.log('Adjust SDK is disabled due to GDPR-Forget-Me request and it can not be re-enabled'); + return false; + } + if (!disabled.reason) { + logger.log('Adjust SDK is already enabled'); + return false; + } + logger.log('Adjust SDK has been enabled'); + setDisabled(null); + return true; } /** - * Destroy queue by clearing current timeout + * Get the current status of the sdk + * - on: not disabled + * - paused: partially disabled, waiting for the opt-out confirmation from the backend + * - off: completely disabled + * + * @returns {string} */ -function queue_destroy() /*: void*/{ - _request.clear(); - _current.running = false; - _current.timestamp = null; - _current.pause = null; +function disable_status() /*: StatusT*/{ + var disabled = getDisabled() || {}; + if (disabled.reason === REASON_GENERAL || disabled.reason === REASON_GDPR && !disabled.pending) { + return 'off'; + } else if (disabled.reason === REASON_GDPR && disabled.pending) { + return 'paused'; + } + return 'on'; } -;// CONCATENATED MODULE: ./src/sdk/global-params.js +;// CONCATENATED MODULE: ./src/sdk/identity.js -var global_params_Promise = typeof Promise === 'undefined' ? (__webpack_require__(702).Promise) : Promise; /*:: // -import { type GlobalParamsT, type GlobalParamsMapT } from './types';*/ +import { type ActivityStateMapT } from './types';*/ -/*:: type TypeT = 'callback' | 'partner'*/ -/*:: type KeysT = [string, TypeT]*/ -/*:: type KeysArrayT = Array*/ + + + + +/*:: type InterceptT = {| + exists: boolean, + stored?: ?ActivityStateMapT +|}*/ /** - * Name of the store used by global params + * Name of the store used by activityState * * @type {string} * @private */ -var global_params_storeName = 'globalParams'; +var identity_storeName = 'activityState'; /** - * Error message for type missing + * Boolean used in start in order to avoid duplicated activity state * - * @type {Object} + * @type {boolean} * @private */ -var _error = { - short: 'No type provided', - long: 'Global parameter type not provided, `callback` or `partner` types are available' -}; +var _starting /*: boolean*/ = false; /** - * Omit type parameter from the collection + * Generate random uuid v4 * - * @param {Array} params - * @returns {Array} + * @returns {string} * @private */ -function _omitType(params) /*: Array*/{ - return (params || []).map(function (_ref) { - var key = _ref.key, - value = _ref.value; - return { - key: key, - value: value - }; +function _generateUuid() /*: string*/{ + var seed = Date.now(); + return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) { + var r = (seed + Math.random() * 16) % 16 | 0; + seed = Math.floor(seed / 16); + return (c === 'x' ? r : r & (0x3 | 0x8)).toString(16); }); } /** - * Get callback and partner global parameters + * Inspect stored activity state and check if disable needs to be repeated * - * @returns {Promise} + * @param {Object=} stored + * @returns {Object} + * @private */ -function get() /*: Promise*/{ - return global_params_Promise.all([storage.filterBy(global_params_storeName, 'callback'), storage.filterBy(global_params_storeName, 'partner')]).then(function (_ref2) { - var _ref3 = _slicedToArray(_ref2, 2), - callbackParams = _ref3[0], - partnerParams = _ref3[1]; +function _intercept(stored /*: ActivityStateMapT*/) /*: InterceptT*/{ + if (!stored) { return { - callbackParams: _omitType(callbackParams), - partnerParams: _omitType(partnerParams) + exists: false }; - }); + } + if (stored.uuid === 'unknown') { + disable({ + reason: REASON_GDPR + }); + activity_state.destroy(); + return { + exists: true, + stored: null + }; + } + activity_state.init(stored); + return { + exists: true, + stored: stored + }; } /** - * Add global parameters, either callback or partner params + * Cache stored activity state into running memory * - * @param {Array} params - * @param {string} type * @returns {Promise} */ -function add(params /*: Array*/, type /*: TypeT*/) /*: void | Promise*/{ - if (type === undefined) { - logger.error(_error.long); - return global_params_Promise.reject({ - message: _error.short +function start() /*: Promise*/{ + if (_starting) { + return Promise.reject({ + interrupted: true, + message: 'Adjust SDK start already in progress' }); } - /*:: type GlobalParamsWithTypeT = {|...GlobalParamsT, type: string|}*/ - var map /*: {[key: string]: string}*/ = convertToMap(params); - var prepared /*: Array*/ = Object.keys(map).map(function (key) { - return { - key: key, - value: map[key], - type: type - }; - }); - return global_params_Promise.all([storage.filterBy(global_params_storeName, type), storage.addBulk(global_params_storeName, prepared, true)]).then(function (_ref4) { - var _ref5 = _slicedToArray(_ref4, 2), - oldParams = _ref5[0], - newParams = _ref5[1]; - var intersecting = intersection(oldParams.map(function (param) { - return param.key; - }), newParams.map(function (param) { - return param[0]; - })); - logger.log("Following ".concat(type, " parameters have been saved: ").concat(prepared.map(function (p) { - return "".concat(p.key, ":").concat(p.value); - }).join(', '))); - if (intersecting.length) { - logger.log("Keys: ".concat(intersecting.join(', '), " already existed so their values have been updated")); + _starting = true; + return storage.getFirst(identity_storeName).then(_intercept).then(function (result /*: InterceptT*/) { + if (result.exists) { + _starting = false; + return result.stored; } - return newParams; + var activityState = isEmpty(activity_state.current) ? { + uuid: _generateUuid() + } : activity_state.current; + return storage.addItem(identity_storeName, activityState).then(function () { + activity_state.init(activityState); + reload(); + _starting = false; + return activityState; + }); }); } /** - * Remove global parameter by key and type + * Check if sdk is running at all (totally disabled or inactive activity state) + * + * @returns {boolean} + * @private + */ +function _isLive() { + return disable_status() !== 'off' && activity_state.isStarted(); +} + +/** + * Persist changes made directly in activity state and update lastActive flag * - * @param {string} key - * @param {string} type * @returns {Promise} */ -function remove(key /*: string*/, type /*: TypeT*/) /*: void | Promise*/{ - if (type === undefined) { - logger.error(_error.long); - return global_params_Promise.reject({ - message: _error.short - }); +function persist() /*: Promise*/{ + if (!_isLive()) { + return Promise.resolve(null); } - return storage.deleteItem(global_params_storeName, [key, type]).then(function (result) { - logger.log("".concat(key, " ").concat(type, " parameter has been deleted")); - return result; + var activityState = _objectSpread2(_objectSpread2({}, activity_state.current), {}, { + lastActive: Date.now() + }); + return storage.updateItem(identity_storeName, activityState).then(function () { + return activity_state.current = activityState; }); } /** - * Remove all global parameters of certain type - * @param {string} type + * Sync in-memory activityState with the one from store + * - should be used when change from another tab is possible and critical + * * @returns {Promise} */ -function removeAll(type /*: TypeT*/) /*: void | Promise*/{ - if (type === undefined) { - logger.error(_error.long); - return global_params_Promise.reject({ - message: _error.short - }); - } - return storage.deleteBulk(global_params_storeName, type).then(function (result) { - logger.log("All ".concat(type, " parameters have been deleted")); - return result; +function sync() /*: Promise*/{ + return storage.getFirst(identity_storeName).then(function (activityState /*: ActivityStateMapT*/) { + var current = activity_state.current; + var lastActive = current.lastActive || 0; + if (_isLive() && lastActive < activityState.lastActive) { + // Checking if another SDK instance was installed while this one was in backgound + var installedUpdated = !current.installed && activityState.installed; + var sessionCountUpdated = (current.sessionCount || 0) < (activityState.sessionCount || 0); + if (installedUpdated || sessionCountUpdated) { + publish('sdk:installed'); + } + activity_state.current = activityState; + reload(); + } + return activityState; }); } /** - * Clear globalParams store + * Clear activity state store - set uuid to be unknown */ -function global_params_clear() /*: void*/{ - return storage.clear(global_params_storeName); +function clear() /*: void*/{ + var newActivityState = { + uuid: 'unknown' + }; + activity_state.current = newActivityState; + return storage.clear(identity_storeName).then(function () { + return storage.addItem(identity_storeName, newActivityState); + }); } -;// CONCATENATED MODULE: ./src/sdk/session.js -var session_Promise = typeof Promise === 'undefined' ? (__webpack_require__(702).Promise) : Promise; -/*:: // -import { type DocumentT, type HttpSuccessResponseT, type HttpErrorResponseT, type GlobalParamsMapT, type SessionRequestParamsT } from './types';*/ - - - - +/** + * Destroy current activity state + */ +function identity_destroy() /*: void*/{ + activity_state.destroy(); +} +;// CONCATENATED MODULE: ./src/sdk/queue.js +/*:: // +import { type HttpSuccessResponseT, type HttpErrorResponseT, type HttpFinishCbT, type WaitT, type UrlT, type MethodT, type RequestParamsT, type ActivityStateMapT } from './types';*/ @@ -7455,395 +5239,457 @@ import { type DocumentT, type HttpSuccessResponseT, type HttpErrorResponseT, typ -/** - * Flag to mark if session watch is already on - * - * @type {boolean} - * @private - */ -var _running = false; +/*:: type PendingT = {| + timestamp: number, + url: UrlT, + method?: MethodT, + createdAt?: number, + params: RequestParamsT +|}*/ /** - * Reference to interval id to be used for clearing + * Http request instance * - * @type {number} + * @type {Object} * @private */ -var _idInterval /*: ?IntervalID*/; +var _request = request({ + strategy: 'long', + continueCb: _continue +}); /** - * Reference to timeout id to be used for clearing + * Check if in offline mode * - * @type {number} + * @type {boolean} * @private */ -var _idTimeout /*: ?TimeoutID*/; +var _isOffline = false; /** - * Browser-specific prefixes for accessing Page Visibility API + * Name of the store used by queue * - * @type {{hidden, visibilityChange}} + * @type {string} * @private */ -var _pva; +var queue_storeName = 'queue'; /** - * Reference to the document casted to a plain object + * Current running state and task timestamp * - * @type {Document} + * @type {{running: boolean, timestamp: void|number, pause: void|Object}} + * @private */ -var documentExt = (document /*: DocumentT*/); +var _current +/*: {| + running: boolean, + timestamp: ?number, + pause: ?{| + timestamp: number, + wait: WaitT + |} +|}*/ += { + running: false, + timestamp: null, + pause: null +}; /** - * Initiate session watch: - * - bind to visibility change event to track window state (if out of focus or closed) - * - initiate activity state params and visibility state - * - check session initially - * - set the timer to update last active timestamp + * Remove from the top and continue running pending requests * + * @param {Object} result + * @param {Function} finish * @returns {Promise} + * @private */ -function watch() /*: Promise*/{ - _pva = getVisibilityApiAccess(); - if (_running) { - return session_Promise.reject({ - interrupted: true, - message: 'Session watch already initiated' +function _continue(result /*: HttpSuccessResponseT | HttpErrorResponseT*/, finish /*: HttpFinishCbT*/) /*: Promise*/{ + var wait = result && result.continue_in || null; + _current.pause = wait ? { + timestamp: Date.now(), + wait: wait + } : null; + return storage.getFirst(queue_storeName).then(function (pending) { + return pending ? storage.deleteItem(queue_storeName, pending.timestamp) : null; + }).then(function () { + finish(); + _current.running = false; + return run({ + wait: wait }); - } - _running = true; - subscribe('session:finished', _handleSessionRequestFinish); - if (_pva) { - on(documentExt, _pva.visibilityChange, _handleVisibilityChange); - } - if (_pva && documentExt[_pva.hidden]) { - logger.log('Session request attempt canceled because the tab is still hidden'); - return session_Promise.resolve({}); - } - activity_state.initParams(); - return _checkSession(); + }); } /** - * Check if session watch is running + * Correct timestamp if equal or less then previous one to avoid constraint errors + * Cases when needed: + * - test environment + * - when pushing to queue synchronously, one after an other * - * @returns {boolean} - */ -function session_isRunning() /*: boolean*/{ - return _running; -} - -/** - * Destroy session watch + * @returns {number} + * @private */ -function session_destroy() /*: void*/{ - _running = false; - activity_state.toBackground(); - _stopTimer(); - if (_pva) { - clearTimeout(_idTimeout); - off(documentExt, _pva.visibilityChange, _handleVisibilityChange); - on(documentExt, _pva.visibilityChange, _restoreAfterAsyncEnable); +function _prepareTimestamp() /*: number*/{ + var timestamp = Date.now(); + if (_current.timestamp && timestamp <= _current.timestamp) { + timestamp = _current.timestamp + 1; } + _current.timestamp = timestamp; + return timestamp; } /** - * Handle transit to background: - * - stop the timer - * - update session params - * - persist changes (store updated activity state) + * Persist activity state change with session offset reset after session request * + * @param {string} url * @returns {Promise} * @private */ -function _handleBackground() /*: Promise*/{ - _stopTimer(); - activity_state.updateSessionOffset(); - activity_state.toBackground(); +function _persist(url) /*: Promise*/{ + if (isRequest(url, 'session')) { + activity_state.resetSessionOffset(); + } + activity_state.updateLastActive(); return persist(); } /** - * Handle transit to foreground: - * - update session length - * - check for the session and restart the timer + * Push request to the queue * + * @param {string} url + * @param {string} method + * @param {Object=} params + * @param {boolean=} auto + * @param {number=} timestamp * @returns {Promise} - * @private */ -function _handleForeground() /*: Promise*/{ - return sync().then(function () { - activity_state.updateSessionLength(); - activity_state.toForeground(); - }).then(_checkSession); +function push(_ref /*:: */) { + var url = _ref /*:: */.url, + method = _ref /*:: */.method, + params = _ref /*:: */.params; + var _ref2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, + auto = _ref2.auto, + timestamp = _ref2.timestamp; + activity_state.updateParams(url, auto); + var filteredParams = entries(params || {}).filter(function (_ref3) { + var _ref4 = _slicedToArray(_ref3, 2), + value = _ref4[1]; + return isEmptyEntry(value); + }).reduce(reducer, {}); + var pending /*: PendingT*/ = { + timestamp: _prepareTimestamp(), + url: url, + method: method, + params: _objectSpread2(_objectSpread2({}, activity_state.getParams(url)), filteredParams) + }; + if (timestamp) { + pending.createdAt = timestamp; + } + return storage.addItem(queue_storeName, pending).then(function () { + return _persist(url); + }).then(function () { + return _current.running ? {} : run(); + }); } /** - * Handle visibility change and perform appropriate actions + * Prepare to send pending request if available * + * @param {number} timestamp + * @param {number=} createdAt + * @param {string=} url + * @param {string=} method + * @param {Object=} params + * @param {number=} wait + * @returns {Promise} * @private */ -function _handleVisibilityChange() /*: void*/{ - clearTimeout(_idTimeout); - var handler = _pva && documentExt[_pva.hidden] ? _handleBackground : _handleForeground; - _idTimeout = setTimeout(handler, 0); -} -function _restoreAfterAsyncEnable() /*: void*/{ - if (!_pva || documentExt[_pva.hidden]) { - return; - } - reload(); - if (!_running && disable_status() === 'on') { - off(documentExt, _pva.visibilityChange, _restoreAfterAsyncEnable); - main.__internal__.restartAfterAsyncEnable(); +function _prepareToSend() /*: Promise*/{ + var _ref5 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, + timestamp = _ref5.timestamp, + createdAt = _ref5.createdAt, + url = _ref5.url, + method = _ref5.method, + params = _ref5.params; + var wait /*:: ?: ?WaitT*/ = arguments.length > 1 ? arguments[1] : undefined; + var activityState = activity_state.current || {}; + var firstSession = url === '/session' && !activityState.installed; + var noPending = !url && !method && !params; + if (_isOffline && !firstSession || noPending) { + _current.running = false; + return Promise.resolve({}); } + return _request.send({ + url: url, + method: method, + params: _objectSpread2(_objectSpread2({}, params), {}, { + createdAt: getTimestamp(createdAt || timestamp) + }), + wait: wait || _checkWait() + }); } /** - * Handle session request finish; update installed state + * Check if there is waiting period required * - * @param {string} e - * @param {Object} result - * @returns {Promise|void} + * @returns {void|number} * @private */ -function _handleSessionRequestFinish(e /*: string*/, result /*: HttpSuccessResponseT | HttpErrorResponseT*/) /*: ?Promise*/{ - if (result && result.status === 'error') { - logger.error('Session was not successful, error was returned from the server:', result.response); - return; - } - activity_state.updateInstalled(); - publish('sdk:installed'); - return persist(); +function _checkWait() /*: ?WaitT*/{ + var _ref6 = _current.pause || {}, + timestamp = _ref6.timestamp, + wait = _ref6.wait; + var rest = Date.now() - (timestamp || 0); + return rest < wait ? wait - rest : null; } /** - * Start the session timer, every N seconds: - * - update session params - * - persist changes (store updated activity state) + * Run all pending requests * - * @private + * @param {boolean=false} cleanUp + * @param {number=} wait + * @returns {Promise} */ -function _startTimer() /*: void*/{ - _stopTimer(); - _idInterval = setInterval(function () { - activity_state.updateSessionOffset(); - return persist(); - }, config.sessionTimerWindow); +function run() /*: Promise*/{ + var _ref7 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, + cleanUp = _ref7.cleanUp, + wait = _ref7.wait; + if (_current.running) { + return Promise.resolve({}); + } + _current.running = true; + var chain = Promise.resolve({}); + if (cleanUp) { + chain = chain.then(_cleanUp); + } + return chain.then(function () { + return storage.getFirst(queue_storeName); + }).then(function (pending) { + return _prepareToSend(pending, wait); + }); +} + +/** + * Set offline mode to on or off + * - if on then all requests are queued + * - if off then run all pending requests + * + * @param {boolean} state + */ +function setOffline(state /*: boolean*/) /*: void*/{ + if (state === undefined) { + logger.error('State not provided, true or false has to be defined'); + return; + } + if (state === _isOffline) { + logger.error("The app is already in ".concat(state ? 'offline' : 'online', " mode")); + return; + } + var wasOffline = _isOffline; + _isOffline = state; + if (!state && wasOffline) { + run(); + } + logger.info("The app is now in ".concat(state ? 'offline' : 'online', " mode")); } /** - * Stop the session timer + * Clean up stale pending requests * * @private + * @returns {Promise} */ -function _stopTimer() /*: void*/{ - clearInterval(_idInterval); +function _cleanUp() /*: Promise*/{ + var upperBound = Date.now() - config.requestValidityWindow; + return storage.deleteBulk(queue_storeName, upperBound, 'upperBound'); } /** - * Prepare parameters for the session tracking + * Check if there is pending timeout to be flushed + * i.e. if queue is running * - * @param {Array} callbackParams - * @param {Array} partnerParams - * @returns {Object} - * @private + * @returns {boolean} */ -function _prepareParams(_ref /*:: */) /*: SessionRequestParamsT*/{ - var callbackParams = _ref /*:: */.callbackParams, - partnerParams = _ref /*:: */.partnerParams; - return { - callbackParams: callbackParams.length ? convertToMap(callbackParams) : null, - partnerParams: partnerParams.length ? convertToMap(partnerParams) : null - }; +function isRunning() /*: boolean*/{ + return _current.running; } /** - * Track session by sending the request to the server - * - * @private + * Clear queue store */ -function _trackSession() /*: Promise*/{ - return get().then(function (globalParams) { - push({ - url: '/session', - method: 'POST', - params: _prepareParams(globalParams) - }, { - auto: true - }); - }); +function queue_clear() /*: void*/{ + return storage.clear(queue_storeName); } /** - * Check if session needs to be tracked - * - * @private + * Destroy queue by clearing current timeout */ -function _checkSession() /*: Promise*/{ - _startTimer(); - var activityState = activity_state.current; - var lastInterval = activityState.lastInterval; - var isEnqueued = activityState.sessionCount > 0; - var currentWindow = lastInterval * SECOND; - if (!isEnqueued || isEnqueued && currentWindow >= config.sessionWindow) { - return _trackSession(); - } - publish('attribution:check'); - return persist(); +function queue_destroy() /*: void*/{ + _request.clear(); + _current.running = false; + _current.timestamp = null; + _current.pause = null; } -;// CONCATENATED MODULE: ./src/sdk/attribution.js - +;// CONCATENATED MODULE: ./src/sdk/global-params.js -var attribution_Promise = typeof Promise === 'undefined' ? (__webpack_require__(702).Promise) : Promise; /*:: // -import { type HttpSuccessResponseT, type HttpErrorResponseT, type HttpFinishCbT, type HttpRetryCbT, type AttributionStateT, type AttributionWhiteListT, type ActivityStateMapT, type AttributionMapT } from './types';*/ - - - - +import { type GlobalParamsT, type GlobalParamsMapT } from './types';*/ +/*:: type TypeT = 'callback' | 'partner'*/ +/*:: type KeysT = [string, TypeT]*/ +/*:: type KeysArrayT = Array*/ /** - * Http request instance + * Name of the store used by global params * - * @type {Object} + * @type {string} * @private */ -var attribution_request = request({ - url: '/attribution', - strategy: 'short', - continueCb: attribution_continue -}); +var global_params_storeName = 'globalParams'; /** - * List of valid attribution parameters + * Error message for type missing * - * @type {string[]} + * @type {Object} * @private */ -var _whitelist /*: AttributionWhiteListT*/ = ['tracker_token', 'tracker_name', 'network', 'campaign', 'adgroup', 'creative', 'click_label', 'state']; +var _error = { + short: 'No type provided', + long: 'Global parameter type not provided, `callback` or `partner` types are available' +}; /** - * Check if new attribution is the same as old one + * Omit type parameter from the collection * - * @param {string} adid - * @param {Object=} attribution - * @returns {boolean} + * @param {Array} params + * @returns {Array} * @private */ -function _isSame(_ref /*:: */) /*: boolean*/{ - var adid = _ref /*:: */.adid, - attribution = _ref /*:: */.attribution; - var oldAttribution = activity_state.current.attribution || {}; - var anyDifferent = attribution && _whitelist.some(function (k) { - return oldAttribution[k] !== attribution[k]; +function _omitType(params) /*: Array*/{ + return (params || []).map(function (_ref) { + var key = _ref.key, + value = _ref.value; + return { + key: key, + value: value + }; }); - return !anyDifferent && adid === oldAttribution.adid; } /** - * Check if attribution result is valid + * Get callback and partner global parameters * - * @param {string} adid - * @param {Object=} attribution - * @returns {boolean} - * @private + * @returns {Promise} */ -function _isValid(_ref2 /*:: */) /*: boolean*/{ - var _ref2$adid = _ref2 /*:: */.adid, - adid = _ref2$adid === void 0 ? '' : _ref2$adid, - _ref2$attribution = _ref2 /*:: */.attribution, - attribution = _ref2$attribution === void 0 ? {} : _ref2$attribution; - return !!adid && !!intersection(_whitelist, Object.keys(attribution)).length; +function get() /*: Promise*/{ + return Promise.all([storage.filterBy(global_params_storeName, 'callback'), storage.filterBy(global_params_storeName, 'partner')]).then(function (_ref2) { + var _ref3 = _slicedToArray(_ref2, 2), + callbackParams = _ref3[0], + partnerParams = _ref3[1]; + return { + callbackParams: _omitType(callbackParams), + partnerParams: _omitType(partnerParams) + }; + }); } /** - * Update attribution and initiate client's callback + * Add global parameters, either callback or partner params * - * @param {Object} result - * @private + * @param {Array} params + * @param {string} type + * @returns {Promise} */ -function _setAttribution(result /*: HttpSuccessResponseT*/) /*: Promise*/{ - if (isEmpty(result) || !_isValid(result) || _isSame(result)) { - return attribution_Promise.resolve({ - state: 'same' +function add(params /*: Array*/, type /*: TypeT*/) /*: void | Promise*/{ + if (type === undefined) { + logger.error(_error.long); + return Promise.reject({ + message: _error.short }); } - var attribution /*: AttributionMapT*/ = entries(result.attribution).filter(function (_ref3) { - var _ref4 = _slicedToArray(_ref3, 1), - key = _ref4[0]; - return _whitelist.indexOf(key) !== -1; - }).reduce(reducer, { - adid: result.adid - }); - activity_state.current = _objectSpread2(_objectSpread2({}, activity_state.current), {}, { - attribution: attribution - }); - return persist().then(function () { - publish('attribution:change', attribution); - logger.info('Attribution has been updated'); + /*:: type GlobalParamsWithTypeT = {|...GlobalParamsT, type: string|}*/ + var map /*: {[key: string]: string}*/ = convertToMap(params); + var prepared /*: Array*/ = Object.keys(map).map(function (key) { return { - state: 'changed' + key: key, + value: map[key], + type: type }; }); + return Promise.all([storage.filterBy(global_params_storeName, type), storage.addBulk(global_params_storeName, prepared, true)]).then(function (_ref4) { + var _ref5 = _slicedToArray(_ref4, 2), + oldParams = _ref5[0], + newParams = _ref5[1]; + var intersecting = intersection(oldParams.map(function (param) { + return param.key; + }), newParams.map(function (param) { + return param[0]; + })); + logger.log("Following ".concat(type, " parameters have been saved: ").concat(prepared.map(function (p) { + return "".concat(p.key, ":").concat(p.value); + }).join(', '))); + if (intersecting.length) { + logger.log("Keys: ".concat(intersecting.join(', '), " already existed so their values have been updated")); + } + return newParams; + }); } /** - * Store attribution or make another request if attribution not yet available + * Remove global parameter by key and type * - * @param {Object} result - * @param {Function} finish - * @param {Function} retry + * @param {string} key + * @param {string} type * @returns {Promise} - * @private */ -function attribution_continue(result /*: HttpSuccessResponseT | HttpErrorResponseT*/, finish /*: HttpFinishCbT*/, retry /*: HttpRetryCbT*/) /*: Promise*/{ - if (!result || result && result.status === 'error') { - finish(); - return attribution_Promise.resolve({ - state: 'unknown' +function remove(key /*: string*/, type /*: TypeT*/) /*: void | Promise*/{ + if (type === undefined) { + logger.error(_error.long); + return Promise.reject({ + message: _error.short }); } - if (!result.ask_in) { - finish(); - return _setAttribution(result); - } - return retry(result.ask_in); + return storage.deleteItem(global_params_storeName, [key, type]).then(function (result) { + logger.log("".concat(key, " ").concat(type, " parameter has been deleted")); + return result; + }); } /** - * Request attribution if session asked for it - * - * @param {Object=} sessionResult - * @param {number=} sessionResult.ask_in + * Remove all global parameters of certain type + * @param {string} type + * @returns {Promise} */ -function check(sessionResult /*: HttpSuccessResponseT*/) /*: Promise*/{ - var activityState = activity_state.current; - var askIn = (sessionResult || {}).ask_in; - if (!askIn && (activityState.attribution || !activityState.installed)) { - return attribution_Promise.resolve(activityState); +function removeAll(type /*: TypeT*/) /*: void | Promise*/{ + if (type === undefined) { + logger.error(_error.long); + return Promise.reject({ + message: _error.short + }); } - attribution_request.send({ - params: _objectSpread2({ - initiatedBy: !sessionResult ? 'sdk' : 'backend' - }, activity_state.getParams()), - wait: askIn + return storage.deleteBulk(global_params_storeName, type).then(function (result) { + logger.log("All ".concat(type, " parameters have been deleted")); + return result; }); - activity_state.updateSessionOffset(); - return persist(); } /** - * Destroy attribution by clearing running request + * Clear globalParams store */ -function attribution_destroy() /*: void*/{ - attribution_request.clear(); +function global_params_clear() /*: void*/{ + return storage.clear(global_params_storeName); } -;// CONCATENATED MODULE: ./src/sdk/gdpr-forget-device.js +;// CONCATENATED MODULE: ./src/sdk/session.js +/*:: // +import { type DocumentT, type HttpSuccessResponseT, type HttpErrorResponseT, type GlobalParamsMapT, type SessionRequestParamsT } from './types';*/ + + + + + @@ -7854,1521 +5700,882 @@ function attribution_destroy() /*: void*/{ /** - * Http request instance + * Flag to mark if session watch is already on * - * @type {Object} + * @type {boolean} * @private */ -var gdpr_forget_device_request = request({ - url: '/gdpr_forget_device', - method: 'POST', - strategy: 'short' -}); +var _running = false; /** - * Log messages used in different scenarios + * Reference to interval id to be used for clearing * - * @type {Object} + * @type {number} * @private */ -var gdpr_forget_device_logMessages = { - running: 'Adjust SDK is running pending GDPR Forget Me request', - pending: 'Adjust SDK will run GDPR Forget Me request after initialisation', - paused: 'Adjust SDK is already prepared to send GDPR Forget Me request', - off: 'Adjust SDK is already disabled' -}; +var _idInterval /*: ?IntervalID*/; /** - * Request GDPR-Forget-Me in order to disable sdk + * Reference to timeout id to be used for clearing * - * @param {boolean} force - * @returns {boolean} + * @type {number} + * @private */ -function forget(force /*: boolean*/) /*: boolean*/{ - var sdkStatus = disable_status(); - if (!force && sdkStatus !== 'on') { - logger.log(gdpr_forget_device_logMessages[sdkStatus]); - return false; - } - if (!config.isInitialised()) { - logger.log(gdpr_forget_device_logMessages.pending); - return true; - } - gdpr_forget_device_request.send({ - params: _objectSpread2({}, activity_state.getParams()) - }).then(function () { - publish('sdk:gdpr-forget-me'); - }); - return true; -} +var _idTimeout /*: ?TimeoutID*/; /** - * Start disable of the sdk due to GDPR-Forget-me request + * Browser-specific prefixes for accessing Page Visibility API * - * @returns {boolean} + * @type {{hidden, visibilityChange}} + * @private */ -function gdpr_forget_device_disable() { - return disable(REASON_GDPR, true); -} +var _pva; /** - * Finish disable of the sdk due to GDRP-Forget-me request + * Reference to the document casted to a plain object * - * @returns {boolean} + * @type {Document} */ -function gdpr_forget_device_finish() { - return finish(REASON_GDPR); -} +var documentExt = (document /*: DocumentT*/); /** - * Check if there is pending GDPR-Forget-Me request + * Initiate session watch: + * - bind to visibility change event to track window state (if out of focus or closed) + * - initiate activity state params and visibility state + * - check session initially + * - set the timer to update last active timestamp + * + * @returns {Promise} */ -function gdpr_forget_device_check() /*: void*/{ - if (disable_status() === 'paused') { - logger.log(gdpr_forget_device_logMessages.running); - forget(true); +function watch() /*: Promise*/{ + _pva = getVisibilityApiAccess(); + if (_running) { + return Promise.reject({ + interrupted: true, + message: 'Session watch already initiated' + }); + } + _running = true; + subscribe('session:finished', _handleSessionRequestFinish); + if (_pva) { + on(documentExt, _pva.visibilityChange, _handleVisibilityChange); + } + if (_pva && documentExt[_pva.hidden]) { + logger.log('Session request attempt canceled because the tab is still hidden'); + return Promise.resolve({}); } + activity_state.initParams(); + return _checkSession(); } /** - * Destroy by clearing running request + * Check if session watch is running + * + * @returns {boolean} */ -function gdpr_forget_device_destroy() /*: void*/{ - gdpr_forget_device_request.clear(); +function session_isRunning() /*: boolean*/{ + return _running; } -;// CONCATENATED MODULE: ./src/sdk/third-party-sharing.js - - - - - - -/*:: type ThirdPartySharingStatusT = 'pending' | 'on' | 'off'*/ /** - * Log messages used in different scenarios - * - * @type {Object} - * @private + * Destroy session watch */ -var third_party_sharing_logMessages = { - running: 'Adjust SDK is running pending third-party sharing opt-out request', - delayed: 'Adjust SDK will run third-party sharing opt-out request after initialisation', - pending: 'Adjust SDK already queued third-party sharing opt-out request', - off: 'Third-party sharing opt-out is already done', - start: { - inProgress: 'Third-party sharing opt-out has already started', - done: 'Third-party sharing opt-out is now started' - }, - finish: { - inProgress: 'Third-party sharing opt-out has already finished', - done: 'Third-party sharing opt-out is now finished' +function session_destroy() /*: void*/{ + _running = false; + activity_state.toBackground(); + _stopTimer(); + if (_pva) { + clearTimeout(_idTimeout); + off(documentExt, _pva.visibilityChange, _handleVisibilityChange); + on(documentExt, _pva.visibilityChange, _restoreAfterAsyncEnable); } -}; +} /** - * Get the status of the third-party sharing + * Handle transit to background: + * - stop the timer + * - update session params + * - persist changes (store updated activity state) * - * @returns {string} + * @returns {Promise} * @private */ -function _status() /*: ThirdPartySharingStatusT*/{ - var disabled = getThirdPartySharing() || {}; - if (disabled.reason) { - return disabled.pending ? 'pending' : 'off'; - } - return 'on'; +function _handleBackground() /*: Promise*/{ + _stopTimer(); + activity_state.updateSessionOffset(); + activity_state.toBackground(); + return persist(); } /** - * Request third-party sharing opt-out request + * Handle transit to foreground: + * - update session length + * - check for the session and restart the timer * - * @param {boolean} force - * @returns {boolean} + * @returns {Promise} + * @private */ -function optOut(force /*: boolean*/) { - var status = _status(); - if (!force && status !== 'on') { - logger.log(third_party_sharing_logMessages[status]); - return false; - } - if (!config.isInitialised()) { - logger.log(third_party_sharing_logMessages.delayed); - return true; - } - push({ - url: '/disable_third_party_sharing', - method: 'POST' - }); - return true; +function _handleForeground() /*: Promise*/{ + return sync().then(function () { + activity_state.updateSessionLength(); + activity_state.toForeground(); + }).then(_checkSession); } /** - * Start or finish thrid-party sharing disable process + * Handle visibility change and perform appropriate actions * - * @param {boolean} pending - * @param {string} expectedAction - * @returns {boolean} * @private */ -function third_party_sharing_disable(pending /*: boolean*/, expectedAction /*: 'start' | 'finish'*/) /*: boolean*/{ - var disabled = getThirdPartySharing() || {}; - var action = expectedAction === 'start' && pending ? 'start' : 'finish'; - var shouldNotStart = expectedAction === 'start' && disabled.reason; - var shouldNotFinish = expectedAction === 'finish' && disabled.reason && !disabled.pending; - if (shouldNotStart || shouldNotFinish) { - logger.log(third_party_sharing_logMessages[action].inProgress); - return false; - } - logger.log(third_party_sharing_logMessages[action].done); - setThirdPartySharing({ - reason: REASON_GENERAL, - pending: pending - }); - return true; +function _handleVisibilityChange() /*: void*/{ + clearTimeout(_idTimeout); + var handler = _pva && documentExt[_pva.hidden] ? _handleBackground : _handleForeground; + _idTimeout = setTimeout(handler, 0); } - -/** - * Start the third-party sharing disable process - * - * @returns {boolean} - */ -function sdk_third_party_sharing_disable() /*: boolean*/{ - return third_party_sharing_disable(true, 'start'); +function _restoreAfterAsyncEnable() /*: void*/{ + if (!_pva || documentExt[_pva.hidden]) { + return; + } + reload(); + if (!_running && disable_status() === 'on') { + off(documentExt, _pva.visibilityChange, _restoreAfterAsyncEnable); + main.__internal__.restartAfterAsyncEnable(); + } } /** - * Finalize the third-party sharing process + * Handle session request finish; update installed state * - * @returns {boolean} - */ -function third_party_sharing_finish() { - return third_party_sharing_disable(false, 'finish'); -} - -/** - * Check if there s pending third-party sharing opt-out request + * @param {string} e + * @param {Object} result + * @returns {Promise|void} + * @private */ -function third_party_sharing_check() /*: void*/{ - if (_status() === 'pending') { - logger.log(third_party_sharing_logMessages.running); - optOut(true); +function _handleSessionRequestFinish(e /*: string*/, result /*: HttpSuccessResponseT | HttpErrorResponseT*/) /*: ?Promise*/{ + if (result && result.status === 'error') { + logger.error('Session was not successful, error was returned from the server:', result.response); + return; } + activity_state.updateInstalled(); + publish('sdk:installed'); + return persist(); } -;// CONCATENATED MODULE: ./src/sdk/scheduler.js - +/** + * Start the session timer, every N seconds: + * - update session params + * - persist changes (store updated activity state) + * + * @private + */ +function _startTimer() /*: void*/{ + _stopTimer(); + _idInterval = setInterval(function () { + activity_state.updateSessionOffset(); + return persist(); + }, config.sessionTimerWindow); +} -/*:: type TaskT = {| - method: (timestamp?: number) => mixed, - description: string, - timestamp: number -|}*/ /** - * Delayed tasks list + * Stop the session timer * - * @type {Array} * @private */ -var _tasks /*: Array*/ = []; +function _stopTimer() /*: void*/{ + clearInterval(_idInterval); +} /** - * Put the dask in the delayed list + * Prepare parameters for the session tracking * - * @param {Function} method - * @param {string} description + * @param {Array} callbackParams + * @param {Array} partnerParams + * @returns {Object} + * @private */ -function delay(method /*: $PropertyType*/, description /*: $PropertyType*/) /*: void*/{ - _tasks.push({ - method: method, - description: description, - timestamp: Date.now() - }); +function _prepareParams(_ref /*:: */) /*: SessionRequestParamsT*/{ + var callbackParams = _ref /*:: */.callbackParams, + partnerParams = _ref /*:: */.partnerParams; + return { + callbackParams: callbackParams.length ? convertToMap(callbackParams) : null, + partnerParams: partnerParams.length ? convertToMap(partnerParams) : null + }; } /** - * Flush all delayed tasks + * Track session by sending the request to the server + * + * @private */ -function flush() /*: void*/{ - _tasks.forEach(function (task /*: TaskT*/) { - if (typeof task.method === 'function') { - logger.log("Delayed ".concat(task.description, " task is running now")); - task.method(task.timestamp); - } +function _trackSession() /*: Promise*/{ + return get().then(function (globalParams) { + push({ + url: '/session', + method: 'POST', + params: _prepareParams(globalParams) + }, { + auto: true + }); }); - _tasks = []; } /** - * Destroy all pending tasks + * Check if session needs to be tracked + * + * @private */ -function scheduler_destroy() /*: void*/{ - _tasks = []; +function _checkSession() /*: Promise*/{ + _startTimer(); + var activityState = activity_state.current; + var lastInterval = activityState.lastInterval; + var isEnqueued = activityState.sessionCount > 0; + var currentWindow = lastInterval * SECOND; + if (!isEnqueued || isEnqueued && currentWindow >= config.sessionWindow) { + return _trackSession(); + } + publish('attribution:check'); + return persist(); } -;// CONCATENATED MODULE: ./src/sdk/event.js +;// CONCATENATED MODULE: ./src/sdk/attribution.js + -var event_Promise = typeof Promise === 'undefined' ? (__webpack_require__(702).Promise) : Promise; /*:: // -import { type EventParamsT, type EventRequestParamsT, type GlobalParamsMapT, type GlobalKeyValueParamsT } from './types';*/ +import { type HttpSuccessResponseT, type HttpErrorResponseT, type HttpFinishCbT, type HttpRetryCbT, type AttributionStateT, type AttributionWhiteListT, type ActivityStateMapT, type AttributionMapT } from './types';*/ -/*:: type RevenueT = { - revenue: string, - currency: string -}*/ -var DEFAULT_EVENT_DEDUPLICATION_LIST_LIMIT = 10; /** - * Name of the store used by event deduplication ids + * Http request instance * - * @type {string} + * @type {Object} * @private */ -var event_storeName = 'eventDeduplication'; +var attribution_request = request({ + url: '/attribution', + strategy: 'short', + continueCb: attribution_continue +}); /** - * Get revenue value if positive and limit to 5 decimal places + * List of valid attribution parameters * - * @param {number=} revenue - * @param {string=} currency - * @returns {Object} + * @type {string[]} * @private */ -function _getRevenue(revenue /*: number | void*/, currency /*: string | void*/) /*: RevenueT*/{ - if (isNaN(revenue)) { - return {}; - } - revenue = parseFloat(revenue); - if (revenue < 0 || !currency) { - return {}; - } - return { - revenue: revenue.toFixed(5), - currency: currency - }; +var _whitelist /*: AttributionWhiteListT*/ = ['tracker_token', 'tracker_name', 'network', 'campaign', 'adgroup', 'creative', 'click_label', 'state']; + +/** + * Check if new attribution is the same as old one + * + * @param {string} adid + * @param {Object=} attribution + * @returns {boolean} + * @private + */ +function _isSame(_ref /*:: */) /*: boolean*/{ + var adid = _ref /*:: */.adid, + attribution = _ref /*:: */.attribution; + var oldAttribution = activity_state.current.attribution || {}; + var anyDifferent = attribution && _whitelist.some(function (k) { + return oldAttribution[k] !== attribution[k]; + }); + return !anyDifferent && adid === oldAttribution.adid; } /** - * Prepare parameters for the event tracking + * Check if attribution result is valid * - * @param {Object} params - * @param {string} params.eventToken - * @param {number=} params.revenue - * @param {string=} params.currency - * @param {Array=} params.callbackParams - * @param {Array=} params.partnerParams - * @param {Array} callbackParams - * @param {Array} partnerParams - * @returns {Object} + * @param {string} adid + * @param {Object=} attribution + * @returns {boolean} * @private */ -function event_prepareParams(params /*: EventParamsT*/, _ref /*:: */) /*: EventRequestParamsT*/{ - var callbackParams = _ref /*:: */.callbackParams, - partnerParams = _ref /*:: */.partnerParams; - var globalParams = {}; - var baseParams = _objectSpread2({ - eventToken: params.eventToken, - deduplicationId: params.deduplicationId - }, _getRevenue(params.revenue, params.currency)); - var eventCallbackParams /*: GlobalKeyValueParamsT*/ = _objectSpread2(_objectSpread2({}, convertToMap(callbackParams)), convertToMap(params.callbackParams)); - var eventPartnerParams /*: GlobalKeyValueParamsT*/ = _objectSpread2(_objectSpread2({}, convertToMap(partnerParams)), convertToMap(params.partnerParams)); - if (!isEmpty(eventCallbackParams)) { - globalParams.callbackParams = eventCallbackParams; - } - if (!isEmpty(eventPartnerParams)) { - globalParams.partnerParams = eventPartnerParams; - } - return _objectSpread2(_objectSpread2({}, baseParams), globalParams); +function _isValid(_ref2 /*:: */) /*: boolean*/{ + var _ref2$adid = _ref2 /*:: */.adid, + adid = _ref2$adid === void 0 ? '' : _ref2$adid, + _ref2$attribution = _ref2 /*:: */.attribution, + attribution = _ref2$attribution === void 0 ? {} : _ref2$attribution; + return !!adid && !!intersection(_whitelist, Object.keys(attribution)).length; } /** - * Get event deduplication ids + * Update attribution and initiate client's callback * - * @returns {Promise} + * @param {Object} result * @private */ -function _getEventDeduplicationIds() /*: Promise>*/{ - return storage.getAll(event_storeName).then(function (records) { - return records.map(function (record) { - return record.id; +function _setAttribution(result /*: HttpSuccessResponseT*/) /*: Promise*/{ + if (isEmpty(result) || !_isValid(result) || _isSame(result)) { + return Promise.resolve({ + state: 'same' }); + } + var attribution /*: AttributionMapT*/ = entries(result.attribution).filter(function (_ref3) { + var _ref4 = _slicedToArray(_ref3, 1), + key = _ref4[0]; + return _whitelist.indexOf(key) !== -1; + }).reduce(reducer, { + adid: result.adid + }); + activity_state.current = _objectSpread2(_objectSpread2({}, activity_state.current), {}, { + attribution: attribution + }); + return persist().then(function () { + publish('attribution:change', attribution); + logger.info('Attribution has been updated'); + return { + state: 'changed' + }; }); } /** - * Push event deduplication id and trim the store if out of the limit + * Store attribution or make another request if attribution not yet available * - * @param {string} id + * @param {Object} result + * @param {Function} finish + * @param {Function} retry * @returns {Promise} * @private */ -function _pushEventDeduplicationId(id /*: string*/) /*: Promise*/{ - var customLimit = config.getCustomConfig().eventDeduplicationListLimit; - var limit = customLimit > 0 ? customLimit : DEFAULT_EVENT_DEDUPLICATION_LIST_LIMIT; - return storage.count(event_storeName).then(function (count) { - var chain = event_Promise.resolve(); - if (count >= limit) { - var removeLength = count - limit + 1; - logger.log("Event deduplication list limit has been reached. Oldest ids are about to be removed (".concat(removeLength, " of them)")); - chain = storage.trimItems(event_storeName, removeLength); - } - return chain; - }).then(function () { - logger.info("New event deduplication id is added to the list: ".concat(id)); - return storage.addItem(event_storeName, { - id: id +function attribution_continue(result /*: HttpSuccessResponseT | HttpErrorResponseT*/, finish /*: HttpFinishCbT*/, retry /*: HttpRetryCbT*/) /*: Promise*/{ + if (!result || result && result.status === 'error') { + finish(); + return Promise.resolve({ + state: 'unknown' }); - }); + } + if (!result.ask_in) { + finish(); + return _setAttribution(result); + } + return retry(result.ask_in); } /** - * Check if deduplication id is already stored - * - if yes then reject - * - if not then push the id into storage + * Request attribution if session asked for it * - * @param {string=} id - * @returns {Promise} - * @private + * @param {Object=} sessionResult + * @param {number=} sessionResult.ask_in */ -function _checkEventDeduplicationId(id /*: string*/) /*: Promise*/{ - if (!id) { - return event_Promise.resolve(); +function check(sessionResult /*: HttpSuccessResponseT*/) /*: Promise*/{ + var activityState = activity_state.current; + var askIn = (sessionResult || {}).ask_in; + if (!askIn && (activityState.attribution || !activityState.installed)) { + return Promise.resolve(activityState); } - return _getEventDeduplicationIds().then(function (list) { - return list.indexOf(id) === -1 ? _pushEventDeduplicationId(id) : event_Promise.reject({ - message: "Event won't be tracked, since it was previously tracked with the same deduplication id ".concat(id) - }); + attribution_request.send({ + params: _objectSpread2({ + initiatedBy: !sessionResult ? 'sdk' : 'backend' + }, activity_state.getParams()), + wait: askIn }); + activity_state.updateSessionOffset(); + return persist(); } /** - * Track event by sending the request to the server - * - * @param {Object} params - * @param {number=} timestamp - * @return Promise + * Destroy attribution by clearing running request */ -function event_event(params /*: EventParamsT*/, timestamp /*: number*/) /*: Promise*/{ - if (!params || params && (isEmpty(params) || !params.eventToken)) { - var reason = 'You must provide event token in order to track event'; - logger.error(reason); - return event_Promise.reject(reason); - } - return _checkEventDeduplicationId(params.deduplicationId).then(get).then(function (globalParams) { - return push({ - url: '/event', - method: 'POST', - params: event_prepareParams(params, globalParams) - }, { - timestamp: timestamp - }); - }).catch(function (error) { - if (error && error.message) { - logger.error(error.message); - } - return event_Promise.reject(error); - }); +function attribution_destroy() /*: void*/{ + attribution_request.clear(); } -;// CONCATENATED MODULE: ./src/sdk/sdk-click.js -/*:: // -import { type SdkClickRequestParamsT } from './types';*/ + +;// CONCATENATED MODULE: ./src/sdk/gdpr-forget-device.js + + + + + /** - * Check the following: - * - redirected from somewhere other then client's website - * - there is adjust_referrer query param + * Http request instance * - * @returns {boolean} + * @type {Object} * @private */ -function _getReferrer() /*: ?string*/{ - return window.location.search.substring(1).split('&').map(function (pair) { - return pair.split('='); - }).reduce(reducer, {})['adjust_referrer']; -} +var gdpr_forget_device_request = request({ + url: '/gdpr_forget_device', + method: 'POST', + strategy: 'short' +}); /** - * Prepare params for the sdk click request + * Log messages used in different scenarios * - * @param {string} referrer - * @returns {Object} + * @type {Object} * @private */ -function sdk_click_prepareParams(referrer) /*: SdkClickRequestParamsT*/{ - return { - clickTime: getTimestamp(), - source: 'web_referrer', - referrer: decodeURIComponent(referrer) - }; -} +var gdpr_forget_device_logMessages = { + running: 'Adjust SDK is running pending GDPR Forget Me request', + pending: 'Adjust SDK will run GDPR Forget Me request after initialisation', + paused: 'Adjust SDK is already prepared to send GDPR Forget Me request', + off: 'Adjust SDK is already disabled' +}; /** - * Sends sdk_click request with manually settled referrer or with automatically grabbed one + * Request GDPR-Forget-Me in order to disable sdk + * + * @param {boolean} force + * @returns {boolean} */ -function sdkClick(manualReferrer /*: string*/, timestamp /*: number*/) /*: void*/{ - var referrer; - if (manualReferrer) { - referrer = manualReferrer; - } else { - referrer = _getReferrer(); +function forget(force /*: boolean*/) /*: boolean*/{ + var sdkStatus = disable_status(); + if (!force && sdkStatus !== 'on') { + logger.log(gdpr_forget_device_logMessages[sdkStatus]); + return false; } - if (referrer) { - push({ - url: '/sdk_click', - method: 'POST', - params: sdk_click_prepareParams(referrer) - }, { - timestamp: timestamp - }); + if (!config.isInitialised()) { + logger.log(gdpr_forget_device_logMessages.pending); + return true; } + gdpr_forget_device_request.send({ + params: _objectSpread2({}, activity_state.getParams()) + }).then(function () { + publish('sdk:gdpr-forget-me'); + }); + return true; } -;// CONCATENATED MODULE: ./src/sdk/smart-banner/detect-os.ts + /** - * Operation systems + * Start disable of the sdk due to GDPR-Forget-me request + * + * @returns {boolean} */ -var DeviceOS; +function gdpr_forget_device_disable() { + return disable(REASON_GDPR, true); +} /** - * Returns one of android, ios, windows, windows-phone or undefined for another OS. + * Finish disable of the sdk due to GDRP-Forget-me request + * + * @returns {boolean} */ -(function (DeviceOS) { - DeviceOS["Android"] = "android"; - DeviceOS["iOS"] = "ios"; - DeviceOS["WindowsPC"] = "windows"; - DeviceOS["WindowsPhone"] = "windows-phone"; -})(DeviceOS || (DeviceOS = {})); -function getDeviceOS() /*: Maybe*/{ - var _navigator, _navigator$userAgent; - var userAgent = (_navigator = navigator) === null || _navigator === void 0 ? void 0 : (_navigator$userAgent = _navigator.userAgent) === null || _navigator$userAgent === void 0 ? void 0 : _navigator$userAgent.toLowerCase(); - if (!userAgent || userAgent.length < 1) { - return undefined; - } - if (/ipad|iphone|ipod/.test(userAgent)) { - return DeviceOS.iOS; - } - - // Checking Windows first because Lumia devices could have for example - // "Mozilla/5.0 (Windows Mobile 10; Android 8.0.0; Microsoft; Lumia 950XL) ..." user agent - if (userAgent.includes('windows')) { - if (/phone|mobile/.test(userAgent)) { - return DeviceOS.WindowsPhone; - } - return DeviceOS.WindowsPC; - } - if (userAgent.includes('android')) { - return DeviceOS.Android; - } - return undefined; +function gdpr_forget_device_finish() { + return finish(REASON_GDPR); } -;// CONCATENATED MODULE: ./src/sdk/smart-banner/utilities.ts + /** - * Wraps JSON.parse() with try-catch. - * Returns parsed object if successfully parsed and null otherwise. + * Check if there is pending GDPR-Forget-Me request */ -function parseJson(str /*: string | null*/) /*: any*/{ - if (!str) { - return null; - } - try { - return JSON.parse(str); - } catch (error) { - return null; +function gdpr_forget_device_check() /*: void*/{ + if (disable_status() === 'paused') { + logger.log(gdpr_forget_device_logMessages.running); + forget(true); } } -;// CONCATENATED MODULE: ./src/sdk/smart-banner/storage/local-storage.ts - - - -var LocalStorage = /*#__PURE__*/function () { - function LocalStorage() { - var storageName /*: string*/ = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'adjust-smart-banner'; - _classCallCheck(this, LocalStorage); - this.storageName /*:: */ = storageName /*:: */; - } - _createClass(LocalStorage, [{ - key: "setItem", - value: function setItem(key /*: string*/, value /*: any*/) /*: void*/{ - localStorage.setItem("".concat(this.storageName, ".").concat(key), JSON.stringify(value)); - } - }, { - key: "getItem", - value: function getItem(key /*: string*/) /*: any | null*/{ - var value = localStorage.getItem("".concat(this.storageName, ".").concat(key)); - return parseJson(value); - } - }, { - key: "removeItem", - value: function removeItem(key /*: string*/) /*: void*/{ - localStorage.removeItem("".concat(this.storageName, ".").concat(key)); - } - }]); - return LocalStorage; -}(); -;// CONCATENATED MODULE: ./src/sdk/smart-banner/storage/in-memory-storage.ts - - - -var in_memory_storage_InMemoryStorage = /*#__PURE__*/function () { - function InMemoryStorage() { - _classCallCheck(this, InMemoryStorage); - _defineProperty(this, "items", {}); - } - _createClass(InMemoryStorage, [{ - key: "setItem", - value: function setItem(key /*: string*/, value /*: any*/) /*: void*/{ - this.items[key] = value; - } - }, { - key: "getItem", - value: function getItem(key /*: string*/) /*: any | null*/{ - return Object.prototype.hasOwnProperty.call(this.items, key) ? this.items[key] : null; - } - }, { - key: "removeItem", - value: function removeItem(key /*: string*/) /*: void*/{ - delete this.items[key]; - } - }]); - return InMemoryStorage; -}(); -;// CONCATENATED MODULE: ./src/sdk/smart-banner/storage/factory.ts - - - - - -var StorageFactory = /*#__PURE__*/function () { - function StorageFactory() { - _classCallCheck(this, StorageFactory); - } - _createClass(StorageFactory, null, [{ - key: "isLocalStorageSupported", - value: function isLocalStorageSupported() /*: boolean*/{ - try { - var uid = new Date().toString(); - var storage = window.localStorage; - storage.setItem(uid, uid); - var result = storage.getItem(uid) === uid; - storage.removeItem(uid); - var support = !!(result && storage); - return support; - } catch (e) { - return false; - } - } - }, { - key: "createStorage", - value: function createStorage() /*: Storage*/{ - if (this.isLocalStorageSupported()) { - return new LocalStorage(); - } - return new in_memory_storage_InMemoryStorage(); - } - }]); - return StorageFactory; -}(); -;// CONCATENATED MODULE: ./src/sdk/smart-banner/api.ts -var api_Promise = typeof Promise === 'undefined' ? (__webpack_require__(702).Promise) : Promise; - -var Position; -(function (Position) { - Position["Top"] = "top"; - Position["Bottom"] = "bottom"; -})(Position || (Position = {})); -/*:: export interface SmartBannerData { - appId: string; - appName: string; - position: Position; - imageUrl?: string; - header: string; - description: string; - buttonText: string; - dismissInterval: number; - trackerToken: string; - deeplinkPath?: string; -}*/ /** - * Ensures response contains general info: title, description, button_label and tracker_token and converts response - * to SmartBannerData + * Destroy by clearing running request */ -function validate(response /*: Partial*/) /*: SmartBannerData | null*/{ - var title = response.title, - description = response.description, - button_label = response.button_label, - tracker_token = response.tracker_token; - if (title && description && button_label && tracker_token) { - var _response$app, _response$app2; - return { - appId: ((_response$app = response.app) === null || _response$app === void 0 ? void 0 : _response$app.default_store_app_id) || '', - appName: ((_response$app2 = response.app) === null || _response$app2 === void 0 ? void 0 : _response$app2.name) || '', - position: response.position || Position.Bottom, - imageUrl: response.image_url, - header: title, - description: description, - buttonText: button_label, - trackerToken: tracker_token, - deeplinkPath: response.deeplink_path, - dismissInterval: 24 * 60 * 60 * 1000 // 1 day in millis before show banner next time - }; - } - - return null; -} -function fetchSmartBannerData(webToken /*: string*/, deviceOs /*: DeviceOS*/, network /*: Network*/) /*: Promise*/{ - var path = '/smart_banner'; - return network.request(path, { - 'app_web_token': webToken - }).then(function (banners) { - var banner = banners.find(function (item) { - return item.platform === deviceOs; - }); - if (!banner) { - return null; - } - return validate(banner); - }).catch(function (error) { - logger.error('Network error occurred during loading Smart Banner: ' + JSON.stringify(error)); - return null; - }); +function gdpr_forget_device_destroy() /*: void*/{ + gdpr_forget_device_request.clear(); } -// EXTERNAL MODULE: ./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js -var injectStylesIntoStyleTag = __webpack_require__(379); -var injectStylesIntoStyleTag_default = /*#__PURE__*/__webpack_require__.n(injectStylesIntoStyleTag); -// EXTERNAL MODULE: ./node_modules/style-loader/dist/runtime/styleDomAPI.js -var styleDomAPI = __webpack_require__(795); -var styleDomAPI_default = /*#__PURE__*/__webpack_require__.n(styleDomAPI); -// EXTERNAL MODULE: ./node_modules/style-loader/dist/runtime/insertBySelector.js -var insertBySelector = __webpack_require__(569); -var insertBySelector_default = /*#__PURE__*/__webpack_require__.n(insertBySelector); -// EXTERNAL MODULE: ./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js -var setAttributesWithoutAttributes = __webpack_require__(565); -var setAttributesWithoutAttributes_default = /*#__PURE__*/__webpack_require__.n(setAttributesWithoutAttributes); -// EXTERNAL MODULE: ./node_modules/style-loader/dist/runtime/insertStyleElement.js -var insertStyleElement = __webpack_require__(216); -var insertStyleElement_default = /*#__PURE__*/__webpack_require__.n(insertStyleElement); -// EXTERNAL MODULE: ./node_modules/style-loader/dist/runtime/styleTagTransform.js -var styleTagTransform = __webpack_require__(589); -var styleTagTransform_default = /*#__PURE__*/__webpack_require__.n(styleTagTransform); -// EXTERNAL MODULE: ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./node_modules/sass-loader/dist/cjs.js!./src/sdk/smart-banner/assets/styles.module.scss -var styles_module = __webpack_require__(841); -;// CONCATENATED MODULE: ./src/sdk/smart-banner/assets/styles.module.scss - - - - - - - - - - - -var options = {}; - -options.styleTagTransform = (styleTagTransform_default()); -options.setAttributes = (setAttributesWithoutAttributes_default()); - - options.insert = insertBySelector_default().bind(null, "head"); - -options.domAPI = (styleDomAPI_default()); -options.insertStyleElement = (insertStyleElement_default()); - -var update = injectStylesIntoStyleTag_default()(styles_module/* default */.Z, options); - - - - - /* harmony default export */ const assets_styles_module = (styles_module/* default */.Z && styles_module/* default.locals */.Z.locals ? styles_module/* default.locals */.Z.locals : undefined); - -;// CONCATENATED MODULE: ./src/sdk/smart-banner/assets/template.ts - -/* harmony default export */ const template = (function (positionStyle /*: string*/, header /*: string*/, description /*: string*/, buttonText /*: string*/, href /*: string*/) { - return "\n
\n
\n
\n \n
\n
\n \"").concat(header,\n
\n
\n

").concat(header, "

\n

").concat(description, "

\n
\n ").concat(buttonText, "\n
\n
\n
"); -}); -;// CONCATENATED MODULE: ./src/sdk/smart-banner/view/app-icon.ts - - - -var app_icon_Promise = typeof Promise === 'undefined' ? (__webpack_require__(702).Promise) : Promise; -var AppIcon = /*#__PURE__*/function () { - function AppIcon(bannerData /*: AppIconData*/, image /*: HTMLImageElement*/, placeholder /*: HTMLElement*/) { - _classCallCheck(this, AppIcon); - _defineProperty(this, "appTraceUrl", function (appId /*: string*/) { - return "https://www.apptrace.com/api/app/".concat(appId, "/artwork_url_small"); - }); - _defineProperty(this, "appName", void 0); - _defineProperty(this, "image", void 0); - _defineProperty(this, "placeholder", void 0); - this.image = image; - this.placeholder = placeholder; - this.appName = bannerData.appName; - var sources = this.getSources(bannerData); - this.showImage(sources); - } - _createClass(AppIcon, [{ - key: "getSources", - value: function getSources(bannerData /*: AppIconData*/) /*: string[]*/{ - var sourcesArray /*: string[]*/ = []; - if (bannerData.imageUrl) { - sourcesArray.push(bannerData.imageUrl); - } - sourcesArray.push(this.appTraceUrl(bannerData.appId)); - return sourcesArray; - } - }, { - key: "showImage", - value: function showImage(sources /*: string[]*/) /*: Promise*/{ - var _this = this; - var imageLoadingPromise = sources.reduce(function (acc, url) { - return acc.catch(function () { - return _this.loadImage(url, _this.image); - }); - }, app_icon_Promise.reject()); - return imageLoadingPromise.then(function () { - _this.placeholder.remove(); - }).catch(function () { - _this.image.remove(); - _this.placeholder.innerText = _this.appName.length ? _this.appName[0].toUpperCase() : ''; - }); - } - }, { - key: "loadImage", - value: function loadImage(url /*: string*/, image /*: HTMLImageElement*/) { - return new app_icon_Promise(function (resolve, reject) { - image.onload = resolve; - image.onerror = reject; - image.src = url; - }); - } - }]); - return AppIcon; -}(); -;// CONCATENATED MODULE: ./src/sdk/smart-banner/view/smart-banner-view.ts - - - - - - - -var SmartBannerView = /*#__PURE__*/function () { - function SmartBannerView(data /*: SmartBannerData*/, onDismiss /*: () => void*/, endpoint /*: string*/) { - _classCallCheck(this, SmartBannerView); - _defineProperty(this, "parent", document.body); - _defineProperty(this, "banner", void 0); - _defineProperty(this, "dismissButton", null); - _defineProperty(this, "onDismiss", void 0); - this.onDismiss = onDismiss; - this.render(data, endpoint); - } - _createClass(SmartBannerView, [{ - key: "render", - value: function render(bannerData /*: SmartBannerData*/, endpoint /*: string*/) { - this.banner = document.createElement('div'); - this.banner.setAttribute('class', assets_styles_module.bannerContainer); - var positionStyle = bannerData.position === Position.Top ? assets_styles_module.stickyToTop : assets_styles_module.stickyToBottom; - var query = bannerData.deeplinkPath ? "?deeplink=".concat(encodeURIComponent(bannerData.deeplinkPath)) : ''; - var href = "".concat(endpoint, "/").concat(bannerData.trackerToken).concat(query); - this.banner.innerHTML = template(positionStyle, bannerData.header, bannerData.description, bannerData.buttonText, href); - if (bannerData.position === Position.Top) { - this.parent.insertBefore(this.banner, this.parent.firstChild); - } else { - this.parent.appendChild(this.banner); - } - this.dismissButton = this.getElemByClass(assets_styles_module.dismiss); - if (this.dismissButton) { - this.dismissButton.addEventListener('click', this.onDismiss); - } - var appIconPlaceholder = this.getElemByClass(assets_styles_module.placeholder); - var appIconImage = this.getElemByClass(assets_styles_module.image); - if (appIconImage && appIconPlaceholder) { - new AppIcon(bannerData, appIconImage, appIconPlaceholder); - } - } - }, { - key: "show", - value: function show() { - this.banner.hidden = false; - } - }, { - key: "hide", - value: function hide() { - this.banner.hidden = true; - } - }, { - key: "destroy", - value: function destroy() { - this.removeDismissButtonHandler(); - this.banner.remove(); - } - }, { - key: "removeDismissButtonHandler", - value: function removeDismissButtonHandler() { - if (this.dismissButton && this.onDismiss) { - this.dismissButton.removeEventListener('click', this.onDismiss); - this.dismissButton = null; - } - } - }, { - key: "getElemByClass", - value: function getElemByClass /*:: */(classNames /*: string*/) /*: T | null*/{ - if (this.banner) { - var elements = this.banner.getElementsByClassName(classNames); - return elements.length > 0 ? elements[0] : null; - } - return null; - } - }]); - return SmartBannerView; -}(); -;// CONCATENATED MODULE: ./src/sdk/smart-banner/network/errors.ts -/*:: export interface NetworkError { - status: number; - message: string; -}*/ -var NoConnectionError /*: NetworkError*/ = { - status: 0, - message: 'No internet connectivity' -}; -;// CONCATENATED MODULE: ./src/sdk/smart-banner/network/xhr-network.ts +;// CONCATENATED MODULE: ./src/sdk/third-party-sharing.js -var xhr_network_Promise = typeof Promise === 'undefined' ? (__webpack_require__(702).Promise) : Promise; -/** Sends HTTP GET request using XMLHttpRequest */ -var XhrNetwork = /*#__PURE__*/function () { - function XhrNetwork(origin /*: string*/) { - _classCallCheck(this, XhrNetwork); - this.origin /*:: ?*/ = origin /*:: ?*/; +/*:: type ThirdPartySharingStatusT = 'pending' | 'on' | 'off'*/ +/** + * Log messages used in different scenarios + * + * @type {Object} + * @private + */ +var third_party_sharing_logMessages = { + running: 'Adjust SDK is running pending third-party sharing opt-out request', + delayed: 'Adjust SDK will run third-party sharing opt-out request after initialisation', + pending: 'Adjust SDK already queued third-party sharing opt-out request', + off: 'Third-party sharing opt-out is already done', + start: { + inProgress: 'Third-party sharing opt-out has already started', + done: 'Third-party sharing opt-out is now started' + }, + finish: { + inProgress: 'Third-party sharing opt-out has already finished', + done: 'Third-party sharing opt-out is now finished' } - _createClass(XhrNetwork, [{ - key: "endpoint", - get: function get() /*: string*/{ - if (!this.origin) { - throw Error('XhrNetwork: Origin not defined'); - } - return this.origin; - }, - set: function set(value /*: string*/) { - this.origin = value; - } +}; - /** - * Creates an XMLHttpRequest object and sends a GET request with provided encoded URL - * @param url encoded URL - */ - }, { - key: "xhr", - value: function xhr /*:: */(url /*: string*/) /*: Promise*/{ - return new xhr_network_Promise(function (resolve, reject /*: (err: NetworkError) => void*/) { - var xhr = new XMLHttpRequest(); - xhr.open('GET', url); - var headers = [['Client-SDK', "js".concat(globals.version)], ['Content-Type', 'application/json']]; - headers.forEach(function (_ref) { - var _ref2 = _slicedToArray(_ref, 2), - key = _ref2[0], - value = _ref2[1]; - xhr.setRequestHeader(key, value); - }); - xhr.onerror = function () { - return reject(NoConnectionError); - }; - xhr.onreadystatechange = function () { - if (xhr.readyState !== 4) { - return; - } - var okStatus = xhr.status >= 200 && xhr.status < 300; - var json = parseJson(xhr.responseText); - if (xhr.status === 0) { - reject(NoConnectionError); - } else { - if (okStatus) { - resolve(json); - } else { - reject({ - status: xhr.status, - message: json || xhr.responseText || '' - }); - } - } - }; - xhr.send(); - }); - } - }, { - key: "encodeParams", - value: function encodeParams(params /*: Record*/) /*: string*/{ - return Object.keys(params).map(function (key) { - return [encodeURIComponent(key), encodeURIComponent(params[key])].join('='); - }).join('&'); - } - }, { - key: "request", - value: function request /*:: */(path /*: string*/, params /*: Record*/) /*: Promise*/{ - var encodedParams = params ? "?".concat(this.encodeParams(params)) : ''; - return this.xhr("".concat(this.endpoint).concat(path).concat(encodedParams)); - } - }]); - return XhrNetwork; -}(); -;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js -function _assertThisInitialized(self) { - if (self === void 0) { - throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); - } - return self; -} -;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js -function _setPrototypeOf(o, p) { - _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { - o.__proto__ = p; - return o; - }; - return _setPrototypeOf(o, p); +/** + * Get the status of the third-party sharing + * + * @returns {string} + * @private + */ +function _status() /*: ThirdPartySharingStatusT*/{ + var disabled = getThirdPartySharing() || {}; + if (disabled.reason) { + return disabled.pending ? 'pending' : 'off'; + } + return 'on'; } -;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/inherits.js -function _inherits(subClass, superClass) { - if (typeof superClass !== "function" && superClass !== null) { - throw new TypeError("Super expression must either be null or a function"); +/** + * Request third-party sharing opt-out request + * + * @param {boolean} force + * @returns {boolean} + */ +function optOut(force /*: boolean*/) { + var status = _status(); + if (!force && status !== 'on') { + logger.log(third_party_sharing_logMessages[status]); + return false; } - subClass.prototype = Object.create(superClass && superClass.prototype, { - constructor: { - value: subClass, - writable: true, - configurable: true - } - }); - Object.defineProperty(subClass, "prototype", { - writable: false + if (!config.isInitialised()) { + logger.log(third_party_sharing_logMessages.delayed); + return true; + } + push({ + url: '/disable_third_party_sharing', + method: 'POST' }); - if (superClass) _setPrototypeOf(subClass, superClass); -} -;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js -function _getPrototypeOf(o) { - _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { - return o.__proto__ || Object.getPrototypeOf(o); - }; - return _getPrototypeOf(o); + return true; } -;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/isNativeReflectConstruct.js -function _isNativeReflectConstruct() { - if (typeof Reflect === "undefined" || !Reflect.construct) return false; - if (Reflect.construct.sham) return false; - if (typeof Proxy === "function") return true; - try { - Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); - return true; - } catch (e) { + +/** + * Start or finish thrid-party sharing disable process + * + * @param {boolean} pending + * @param {string} expectedAction + * @returns {boolean} + * @private + */ +function third_party_sharing_disable(pending /*: boolean*/, expectedAction /*: 'start' | 'finish'*/) /*: boolean*/{ + var disabled = getThirdPartySharing() || {}; + var action = expectedAction === 'start' && pending ? 'start' : 'finish'; + var shouldNotStart = expectedAction === 'start' && disabled.reason; + var shouldNotFinish = expectedAction === 'finish' && disabled.reason && !disabled.pending; + if (shouldNotStart || shouldNotFinish) { + logger.log(third_party_sharing_logMessages[action].inProgress); return false; } + logger.log(third_party_sharing_logMessages[action].done); + setThirdPartySharing({ + reason: REASON_GENERAL, + pending: pending + }); + return true; +} + +/** + * Start the third-party sharing disable process + * + * @returns {boolean} + */ +function sdk_third_party_sharing_disable() /*: boolean*/{ + return third_party_sharing_disable(true, 'start'); } -;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js +/** + * Finalize the third-party sharing process + * + * @returns {boolean} + */ +function third_party_sharing_finish() { + return third_party_sharing_disable(false, 'finish'); +} -function _possibleConstructorReturn(self, call) { - if (call && (_typeof(call) === "object" || typeof call === "function")) { - return call; - } else if (call !== void 0) { - throw new TypeError("Derived constructors may only return object or undefined"); +/** + * Check if there s pending third-party sharing opt-out request + */ +function third_party_sharing_check() /*: void*/{ + if (_status() === 'pending') { + logger.log(third_party_sharing_logMessages.running); + optOut(true); } - return _assertThisInitialized(self); } -;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/createSuper.js +;// CONCATENATED MODULE: ./src/sdk/scheduler.js +/*:: type TaskT = {| + method: (timestamp?: number) => mixed, + description: string, + timestamp: number +|}*/ +/** + * Delayed tasks list + * + * @type {Array} + * @private + */ +var _tasks /*: Array*/ = []; -function _createSuper(Derived) { - var hasNativeReflectConstruct = _isNativeReflectConstruct(); - return function _createSuperInternal() { - var Super = _getPrototypeOf(Derived), - result; - if (hasNativeReflectConstruct) { - var NewTarget = _getPrototypeOf(this).constructor; - result = Reflect.construct(Super, arguments, NewTarget); - } else { - result = Super.apply(this, arguments); +/** + * Put the dask in the delayed list + * + * @param {Function} method + * @param {string} description + */ +function delay(method /*: $PropertyType*/, description /*: $PropertyType*/) /*: void*/{ + _tasks.push({ + method: method, + description: description, + timestamp: Date.now() + }); +} + +/** + * Flush all delayed tasks + */ +function flush() /*: void*/{ + _tasks.forEach(function (task /*: TaskT*/) { + if (typeof task.method === 'function') { + logger.log("Delayed ".concat(task.description, " task is running now")); + task.method(task.timestamp); } - return _possibleConstructorReturn(this, result); - }; + }); + _tasks = []; } -;// CONCATENATED MODULE: ./src/sdk/smart-banner/network/network.ts +/** + * Destroy all pending tasks + */ +function scheduler_destroy() /*: void*/{ + _tasks = []; +} -var network_Promise = typeof Promise === 'undefined' ? (__webpack_require__(702).Promise) : Promise; -/*:: export interface Network { - endpoint: string; - request: (path: string, params?: Record) => Promise; -}*/ -var NetworkDecorator = /*#__PURE__*/function () { - function NetworkDecorator(network /*: Network*/) { - _classCallCheck(this, NetworkDecorator); - this.network /*:: */ = network /*:: */; - } - _createClass(NetworkDecorator, [{ - key: "endpoint", - get: function get() /*: string*/{ - return this.network.endpoint; - }, - set: function set(value /*: string*/) { - this.network.endpoint = value; - } - }, { - key: "request", - value: function request /*:: */(path /*: string*/, params /*: Record*/) /*: Promise*/{ - return this.network.request(path, params); - } - }]); - return NetworkDecorator; -}(); -;// CONCATENATED MODULE: ./src/sdk/smart-banner/network/url-strategy/url-strategy.ts +;// CONCATENATED MODULE: ./src/sdk/event.js + +/*:: // +import { type EventParamsT, type EventRequestParamsT, type GlobalParamsMapT, type GlobalKeyValueParamsT } from './types';*/ -var url_strategy_Promise = typeof Promise === 'undefined' ? (__webpack_require__(702).Promise) : Promise; -/*:: export type BaseUrlsMap = { - endpointName: string; - app: string; - gdpr: string; + +/*:: type RevenueT = { + revenue: string, + currency: string }*/ -var url_strategy_UrlStrategy = /*#__PURE__*/function () { - function UrlStrategy(preferredUrls /*: () => BaseUrlsMap[]*/) { - _classCallCheck(this, UrlStrategy); - this.preferredUrls /*:: */ = preferredUrls /*:: */; - } +var DEFAULT_EVENT_DEDUPLICATION_LIST_LIMIT = 10; - /** - * Gets the list of preferred endpoints and wraps `sendRequest` function with iterative retries until available - * endpoint found or another error occurred. - */ - _createClass(UrlStrategy, [{ - key: "retries", - value: function retries /*:: */(sendRequest /*: (urls: BaseUrlsMap) => Promise*/) /*: Promise*/{ - var _this = this; - var attempt = 0; - var trySendRequest = function trySendRequest() /*: Promise*/{ - var preferredUrls = _this.preferredUrls(); - if (!preferredUrls || preferredUrls.length === 0) { - logger.error(UrlStrategy.NoPreferredUrlsDefinedError.message); - throw UrlStrategy.NoPreferredUrlsDefinedError; - } - var urlsMap = preferredUrls[attempt++]; - return sendRequest(urlsMap).catch(function (reason /*: NetworkError*/) { - if (reason === NoConnectionError) { - logger.log("Failed to connect ".concat(urlsMap.endpointName, " endpoint")); - if (attempt < preferredUrls.length) { - logger.log("Trying ".concat(preferredUrls[attempt].endpointName, " one")); - return trySendRequest(); // Trying next endpoint - } - } +/** + * Name of the store used by event deduplication ids + * + * @type {string} + * @private + */ +var event_storeName = 'eventDeduplication'; - // Another error occurred or we ran out of attempts, re-throw - throw reason; - }); - }; - return trySendRequest(); - } - }]); - return UrlStrategy; -}(); -_defineProperty(url_strategy_UrlStrategy, "NoPreferredUrlsDefinedError", new ReferenceError('UrlStrategy: No preferred URL defined')); -;// CONCATENATED MODULE: ./src/sdk/smart-banner/network/url-strategy/blocked-url-bypass.ts - - -var BlockedUrlBypass; -(function (_BlockedUrlBypass) { - var _endpoints; - var Default = _BlockedUrlBypass.Default = 'default'; - var India = _BlockedUrlBypass.India = 'india'; - var China = _BlockedUrlBypass.China = 'china'; - /*:: */ - var endpoints /*:: */ = (_endpoints = {}, _defineProperty(_endpoints, BlockedUrlBypass.Default, ENDPOINTS["default"]), _defineProperty(_endpoints, BlockedUrlBypass.India, ENDPOINTS.india), _defineProperty(_endpoints, BlockedUrlBypass.China, ENDPOINTS.china), _endpoints); - var getPreferredUrlsWithOption = function getPreferredUrlsWithOption(endpoints /*:: */, option /*:: */) { - if (option === BlockedUrlBypass.India) { - return [endpoints[BlockedUrlBypass.India], endpoints[BlockedUrlBypass.Default]]; - } - if (option === BlockedUrlBypass.China) { - return [endpoints[BlockedUrlBypass.China], endpoints[BlockedUrlBypass.Default]]; - } - return [endpoints[BlockedUrlBypass.Default], endpoints[BlockedUrlBypass.India], endpoints[BlockedUrlBypass.China]]; - }; - function preferredUrlsGetter(option /*:: */) { - var endpointsMap /*:: */ = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : endpoints; - return function () { - return getPreferredUrlsWithOption(endpointsMap, option); - }; +/** + * Get revenue value if positive and limit to 5 decimal places + * + * @param {number=} revenue + * @param {string=} currency + * @returns {Object} + * @private + */ +function _getRevenue(revenue /*: number | void*/, currency /*: string | void*/) /*: RevenueT*/{ + if (isNaN(revenue)) { + return {}; } - _BlockedUrlBypass.preferredUrlsGetter = preferredUrlsGetter; -})(BlockedUrlBypass || (BlockedUrlBypass = {})); -;// CONCATENATED MODULE: ./src/sdk/smart-banner/network/url-strategy/custom-url.ts -var CustomUrl; -(function (_CustomUrl) { - var getPreferredUrlsWithOption = function getPreferredUrlsWithOption(customUrl /*:: */) { - return [{ - endpointName: "Custom (".concat(customUrl, ")"), - app: customUrl, - gdpr: customUrl - }]; + revenue = parseFloat(revenue); + if (revenue < 0 || !currency) { + return {}; + } + return { + revenue: revenue.toFixed(5), + currency: currency }; - function preferredUrlsGetter(customUrl /*:: */) { - return function () { - return getPreferredUrlsWithOption(customUrl); - }; +} + +/** + * Prepare parameters for the event tracking + * + * @param {Object} params + * @param {string} params.eventToken + * @param {number=} params.revenue + * @param {string=} params.currency + * @param {Array=} params.callbackParams + * @param {Array=} params.partnerParams + * @param {Array} callbackParams + * @param {Array} partnerParams + * @returns {Object} + * @private + */ +function event_prepareParams(params /*: EventParamsT*/, _ref /*:: */) /*: EventRequestParamsT*/{ + var callbackParams = _ref /*:: */.callbackParams, + partnerParams = _ref /*:: */.partnerParams; + var globalParams = {}; + var baseParams = _objectSpread2({ + eventToken: params.eventToken, + deduplicationId: params.deduplicationId + }, _getRevenue(params.revenue, params.currency)); + var eventCallbackParams /*: GlobalKeyValueParamsT*/ = _objectSpread2(_objectSpread2({}, convertToMap(callbackParams)), convertToMap(params.callbackParams)); + var eventPartnerParams /*: GlobalKeyValueParamsT*/ = _objectSpread2(_objectSpread2({}, convertToMap(partnerParams)), convertToMap(params.partnerParams)); + if (!isEmpty(eventCallbackParams)) { + globalParams.callbackParams = eventCallbackParams; } - _CustomUrl.preferredUrlsGetter = preferredUrlsGetter; -})(CustomUrl || (CustomUrl = {})); -;// CONCATENATED MODULE: ./src/sdk/smart-banner/network/url-strategy/data-residency.ts - - -var data_residency_DataResidency; -(function (_DataResidency) { - var _endpoints; - var EU = _DataResidency.EU = 'EU'; - var TR = _DataResidency.TR = 'TR'; - var US = _DataResidency.US = 'US'; - /*:: */ - var endpoints /*:: */ = (_endpoints = {}, _defineProperty(_endpoints, data_residency_DataResidency.EU, ENDPOINTS.EU), _defineProperty(_endpoints, data_residency_DataResidency.TR, ENDPOINTS.TR), _defineProperty(_endpoints, data_residency_DataResidency.US, ENDPOINTS.US), _endpoints); - var getPreferredUrlsWithOption = function getPreferredUrlsWithOption(endpoints /*:: */, option /*:: */) { - return [endpoints[option]]; - }; - function preferredUrlsGetter(option /*:: */) { - var endpointsMap /*:: */ = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : endpoints; - return function () { - return getPreferredUrlsWithOption(endpointsMap, option); - }; + if (!isEmpty(eventPartnerParams)) { + globalParams.partnerParams = eventPartnerParams; } - _DataResidency.preferredUrlsGetter = preferredUrlsGetter; -})(data_residency_DataResidency || (data_residency_DataResidency = {})); -;// CONCATENATED MODULE: ./src/sdk/smart-banner/network/url-strategy/url-strategy-factory.ts - - - + return _objectSpread2(_objectSpread2({}, baseParams), globalParams); +} +/** + * Get event deduplication ids + * + * @returns {Promise} + * @private + */ +function _getEventDeduplicationIds() /*: Promise>*/{ + return storage.getAll(event_storeName).then(function (records) { + return records.map(function (record) { + return record.id; + }); + }); +} -/*:: export type UrlStrategyConfig = { - customUrl: string; - urlStrategy?: never; - dataResidency?: never; -} | { - customUrl?: never; - dataResidency: DataResidency.Region; - urlStrategy?: never; -} | { - customUrl?: never; - dataResidency?: never; - urlStrategy?: BlockedUrlBypass.Strategy; -}*/ -var UrlStrategyFactory; -(function (_UrlStrategyFactory) { - var incorrectOptionIgnoredMessage = function incorrectOptionIgnoredMessage(higherPriority /*:: */, lowerPriority /*:: */) { - logger.warn("Both ".concat(higherPriority, " and ").concat(lowerPriority, " are set in config, ").concat(lowerPriority, " will be ignored")); - }; - function create(config /*:: */) /*:: */{ - var customUrl = config.customUrl, - dataResidency = config.dataResidency, - urlStrategy = config.urlStrategy; - if (customUrl) { - if (dataResidency || urlStrategy) { - incorrectOptionIgnoredMessage('customUrl', dataResidency ? 'dataResidency' : 'urlStrategy'); - } - return new url_strategy_UrlStrategy(CustomUrl.preferredUrlsGetter(customUrl)); - } else if (dataResidency) { - if (urlStrategy) { - incorrectOptionIgnoredMessage('dataResidency', 'urlStrategy'); - } - return new url_strategy_UrlStrategy(data_residency_DataResidency.preferredUrlsGetter(dataResidency)); - } else { - return new url_strategy_UrlStrategy(BlockedUrlBypass.preferredUrlsGetter(urlStrategy)); +/** + * Push event deduplication id and trim the store if out of the limit + * + * @param {string} id + * @returns {Promise} + * @private + */ +function _pushEventDeduplicationId(id /*: string*/) /*: Promise*/{ + var customLimit = config.getCustomConfig().eventDeduplicationListLimit; + var limit = customLimit > 0 ? customLimit : DEFAULT_EVENT_DEDUPLICATION_LIST_LIMIT; + return storage.count(event_storeName).then(function (count) { + var chain = Promise.resolve(); + if (count >= limit) { + var removeLength = count - limit + 1; + logger.log("Event deduplication list limit has been reached. Oldest ids are about to be removed (".concat(removeLength, " of them)")); + chain = storage.trimItems(event_storeName, removeLength); } - } - _UrlStrategyFactory.create = create; -})(UrlStrategyFactory || (UrlStrategyFactory = {})); -;// CONCATENATED MODULE: ./src/sdk/smart-banner/network/url-startegy-network.ts - - - - - - -var url_startegy_network_Promise = typeof Promise === 'undefined' ? (__webpack_require__(702).Promise) : Promise; - - + return chain; + }).then(function () { + logger.info("New event deduplication id is added to the list: ".concat(id)); + return storage.addItem(event_storeName, { + id: id + }); + }); +} -var NetworkWithUrlStrategy = /*#__PURE__*/function (_NetworkDecorator) { - _inherits(NetworkWithUrlStrategy, _NetworkDecorator); - var _super = _createSuper(NetworkWithUrlStrategy); - function NetworkWithUrlStrategy(network /*: Network*/, _ref /*:: */) { - var _this; - var urlStrategy = _ref /*:: */.urlStrategy, - urlStrategyConfig = _ref /*:: */.urlStrategyConfig; - _classCallCheck(this, NetworkWithUrlStrategy); - _this = _super.call(this, network); - _defineProperty(_assertThisInitialized(_this), "lastSuccessfulEndpoint", void 0); - _defineProperty(_assertThisInitialized(_this), "urlStrategy", void 0); - _this.urlStrategy = urlStrategy || UrlStrategyFactory.create(urlStrategyConfig); - return _this; +/** + * Check if deduplication id is already stored + * - if yes then reject + * - if not then push the id into storage + * + * @param {string=} id + * @returns {Promise} + * @private + */ +function _checkEventDeduplicationId(id /*: string*/) /*: Promise*/{ + if (!id) { + return Promise.resolve(); } + return _getEventDeduplicationIds().then(function (list) { + return list.indexOf(id) === -1 ? _pushEventDeduplicationId(id) : Promise.reject({ + message: "Event won't be tracked, since it was previously tracked with the same deduplication id ".concat(id) + }); + }); +} - /** - * Returns last succesfull endpoint or default (`https://app.adjust.com`) one - */ - _createClass(NetworkWithUrlStrategy, [{ - key: "endpoint", - get: function get() /*: string*/{ - return this.lastSuccessfulEndpoint || NetworkWithUrlStrategy.DEFAULT_ENDPOINT; - } - - /** - * Sends a request to provided path choosing origin with UrlStrategy and caches used origin if it was successfully - * reached - * - * @param path - * @param params non-encoded parameters of the request - */ - }, { - key: "request", - value: function request /*:: */(path /*: string*/, params /*: Record*/) /*: Promise*/{ - var _this2 = this; - return this.urlStrategy.retries(function (baseUrlsMap) { - _this2.network.endpoint = baseUrlsMap.app; - return _this2.network.request(path, params).then(function (result /*: T*/) { - _this2.lastSuccessfulEndpoint = baseUrlsMap.app; - return result; - }).catch(function (err /*: NetworkError*/) { - _this2.lastSuccessfulEndpoint = undefined; - throw err; - }); - }); +/** + * Track event by sending the request to the server + * + * @param {Object} params + * @param {number=} timestamp + * @return Promise + */ +function event_event(params /*: EventParamsT*/, timestamp /*: number*/) /*: Promise*/{ + if (!params || params && (isEmpty(params) || !params.eventToken)) { + var reason = 'You must provide event token in order to track event'; + logger.error(reason); + return Promise.reject(reason); + } + return _checkEventDeduplicationId(params.deduplicationId).then(get).then(function (globalParams) { + return push({ + url: '/event', + method: 'POST', + params: event_prepareParams(params, globalParams) + }, { + timestamp: timestamp + }); + }).catch(function (error) { + if (error && error.message) { + logger.error(error.message); } - }]); - return NetworkWithUrlStrategy; -}(NetworkDecorator); -_defineProperty(NetworkWithUrlStrategy, "DEFAULT_ENDPOINT", ENDPOINTS["default"].app); -(function (_NetworkWithUrlStrategy) { - /*:: */ -})(NetworkWithUrlStrategy || (NetworkWithUrlStrategy = {})); -;// CONCATENATED MODULE: ./src/sdk/smart-banner/smart-banner.ts - - - -var smart_banner_Promise = typeof Promise === 'undefined' ? (__webpack_require__(702).Promise) : Promise; - + return Promise.reject(error); + }); +} +;// CONCATENATED MODULE: ./src/sdk/sdk-click.js +/*:: // +import { type SdkClickRequestParamsT } from './types';*/ +/** + * Check the following: + * - redirected from somewhere other then client's website + * - there is adjust_referrer query param + * + * @returns {boolean} + * @private + */ +function _getReferrer() /*: ?string*/{ + return window.location.search.substring(1).split('&').map(function (pair) { + return pair.split('='); + }).reduce(reducer, {})['adjust_referrer']; +} +/** + * Prepare params for the sdk click request + * + * @param {string} referrer + * @returns {Object} + * @private + */ +function sdk_click_prepareParams(referrer) /*: SdkClickRequestParamsT*/{ + return { + clickTime: getTimestamp(), + source: 'web_referrer', + referrer: decodeURIComponent(referrer) + }; +} /** - * Adjust Web SDK Smart Banner + * Sends sdk_click request with manually settled referrer or with automatically grabbed one */ -var SmartBanner = /*#__PURE__*/function () { - function SmartBanner(_ref /*:: */, network /*: Network*/) { - var webToken = _ref /*:: */.webToken, - _ref$logLevel = _ref /*:: */.logLevel, - logLevel = _ref$logLevel === void 0 ? 'error' : _ref$logLevel, - dataResidency = _ref /*:: */.dataResidency, - onCreated = _ref /*:: */.onCreated, - onDismissed = _ref /*:: */.onDismissed; - _classCallCheck(this, SmartBanner); - _defineProperty(this, "STORAGE_KEY_DISMISSED", 'closed'); - _defineProperty(this, "network", void 0); - _defineProperty(this, "storage", void 0); - _defineProperty(this, "timer", null); - _defineProperty(this, "dataFetchPromise", void 0); - _defineProperty(this, "banner", void 0); - _defineProperty(this, "onCreated", void 0); - _defineProperty(this, "onDismissed", void 0); - this.onCreated = onCreated; - this.onDismissed = onDismissed; - logger.setLogLevel(logLevel); - var config = dataResidency ? { - dataResidency: dataResidency - } : {}; - this.network = network || new NetworkWithUrlStrategy(new XhrNetwork(), { - urlStrategyConfig: config +function sdkClick(manualReferrer /*: string*/, timestamp /*: number*/) /*: void*/{ + var referrer; + if (manualReferrer) { + referrer = manualReferrer; + } else { + referrer = _getReferrer(); + } + if (referrer) { + push({ + url: '/sdk_click', + method: 'POST', + params: sdk_click_prepareParams(referrer) + }, { + timestamp: timestamp }); - this.storage = StorageFactory.createStorage(); - this.init(webToken); } - - /** - * Initiate Smart Banner - * - * @param webToken token used to get data from backend - */ - _createClass(SmartBanner, [{ - key: "init", - value: function init(webToken /*: string*/) { - var _this = this; - if (this.banner) { - logger.error('Smart Banner already exists'); - return; - } - if (this.dataFetchPromise) { - logger.error('Smart Banner is initialising already'); - return; - } - var deviceOs = getDeviceOS(); - if (!deviceOs) { - logger.log('This platform is not one of the targeting ones, Smart Banner will not be shown'); - return; - } - this.dataFetchPromise = fetchSmartBannerData(webToken, deviceOs, this.network); - this.dataFetchPromise.then(function (bannerData) { - _this.dataFetchPromise = null; - if (!bannerData) { - logger.log("No Smart Banners for ".concat(deviceOs, " platform found")); - return; - } - var whenToShow = _this.getDateToShowAgain(bannerData.dismissInterval); - if (Date.now() < whenToShow) { - logger.log('Smart Banner was dismissed'); - _this.scheduleCreation(webToken, whenToShow); - return; - } - logger.log('Creating Smart Banner'); - _this.banner = new SmartBannerView(bannerData, function () { - return _this.dismiss(webToken, bannerData.dismissInterval); - }, _this.network.endpoint); - logger.log('Smart Banner created'); - if (_this.onCreated) { - _this.onCreated(); - } - }); - } - - /** - * Show Smart Banner - */ - }, { - key: "show", - value: function show() /*: void*/{ - var _this2 = this; - if (this.banner) { - this.banner.show(); - return; - } - if (this.dataFetchPromise) { - logger.log('Smart Banner will be shown after initialisation finished'); - this.dataFetchPromise.then(function () { - logger.log('Initialisation finished, showing Smart Banner'); - _this2.show(); - }); - return; - } - logger.error('There is no Smart Banner to show, have you called initialisation?'); - } - - /** - * Hide Smart Banner - */ - }, { - key: "hide", - value: function hide() /*: void*/{ - var _this3 = this; - if (this.banner) { - this.banner.hide(); - return; - } - if (this.dataFetchPromise) { - logger.log('Smart Banner will be hidden after initialisation finished'); - this.dataFetchPromise.then(function () { - logger.log('Initialisation finished, hiding Smart Banner'); - _this3.hide(); - }); - return; - } - logger.error('There is no Smart Banner to hide, have you called initialisation?'); - } - - /** - * Removes Smart Banner from DOM - */ - }, { - key: "destroy", - value: function destroy() { - if (this.banner) { - this.banner.destroy(); - this.banner = null; - logger.log('Smart Banner removed'); - } else { - logger.error('There is no Smart Banner to remove'); - } - } - - /** - * Schedules next Smart Banner show and removes banner from DOM - */ - }, { - key: "dismiss", - value: function dismiss(webToken /*: string*/, dismissInterval /*: number*/) { - logger.log('Smart Banner dismissed'); - this.storage.setItem(this.STORAGE_KEY_DISMISSED, Date.now()); - var whenToShow = this.getDateToShowAgain(dismissInterval); - this.scheduleCreation(webToken, whenToShow); - this.destroy(); - if (this.onDismissed) { - this.onDismissed(); - } - } - - /** - * Sets a timeout to schedule next Smart Banner show - */ - }, { - key: "scheduleCreation", - value: function scheduleCreation(webToken /*: string*/, when /*: number*/) { - var _this4 = this; - if (this.timer) { - logger.log('Clearing previously scheduled creation of Smart Banner'); - clearTimeout(this.timer); - this.timer = null; - } - var delay = when - Date.now(); - this.timer = setTimeout(function () { - _this4.timer = null; - _this4.init(webToken); - }, delay); - logger.log('Smart Banner creation scheduled on ' + new Date(when)); - } - - /** - * Returns date when Smart Banner should be shown again - */ - }, { - key: "getDateToShowAgain", - value: function getDateToShowAgain(dismissInterval /*: number*/) /*: number*/{ - var dismissedDate = this.storage.getItem(this.STORAGE_KEY_DISMISSED); - if (!dismissedDate || typeof dismissedDate !== 'number') { - return Date.now(); - } - return dismissedDate + dismissInterval; - } - }]); - return SmartBanner; -}(); +} ;// CONCATENATED MODULE: ./src/sdk/main.js var _excluded = ["logLevel", "logOutput"]; -var main_Promise = typeof Promise === 'undefined' ? (__webpack_require__(702).Promise) : Promise; /*:: // -import { type InitOptionsT, type LogOptionsT, type EventParamsT, type GlobalParamsT, type CustomErrorT, type ActivityStateMapT, type SmartBannerOptionsT, type AttributionMapT } from './types';*/ +import { type InitOptionsT, type LogOptionsT, type EventParamsT, type GlobalParamsT, type CustomErrorT, type ActivityStateMapT, type AttributionMapT } from './types';*/ @@ -9387,15 +6594,14 @@ import { type InitOptionsT, type LogOptionsT, type EventParamsT, type GlobalPara - -/*:: type InitConfigT = $ReadOnly<{|...InitOptionsT, ...LogOptionsT|}>*/ +/*:: type InitConfigT = $ReadOnly<{|...InitOptionsT, ...LogOptionsT |}>*/ /** * In-memory parameters to be used if restarting * * @type {Object} * @private */ -var main_options /*: ?InitOptionsT*/ = null; +var main_options /*: ? InitOptionsT*/ = null; /** * Flag to mark id sdk is in starting process @@ -9421,13 +6627,6 @@ var _isStarted /*: boolean*/ = false; */ var _isInstalled /*: boolean*/ = false; -/** - * SmartBanner instance - * - * @private - */ -var _smartBanner /*: ?SmartBanner*/ = null; - /** * Initiate the instance with parameters * @@ -9626,27 +6825,6 @@ function disableThirdPartySharing() /*: void*/{ schedule: true }); } -function initSmartBanner(options /*: SmartBannerOptionsT*/) /*: void*/{ - if (_smartBanner) { - logger.error('Smart Banner already initialised'); - return; - } - _smartBanner = new SmartBanner(options); -} -function showSmartBanner() /*: void*/{ - if (!_smartBanner) { - logger.error('Smart Banner is not initialised yet'); - return; - } - _smartBanner.show(); -} -function hideSmartBanner() /*: void*/{ - if (!_smartBanner) { - logger.error('Smart Banner is not initialised yet'); - return; - } - _smartBanner.hide(); -} /** * Handle third party sharing disable @@ -9671,7 +6849,7 @@ function _handleGdprForgetMe() /*: void*/{ return; } gdpr_forget_device_finish(); - main_Promise.all([clear(), global_params_clear(), queue_clear()]).then(main_destroy); + Promise.all([clear(), global_params_clear(), queue_clear()]).then(main_destroy); } /** @@ -9749,20 +6927,20 @@ function main_continue(activityState /*: ActivityStateMapT*/) /*: Promise* }; if (sdkStatus === 'off') { _shutdown(); - return main_Promise.reject({ + return Promise.reject({ interrupted: true, message: message('due to complete async disable') }); } if (sdkStatus === 'paused') { _pause(); - return main_Promise.reject({ + return Promise.reject({ interrupted: true, message: message('due to partial async disable') }); } if (_isStarted) { - return main_Promise.reject({ + return Promise.reject({ interrupted: true, message: message('due to multiple synchronous start attempt') }); @@ -9853,19 +7031,19 @@ function _internalTrackEvent(params /*: EventParamsT*/) { if (storage.getType() === STORAGE_TYPES.NO_STORAGE) { var reason = 'Adjust SDK can not track event, no storage available'; logger.log(reason); - return main_Promise.reject(reason); + return Promise.reject(reason); } if (disable_status() !== 'on') { var _reason = 'Adjust SDK is disabled, can not track event'; logger.log(_reason); - return main_Promise.reject(_reason); + return Promise.reject(_reason); } if (!_isInitialised()) { var _reason2 = 'Adjust SDK can not track event, sdk instance is not initialized'; logger.error(_reason2); - return main_Promise.reject(_reason2); + return Promise.reject(_reason2); } - return new main_Promise(function (resolve) { + return new Promise(function (resolve) { var _callback = function _callback(timestamp) { return resolve(event_event(params, timestamp)); }; @@ -9939,9 +7117,6 @@ var Adjust = { restart: restart, gdprForgetMe: gdprForgetMe, disableThirdPartySharing: disableThirdPartySharing, - initSmartBanner: initSmartBanner, - showSmartBanner: showSmartBanner, - hideSmartBanner: hideSmartBanner, __testonly__: { destroy: main_destroy, clearDatabase: _clearDatabase @@ -9951,8 +7126,6 @@ var Adjust = { } }; /* harmony default export */ const main = (Adjust); -})(); - __webpack_exports__ = __webpack_exports__["default"]; /******/ return __webpack_exports__; /******/ })() diff --git a/dist/adjust-latest.min.js b/dist/adjust-latest.min.js index d8f5eea..030e3f3 100644 --- a/dist/adjust-latest.min.js +++ b/dist/adjust-latest.min.js @@ -1,2 +1 @@ -/*! For license information please see adjust-latest.min.js.LICENSE.txt */ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.Adjust=t():e.Adjust=t()}(self,(()=>(()=>{var e={841:(e,t,n)=>{"use strict";n.d(t,{Z:()=>f});var r=n(81),o=n.n(r),i=n(645),a=n.n(i),s=n(667),u=n.n(s),c=new URL(n(529),n.b),l=a()(o()),d=u()(c);l.push([e.id,".adjust-smart-banner__AEqYlWgPonspKfseFq2N{height:76px}@media(min-width: 428px){.adjust-smart-banner__AEqYlWgPonspKfseFq2N{height:0}}.adjust-smart-banner__NVk5vwju_4kdaKzGWJPq{position:fixed;left:0;right:0;z-index:10000000}.adjust-smart-banner__NVk5vwju_4kdaKzGWJPq.adjust-smart-banner__jOV7BvlxDT7ATfbLPh3j{top:0}.adjust-smart-banner__NVk5vwju_4kdaKzGWJPq.adjust-smart-banner__XmomYv1VVQYz0lEtn9Q2{bottom:0}.adjust-smart-banner__NVk5vwju_4kdaKzGWJPq .adjust-smart-banner__eXKzWnRDn4RWUiSSeVYK{margin:0 auto;max-width:428px;background:#fff}.adjust-smart-banner__NVk5vwju_4kdaKzGWJPq .adjust-smart-banner__eXKzWnRDn4RWUiSSeVYK .adjust-smart-banner__r3JnN_RNhpzArrmKQ8jI{display:flex;align-items:center;padding:10px 8px 10px 4px}.adjust-smart-banner__NVk5vwju_4kdaKzGWJPq .adjust-smart-banner__eXKzWnRDn4RWUiSSeVYK .adjust-smart-banner__r3JnN_RNhpzArrmKQ8jI .adjust-smart-banner__VFuxsD_KzqNSxQecFmao{width:32px;height:32px;border:none;background:url("+d+");background-repeat:no-repeat;background-position:center center;background-size:8px 8px,auto;cursor:pointer}.adjust-smart-banner__NVk5vwju_4kdaKzGWJPq .adjust-smart-banner__eXKzWnRDn4RWUiSSeVYK .adjust-smart-banner__r3JnN_RNhpzArrmKQ8jI .adjust-smart-banner__hqvH8Y5fwbegVLKnoYv_{width:56px;height:56px;overflow:hidden;background-color:#6e7492;border-radius:8px}.adjust-smart-banner__NVk5vwju_4kdaKzGWJPq .adjust-smart-banner__eXKzWnRDn4RWUiSSeVYK .adjust-smart-banner__r3JnN_RNhpzArrmKQ8jI .adjust-smart-banner__hqvH8Y5fwbegVLKnoYv_ .adjust-smart-banner__Ll9XMTDiX4Drgeydp0Oc{display:flex;align-items:center;justify-content:center;width:100%;height:100%;color:#353a52;font-weight:bold;font-size:23px;font-family:ArialMt,Arial,sans-serif;line-height:32px;background-color:#e0e2ec}.adjust-smart-banner__NVk5vwju_4kdaKzGWJPq .adjust-smart-banner__eXKzWnRDn4RWUiSSeVYK .adjust-smart-banner__r3JnN_RNhpzArrmKQ8jI .adjust-smart-banner__hqvH8Y5fwbegVLKnoYv_ .adjust-smart-banner__VYRfEif2Ph2_984rXQy8{width:100%}.adjust-smart-banner__NVk5vwju_4kdaKzGWJPq .adjust-smart-banner__eXKzWnRDn4RWUiSSeVYK .adjust-smart-banner__r3JnN_RNhpzArrmKQ8jI .adjust-smart-banner__I8xX0C5dUcR53pY0aEys{flex:1 1 0%;min-height:0;min-width:0;margin:0 12px}.adjust-smart-banner__NVk5vwju_4kdaKzGWJPq .adjust-smart-banner__eXKzWnRDn4RWUiSSeVYK .adjust-smart-banner__r3JnN_RNhpzArrmKQ8jI .adjust-smart-banner__JJLdp2l7YvnsUXudojWA{overflow:hidden;text-overflow:ellipsis}.adjust-smart-banner__NVk5vwju_4kdaKzGWJPq .adjust-smart-banner__eXKzWnRDn4RWUiSSeVYK .adjust-smart-banner__r3JnN_RNhpzArrmKQ8jI h4{margin:5px 0 8px;color:#353a52;font-family:Arial-BoldMT,ArialMt,Arial,sans-serif;font-size:12px;font-weight:bold;line-height:16px;white-space:nowrap}.adjust-smart-banner__NVk5vwju_4kdaKzGWJPq .adjust-smart-banner__eXKzWnRDn4RWUiSSeVYK .adjust-smart-banner__r3JnN_RNhpzArrmKQ8jI p{margin:8px 0 7px;color:#353a52;font-family:ArialMt,Arial,sans-serif;font-size:9px;line-height:11px;max-height:22px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}.adjust-smart-banner__NVk5vwju_4kdaKzGWJPq .adjust-smart-banner__eXKzWnRDn4RWUiSSeVYK .adjust-smart-banner__r3JnN_RNhpzArrmKQ8jI .adjust-smart-banner__risKVvV3T0vjKiSTR9l0{color:#6e7492;background:#f9fafc;border:1px solid #cdd0e0;border-radius:4px;border-color:#6e7492;box-shadow:inset 0px -1px 0px 0px #e0e2ec;padding:4px 6.5px;display:inline-block;vertical-align:middle;text-align:center;font-family:ArialMt,Arial,sans-serif;font-size:12px;font-weight:500;line-height:16px;cursor:pointer;text-decoration:none}",""]),l.locals={bannerContainer:"adjust-smart-banner__AEqYlWgPonspKfseFq2N",banner:"adjust-smart-banner__NVk5vwju_4kdaKzGWJPq",stickyToTop:"adjust-smart-banner__jOV7BvlxDT7ATfbLPh3j",stickyToBottom:"adjust-smart-banner__XmomYv1VVQYz0lEtn9Q2",bannerBody:"adjust-smart-banner__eXKzWnRDn4RWUiSSeVYK",content:"adjust-smart-banner__r3JnN_RNhpzArrmKQ8jI",dismiss:"adjust-smart-banner__VFuxsD_KzqNSxQecFmao",appIcon:"adjust-smart-banner__hqvH8Y5fwbegVLKnoYv_",placeholder:"adjust-smart-banner__Ll9XMTDiX4Drgeydp0Oc",image:"adjust-smart-banner__VYRfEif2Ph2_984rXQy8",textContainer:"adjust-smart-banner__I8xX0C5dUcR53pY0aEys",bannerText:"adjust-smart-banner__JJLdp2l7YvnsUXudojWA",action:"adjust-smart-banner__risKVvV3T0vjKiSTR9l0"};const f=l},645:e=>{"use strict";e.exports=function(e){var t=[];return t.toString=function(){return this.map((function(t){var n="",r=void 0!==t[5];return t[4]&&(n+="@supports (".concat(t[4],") {")),t[2]&&(n+="@media ".concat(t[2]," {")),r&&(n+="@layer".concat(t[5].length>0?" ".concat(t[5]):""," {")),n+=e(t),r&&(n+="}"),t[2]&&(n+="}"),t[4]&&(n+="}"),n})).join("")},t.i=function(e,n,r,o,i){"string"==typeof e&&(e=[[null,e,void 0]]);var a={};if(r)for(var s=0;s0?" ".concat(l[5]):""," {").concat(l[1],"}")),l[5]=i),n&&(l[2]?(l[1]="@media ".concat(l[2]," {").concat(l[1],"}"),l[2]=n):l[2]=n),o&&(l[4]?(l[1]="@supports (".concat(l[4],") {").concat(l[1],"}"),l[4]=o):l[4]="".concat(o)),t.push(l))}},t}},667:e=>{"use strict";e.exports=function(e,t){return t||(t={}),e?(e=String(e.__esModule?e.default:e),/^['"].*['"]$/.test(e)&&(e=e.slice(1,-1)),t.hash&&(e+=t.hash),/["'() \t\n]|(%20)/.test(e)||t.needQuotes?'"'.concat(e.replace(/"/g,'\\"').replace(/\n/g,"\\n"),'"'):e):e}},81:e=>{"use strict";e.exports=function(e){return e[1]}},702:function(e,t,n){e.exports=function(){"use strict";function e(e){var t=typeof e;return null!==e&&("object"===t||"function"===t)}function t(e){return"function"==typeof e}var r=Array.isArray?Array.isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)},o=0,i=void 0,a=void 0,s=function(e,t){k[o]=e,k[o+1]=t,2===(o+=2)&&(a?a(w):S())};function u(e){a=e}function c(e){s=e}var l="undefined"!=typeof window?window:void 0,d=l||{},f=d.MutationObserver||d.WebKitMutationObserver,p="undefined"==typeof self&&"undefined"!=typeof process&&"[object process]"==={}.toString.call(process),h="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel;function m(){return function(){return process.nextTick(w)}}function v(){return void 0!==i?function(){i(w)}:b()}function g(){var e=0,t=new f(w),n=document.createTextNode("");return t.observe(n,{characterData:!0}),function(){n.data=e=++e%2}}function y(){var e=new MessageChannel;return e.port1.onmessage=w,function(){return e.port2.postMessage(0)}}function b(){var e=setTimeout;return function(){return e(w,1)}}var k=new Array(1e3);function w(){for(var e=0;e{"use strict";var t=[];function n(e){for(var n=-1,r=0;r{"use strict";var t={};e.exports=function(e,n){var r=function(e){if(void 0===t[e]){var n=document.querySelector(e);if(window.HTMLIFrameElement&&n instanceof window.HTMLIFrameElement)try{n=n.contentDocument.head}catch(e){n=null}t[e]=n}return t[e]}(e);if(!r)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");r.appendChild(n)}},216:e=>{"use strict";e.exports=function(e){var t=document.createElement("style");return e.setAttributes(t,e.attributes),e.insert(t,e.options),t}},565:(e,t,n)=>{"use strict";e.exports=function(e){var t=n.nc;t&&e.setAttribute("nonce",t)}},795:e=>{"use strict";e.exports=function(e){var t=e.insertStyleElement(e);return{update:function(n){!function(e,t,n){var r="";n.supports&&(r+="@supports (".concat(n.supports,") {")),n.media&&(r+="@media ".concat(n.media," {"));var o=void 0!==n.layer;o&&(r+="@layer".concat(n.layer.length>0?" ".concat(n.layer):""," {")),r+=n.css,o&&(r+="}"),n.media&&(r+="}"),n.supports&&(r+="}");var i=n.sourceMap;i&&"undefined"!=typeof btoa&&(r+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(i))))," */")),t.styleTagTransform(r,e,t.options)}(t,e,n)},remove:function(){!function(e){if(null===e.parentNode)return!1;e.parentNode.removeChild(e)}(t)}}}},589:e=>{"use strict";e.exports=function(e,t){if(t.styleSheet)t.styleSheet.cssText=e;else{for(;t.firstChild;)t.removeChild(t.firstChild);t.appendChild(document.createTextNode(e))}}},529:e=>{"use strict";e.exports="data:image/svg+xml;utf8, "}},t={};function n(r){var o=t[r];if(void 0!==o)return o.exports;var i=t[r]={id:r,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.exports}n.m=e,n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.b=document.baseURI||self.location.href,n.nc=void 0;var r={};return(()=>{"use strict";function e(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function t(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(n){for(var r=1;r=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function a(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);nIo});var l=1e3,d=36e5,f=24*d,p="general",h="gdpr",m={TRANSACTION_ERROR:"XHR transaction failed due to an error",SERVER_MALFORMED_RESPONSE:"Response from server is malformed",SERVER_INTERNAL_ERROR:"Internal error occurred on the server",SERVER_CANNOT_PROCESS:"Server was not able to process the request, probably due to error coming from the client",NO_CONNECTION:"No internet connectivity",SKIP:"Skipping slower attempt",MISSING_URL:"Url is not provided"},v="noStorage",g="indexedDB",y="localStorage",b={endpointName:"Default",app:"https://app.adjust.com",gdpr:"https://gdpr.adjust.com"},k={endpointName:"Indian",app:"https://app.adjust.net.in",gdpr:"https://gdpr.adjust.net.in"},w={endpointName:"Chinese",app:"https://app.adjust.world",gdpr:"https://gdpr.adjust.world"},_={endpointName:"EU",app:"https://app.eu.adjust.com",gdpr:"https://gdpr.eu.adjust.com"},S={endpointName:"TR",app:"https://app.tr.adjust.com",gdpr:"https://gdpr.tr.adjust.com"},j={endpointName:"US",app:"https://app.us.adjust.com",gdpr:"https://gdpr.us.adjust.com"};function P(e){return P="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},P(e)}function x(e){return!Object.keys(e).length&&e.constructor===Object}function D(e){return"object"===P(e)&&null!==e&&!(e instanceof Array)}function N(e){try{return D(JSON.parse(e))}catch(e){return!1}}function I(e,t,n){function r(e){return Array.isArray(t)?t.every((function(t){return e[t]===n[t]})):e[t]===n}for(var o=0;o0&&void 0!==arguments[0]?arguments[0]:[];return t.reduce((function(t,n){return o(o({},t),{},e({},n.key,n.value))}),{})}function T(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return e.filter((function(e){return-1!==t.indexOf(e)}))}function R(e,t){return new RegExp("\\/".concat(t,"(\\/.*|\\?.*){0,1}$")).test(e)}function C(t,n){var r=u(n,2),i=r[0],a=r[1];return o(o({},t),{},e({},i,a))}function E(e){return Object.keys(e).map((function(t){return[t,e[t]]}))}function O(e){return Object.keys(e).map((function(t){return e[t]}))}function K(e){return D(e)?!x(e):!!e||0===e}function B(){try{var e=(new Date).toString(),t=window.localStorage;t.setItem(e,e);var n=t.getItem(e)===e;return t.removeItem(e),!(!n||!t)}catch(e){return!1}}const U={namespace:"adjust-sdk",version:"5.6.0",env:"production"};var q,L="error",M="warning",W="info",V="verbose",F=(e(q={},"none",-1),e(q,L,0),e(q,M,1),e(q,W,2),e(q,V,3),q),z={log:" ",info:" ",warn:" ",error:""},G={development:V,production:L,test:V},Y=X(),J="";function X(){return G[U.env]||L}function Q(e,t){var n;if(!(F[Y]2?s-2:0),c=2;c2&&void 0!==arguments[2]?arguments[2]:[];return n.map((function(n){return Ce(e,t,n)}))}function Oe(e,t,n){var r=xe[t][Be(e,Ae.right)],o=r.fields[r.keyPath],i=n instanceof Array?n.slice():[n],a=(me(o)?o.composite:[r.keyPath]).map((function(e,t){var n=r.fields[e];return Re(pe(n)?n.values:null,i[t])}));return 1===a.length?a[0]:a}function Ke(e){return xe.values[e]||e}function Be(e,t){return(xe.storeNames[t][e]||{}).name||e}function Ue(e,t){return{name:t.name,message:t.message.replace('"'.concat(e,'"'),Be(e,Ae.right))}}function qe(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Le(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:1,n=e+"",r=1;r<=t;r+=1)e0?"-":"+")+We(Math.floor(Math.abs(t)/60))+We(Math.abs(t)%60)}(t);return"".concat(n,"T").concat(r,"Z").concat(o)}function Fe(e,t){return isNaN(e)||isNaN(t)?0:Math.abs(t-e)}!function(e){e.LowerBound="lowerBound",e.UpperBound="upperBound"}(Ie||(Ie={})),function(e){e.right="right",e.left="left"}(Ae||(Ae={}));var ze={},Ge=!1,Ye=!1;function Je(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};ze=Ge?o({},e):{}}function Xe(){Ge&&(ze.lastInterval=function(){var e=ze.lastActive;if(e)return Math.round(Fe(e,Date.now())/l);return-1}(),ze.lastActive=Date.now())}function Qe(e){ze=o(o({},ze),e)}function He(){Ye=!0}function Ze(){var e=ze.lastActive;return Math.round(Fe(e,Date.now())/l)}function $e(){return(ze.timeSpent||0)+(Ye?Ze():0)}function et(){var e=Fe(ze.lastActive,Date.now())=0?ze.lastInterval:0,n={timeSpent:ze.timeSpent||0,sessionLength:ze.sessionLength||0,sessionCount:ze.sessionCount||1,lastInterval:t||0};return e&&R(e,"event")&&(n.eventCount=ze.eventCount),n},updateParams:function(e,t){if(Ge){var n={};n.timeSpent=$e(),n.sessionLength=et(),R(e,"session")&&(n.sessionCount=(ze.sessionCount||0)+1),R(e,"event")&&(n.eventCount=(ze.eventCount||0)+1),Qe(n),t||Xe()}},updateInstalled:function(){Ge&&(ze.installed||Qe({installed:!0}))},updateSessionOffset:tt,updateSessionLength:function(){Ge&&(Qe({sessionLength:et()}),Xe())},resetSessionOffset:function(){Ge&&Qe({timeSpent:0,sessionLength:0})},updateLastActive:Xe,destroy:function(){ze={},Ge=!1,Ye=!1},getAttribution:function(){return Ge?ze.attribution?ze.attribution:(Z.log("No attribution data yet"),null):null},getWebUUID:function(){return Ge?ze.uuid:null}};var rt={},ot=[];function it(e,t){var n="id"+Math.random().toString(36).substr(2,16),r={id:n,cb:t};return rt[e]||(rt[e]=[]),rt[e].push(r),n}function at(e,t){rt[e]&&rt[e].forEach((function(n){"function"==typeof n.cb&&ot.push(setTimeout((function(){return n.cb(e,t)})))}))}var st=function(){function t(){qe(this,t),e(this,"items",{})}return Me(t,[{key:"getItem",value:function(e){return Object.prototype.hasOwnProperty.call(this.items,e)?this.items[e]:null}},{key:"removeItem",value:function(e){delete this.items[e]}},{key:"setItem",value:function(e,t){this.items[e]=t}}]),t}();const ut=new(function(){function t(){var n=this;qe(this,t),e(this,"defaultName",U.namespace),e(this,"storageName",this.defaultName),e(this,"storeNames",xe.storeNames.left),e(this,"storesMap",void 0),e(this,"storage",void 0),this.storesMap={},B()?this.storage=window.localStorage:this.storage=new st;var r=this.read.bind(this),o=this.write.bind(this);O(this.storeNames).forEach((function(e){var t=e.name;Object.defineProperty(n.storesMap,t,{get:function(){return r(t)},set:function(e){o(t,e)}})})),Object.freeze(this.storesMap)}return Me(t,[{key:"read",value:function(e){var t=this.storage.getItem("".concat(this.storageName,".").concat(e)),n=t?JSON.parse(t):null;return e===de.Preferences&&n?Ce(de.Preferences,Ae.right,n):n}},{key:"write",value:function(e,t){t?this.storage.setItem("".concat(this.storageName,".").concat(e),JSON.stringify(t instanceof Array?t:Ce(de.Preferences,Ae.left,t))):this.storage.removeItem("".concat(this.storageName,".").concat(e))}},{key:"clear",value:function(){this.deleteData()}},{key:"deleteData",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];O(this.storeNames).forEach((function(n){!t&&n.permanent||e.storage.removeItem("".concat(e.storageName,".").concat(n.name))}))}},{key:"setCustomName",value:function(e){var t=this;if(e&&e.length){var n="".concat(U.namespace,"-").concat(e);O(this.storeNames).forEach((function(e){var r=e.name,o=t.storage.getItem("".concat(t.storageName,".").concat(r));o&&t.storage.setItem("".concat(n,".").concat(r),o)})),this.deleteData(!0),this.storageName=n}}},{key:"stores",get:function(){return this.storesMap}}]),t}());var ct=ge.preferences.name,lt=dt();function dt(){return lt||ft(),lt?o({},lt):null}function ft(){lt=ut.stores[ct]}function pt(){var e=dt();return e?e.sdkDisabled:null}function ht(e){var t=e?o({},e):null;ut.stores[ct]=o(o({},dt()),{},{sdkDisabled:t}),ft()}function mt(){var e=dt();return e?e.thirdPartySharingDisabled:null}function vt(){var e=ut.stores[ct]||{},t=(lt||{}).sdkDisabled||null;e.sdkDisabled&&!t&&at("sdk:shutdown"),ft()}function gt(){ut.stores[ct]||(ut.stores[ct]=o({},lt))}var yt,bt,kt="undefined"==typeof Promise?n(702).Promise:Promise;!function(e){e.add="add",e.put="put",e.get="get",e.list="list",e.clear="clear",e.delete="delete"}(yt||(yt={})),function(e){e.readonly="readonly",e.readwrite="readwrite"}(bt||(bt={}));var wt=function(){function t(){qe(this,t),e(this,"dbDefaultName",U.namespace),e(this,"dbName",this.dbDefaultName),e(this,"dbVersion",1),e(this,"idbFactory",void 0),e(this,"indexedDbConnection",null),e(this,"notSupportedError",{name:"IDBNotSupported",message:"IndexedDB is not supported"}),e(this,"databaseOpenError",{name:"CannotOpenDatabaseError",message:"Cannot open a database"}),e(this,"noConnectionError",{name:"NoDatabaseConnection",message:"Cannot open a transaction"});var n=t.getIndexedDB();if(!n)throw this.notSupportedError;this.idbFactory=n}return Me(t,[{key:"setCustomName",value:function(e){return e&&e.length>0?(this.dbName="".concat(U.namespace,"-").concat(e),this.migrateDb(this.dbDefaultName,this.dbName)):kt.resolve()}},{key:"openDatabase",value:function(e,n,r){var o=this;return t.isSupported().then((function(t){return t?new kt((function(t,i){var a=o.idbFactory.open(e,r);n&&(a.onupgradeneeded=function(e){return n(e,i)}),a.onsuccess=function(e){var n=e.target.result;n?t(n):i(o.databaseOpenError)},a.onerror=i})):kt.reject(o.notSupportedError)}))}},{key:"databaseExists",value:function(e){var t=this;return new kt((function(n){var r=!0;t.openDatabase(e,(function(){r=!1})).then((function(n){if(n.close(),!r)return t.deleteDatabaseByName(e)})).then((function(){return n(r)}))}))}},{key:"cloneData",value:function(e,t){var n=this;return O(xe.storeNames.left).map((function(e){return e.name})).filter((function(e){return"p"!==e})).map((function(r){return function(){return o=r,i=n.indexedDbConnection,n.indexedDbConnection=e,n.getAll(o).then((function(e){if(n.indexedDbConnection=t,!(e.length<1))return n.addBulk(o,e,!0)})).then((function(){n.indexedDbConnection=i}));var o,i}})).reduce((function(e,t){return e.then(t)}),kt.resolve())}},{key:"migrateDb",value:function(e,t){var n=this;return this.databaseExists(e).then((function(r){return r?kt.all([n.openDatabase(e,n.handleUpgradeNeeded,n.dbVersion),n.openDatabase(t,n.handleUpgradeNeeded,n.dbVersion)]).then((function(t){var r=u(t,2),o=r[0],i=r[1];return n.cloneData(o,i).then((function(){return n.indexedDbConnection=i,o.close(),n.deleteDatabaseByName(e)}))})).then((function(){return Z.info("Database migration finished")})):n.openDatabase(t,n.handleUpgradeNeeded,n.dbVersion).then((function(e){n.indexedDbConnection=e}))}))}},{key:"handleUpgradeNeeded",value:function(e,t){var n=e.target.result;e.target.transaction.onerror=t,e.target.transaction.onabort=t;var r=xe.storeNames.left,o=nt.current||{},i=o&&!x(o);E(r).filter((function(e){return!u(e,2)[1].permanent})).forEach((function(e){var t=u(e,2),r=t[0],a=t[1].name,s=xe.right[r],c=n.createObjectStore(a,{keyPath:s.keyPath,autoIncrement:s.autoIncrement||!1});if(s.index&&c.createIndex("".concat(s.index,"Index"),s.index),a===le.ActivityState&&i)return c.add(Ce(r,Ae.left,o)),void Z.info("Activity state has been recovered");var l=ut.stores[a];l&&(l.forEach((function(e){return c.add(e)})),Z.info("Migration from localStorage done for ".concat(r," store")))})),gt(),ut.clear()}},{key:"open",value:function(){var e=this;return this.indexedDbConnection?kt.resolve({success:!0}):this.openDatabase(this.dbName,this.handleUpgradeNeeded,this.dbVersion).then((function(t){return e.indexedDbConnection=t,e.indexedDbConnection.onclose=function(){return e.destroy},{success:!0}}))}},{key:"getTransactionStore",value:function(e,t,n){var r,o=e.storeName,i=e.mode,a=n.transaction([o],i),s=a.objectStore(o),u=xe.right[Be(o,Ae.right)];return u.index&&(r=s.index("".concat(u.index,"Index"))),a.onerror=t,a.onabort=t,{transaction:a,store:s,index:r,options:u}}},{key:"overrideError",value:function(e,t){var n=t.target.error;return e({name:n.name,message:n.message})}},{key:"getCompositeKeys",value:function(e){var t=e.fields[e.keyPath];return me(t)?t.composite:null}},{key:"targetIsObject",value:function(e){return D(e)}},{key:"prepareTarget",value:function(t,n,r){if(r===yt.clear||!n)return null;var i=this.getCompositeKeys(t);return-1!==[yt.add,yt.put].indexOf(r)?this.targetIsObject(n)?i?o(e({},t.keyPath,i.map((function(e){return n[e]})).join("")),n):n:null:n instanceof Array?n.join(""):n}},{key:"prepareResult",value:function(e,t){var n=this.getCompositeKeys(e);return n&&this.targetIsObject(t)?n.map((function(e){return t[e]})):null}},{key:"initRequest",value:function(e){var t=this,n=e.storeName,r=e.target,o=void 0===r?null:r,i=e.action,a=e.mode,s=void 0===a?bt.readonly:a;return this.open().then((function(){return new kt((function(e,r){if(t.indexedDbConnection){var a=t.getTransactionStore({storeName:n,mode:s},r,t.indexedDbConnection),u=a.store,c=a.options,l=u[i](t.prepareTarget(c,o,i)),d=t.prepareResult(c,o);l.onsuccess=function(){i!==yt.get||l.result?e(d||l.result||o):r({name:"NotRecordFoundError",message:'Requested record not found in "'.concat(n,'" store')})},l.onerror=function(e){return t.overrideError(r,e)}}else r(t.noConnectionError)}))}))}},{key:"initBulkRequest",value:function(e){var t=this,n=e.storeName,r=e.target,o=e.action,i=e.mode,a=void 0===i?bt.readwrite:i;return!r||r&&!r.length?kt.reject({name:"NoTargetDefined",message:"No array provided to perform ".concat(o,' bulk operation into "').concat(n,'" store')}):this.open().then((function(){return new kt((function(e,i){if(t.indexedDbConnection){var s=t.getTransactionStore({storeName:n,mode:a},i,t.indexedDbConnection),u=s.transaction,c=s.store,l=s.options,d=new Array,f=r[0];u.oncomplete=function(){return e(d)};!function e(n){n.onerror=function(e){return t.overrideError(i,e)},n.onsuccess=function(){d.push(t.prepareResult(l,f)||n.result),f=r[d.length],d.length1&&void 0!==arguments[1]&&arguments[1];return this.openCursor({storeName:e,action:yt.list,firstOnly:t})}},{key:"getFirst",value:function(e){return this.getAll(e,!0).then((function(e){return e.length?e[0]:void 0}))}},{key:"getItem",value:function(e,t){return this.initRequest({storeName:e,target:t,action:yt.get})}},{key:"filterBy",value:function(e,t){var n=IDBKeyRange.only(t);return this.openCursor({storeName:e,action:yt.list,range:n})}},{key:"addItem",value:function(e,t){return this.initRequest({storeName:e,target:t,action:yt.add,mode:bt.readwrite})}},{key:"addBulk",value:function(e,t,n){return this.initBulkRequest({storeName:e,target:t,action:n?yt.put:yt.add,mode:bt.readwrite})}},{key:"updateItem",value:function(e,t){return this.initRequest({storeName:e,target:t,action:yt.put,mode:bt.readwrite})}},{key:"deleteItem",value:function(e,t){return this.initRequest({storeName:e,target:t,action:yt.delete,mode:bt.readwrite})}},{key:"deleteBulk",value:function(e,t,n){var r=n?IDBKeyRange[n](t):IDBKeyRange.only(t);return this.openCursor({storeName:e,action:yt.delete,range:r,mode:bt.readwrite})}},{key:"trimItems",value:function(e,t){var n=this,r=xe.right[Be(e,Ae.right)];return this.getAll(e).then((function(e){return e.length?e[t-1]:null})).then((function(t){return t?n.deleteBulk(e,t[r.keyPath],Ie.UpperBound):[]}))}},{key:"count",value:function(e){var t=this;return this.open().then((function(){return new kt((function(n,r){if(t.indexedDbConnection){var o=t.getTransactionStore({storeName:e,mode:bt.readonly},r,t.indexedDbConnection).store.count();o.onsuccess=function(){return n(o.result)},o.onerror=function(e){return t.overrideError(r,e)}}else r(t.noConnectionError)}))}))}},{key:"clear",value:function(e){return this.initRequest({storeName:e,action:yt.clear,mode:bt.readwrite})}},{key:"destroy",value:function(){this.indexedDbConnection&&this.indexedDbConnection.close(),this.indexedDbConnection=null}},{key:"deleteDatabase",value:function(){return this.destroy(),this.deleteDatabaseByName(this.dbName)}}],[{key:"tryOpen",value:function(e){return new kt((function(n){try{var r=e.open(t.dbValidationName);r.onsuccess=function(){r.result.close(),e.deleteDatabase(t.dbValidationName),n(!0)},r.onerror=function(){return n(!1)}}catch(e){n(!1)}}))}},{key:"isSupported",value:function(){if(t.isSupportedPromise)return t.isSupportedPromise;var e="IndexedDB is not supported in this browser";return t.isSupportedPromise=new kt((function(n){var r=t.getIndexedDB(),o=!!navigator.platform&&/iPad|iPhone|iPod/.test(navigator.platform);!r||o?(Z.warn(e),n(!1)):n(t.tryOpen(r).then((function(t){return t||Z.warn(e),t})))})),t.isSupportedPromise}},{key:"getIndexedDB",value:function(){return window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB}}]),t}();e(wt,"dbValidationName","validate-db-openable"),e(wt,"isSupportedPromise",null);var _t="undefined"==typeof Promise?n(702).Promise:Promise,St=function(){function t(){qe(this,t)}return Me(t,[{key:"open",value:function(){return t.isSupported().then((function(e){if(!e)return{status:"error",error:{name:"LSNotSupported",message:"LocalStorage is not supported"}};var t=xe.storeNames.left,n=nt.current||{},r=n&&!x(n);return E(t).filter((function(e){return!u(e,2)[1].permanent})).forEach((function(e){var t=u(e,2),o=t[0],i=t[1].name;i!==le.ActivityState||ut.stores[i]?ut.stores[i]||(ut.stores[i]=[]):ut.stores[i]=r?[Ce(o,Ae.left,n)]:[]})),gt(),{status:"success"}}))}},{key:"getCompositeKeys",value:function(e){var t=e.fields[e.keyPath];return me(t)?t.composite:null}},{key:"getKeys",value:function(e){var t=Be(e,Ae.right),n=xe.right[t];return this.getCompositeKeys(n)||[n.keyPath]}},{key:"nextIndex",value:function(e){return"number"==typeof e?e+1:void 0}},{key:"initRequest",value:function(e,t){var n=this,r=e.storeName,i=e.id,a=e.item,s=xe.right[Be(r,Ae.right)];return this.open().then((function(e){return"error"===e.status?_t.reject(e.error):new _t((function(e,u){var c,l=ut.stores[r],d=n.getKeys(r),f=(l[l.length-1]||{})[s.keyPath]||0;if(i){var p=Array.isArray(i)?i.slice():[i];c=d.map((function(e,t){return[e,p[t]]})).reduce(C,{})}else c=o({},a);var h=c?I(l,d,c):0;return t(e,u,{keys:d,items:l,index:h,options:s,lastId:f})}))}))}},{key:"sort",value:function(e,t,n){var r=c(e),o=t.slice().reverse();return r.sort((function(e,t){return o.reduce((function(r,o){return r||function(e,t,r){var o=n?n===e[r]:e[r]e[r]:e[r]>t[r];return o?-1:i?1:0}(e,t,o)}),0)}))}},{key:"prepareTarget",value:function(t,n,r){var i=this.getCompositeKeys(t);return i?o(e({},t.keyPath,i.map((function(e){return n[e]})).join("")),n):t.autoIncrement&&r?o(e({},t.keyPath,r),n):o({},n)}},{key:"prepareResult",value:function(e,t){var n=this.getCompositeKeys(e);return n?n.map((function(e){return t[e]})).filter((function(e){return!Te(e)})):t[e.keyPath]}},{key:"getAll",value:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return this.open().then((function(r){return"error"===r.status?_t.reject(r.error):new _t((function(r,o){var i=ut.stores[e];i instanceof Array?r(n?[i[0]]:t.sort(i,t.getKeys(e))):o({name:"NotFoundError",message:"No objectStore named ".concat(e," in this database")})}))}))}},{key:"getFirst",value:function(e){return this.getAll(e,!0).then((function(e){return e.length?e[0]:void 0}))}},{key:"getItem",value:function(e,t){var n=this;return this.initRequest({storeName:e,id:t},(function(t,r,o){var i=o.items,a=o.index,s=o.options;-1===a?r({name:"NotRecordFoundError",message:'Requested record not found in "'.concat(e,'" store')}):t(n.prepareTarget(s,i[a]))}))}},{key:"filterBy",value:function(e,t){return this.getAll(e).then((function(n){return n.filter((function(n){var r=xe.right[Be(e,Ae.right)];return(r.index&&n[r.index])===t}))}))}},{key:"addItem",value:function(e,t){var n=this;return this.initRequest({storeName:e,item:t},(function(r,o,i){var a=i.items,s=i.index,u=i.options,c=i.lastId;-1!==s?o({name:"ConstraintError",message:'Constraint was not satisfied, trying to add existing item into "'.concat(e,'" store')}):(a.push(n.prepareTarget(u,t,n.nextIndex(c))),ut.stores[e]=a,r(n.prepareResult(u,t)))}))}},{key:"addBulk",value:function(e,t,n){var r=this;return this.initRequest({storeName:e},(function(o,i,a){var s=a.keys,u=a.items,l=a.options,d=a.lastId;if(!t||t&&!t.length)i({name:"NoTargetDefined",message:'No array provided to perform add bulk operation into "'.concat(e,'" store')});else{var f=d,p=t.map((function(e){return r.prepareTarget(l,e,f=r.nextIndex(f))})),h=p.filter((function(e){return-1!==I(u,s,e)})).map((function(e){return e[l.keyPath]})),m=n?u.filter((function(e){return-1===h.indexOf(e[l.keyPath])})):c(u);if(h.length&&!n)i({name:"ConstraintError",message:'Constraint was not satisfied, trying to add existing items into "'.concat(e,'" store')});else ut.stores[e]=r.sort([].concat(c(m),c(p)),s),o(t.map((function(e){return r.prepareResult(l,e)})))}}))}},{key:"updateItem",value:function(e,t){var n=this;return this.initRequest({storeName:e,item:t},(function(r,o,i){var a=i.items,s=i.index,u=i.options,c=i.lastId,l=-1===s?n.nextIndex(c):void 0,d=n.prepareTarget(u,t,l);-1===s?a.push(d):a.splice(s,1,d),ut.stores[e]=a,r(n.prepareResult(u,t))}))}},{key:"deleteItem",value:function(e,t){return this.initRequest({storeName:e,id:t},(function(n,r,o){var i=o.items,a=o.index;-1!==a&&(i.splice(a,1),ut.stores[e]=i),n(t)}))}},{key:"findMax",value:function(e,t,n){if(!e.length)return-1;for(var r={index:-1,value:"string"==typeof n?"":0},o=0;o=r.value&&(r={value:e[o][t],index:o})}return r.index}},{key:"deleteBulk",value:function(e,t,n){var r=this;return this.getAll(e).then((function(o){var i=r.getKeys(e),a=xe.right[Be(e,Ae.right)].index||i[0],s=n?null:t,u=r.sort(o,i,s),c=r.findMax(u,a,t);if(-1===c)return[];var l=n===Ie.LowerBound?c:0,d=n&&n!==Ie.UpperBound?u.length:c+1,f=u.splice(l,d).map((function(e){return 1===i.length?e[a]:i.map((function(t){return e[t]}))}));return ut.stores[e]=u,f}))}},{key:"trimItems",value:function(e,t){var n=this,r=Be(e,Ae.right),o=xe.right[r];return this.getAll(e).then((function(e){return e.length?e[t-1]:null})).then((function(t){return t?n.deleteBulk(e,t[o.keyPath],Ie.UpperBound):[]}))}},{key:"count",value:function(e){return this.open().then((function(t){if("error"===t.status)return _t.reject(t.error);var n=ut.stores[e];return _t.resolve(n instanceof Array?n.length:1)}))}},{key:"clear",value:function(e){return this.open().then((function(t){return"error"===t.status?_t.reject(t.error):new _t((function(t){ut.stores[e]=[],t()}))}))}},{key:"destroy",value:function(){}},{key:"deleteDatabase",value:function(){}}],[{key:"isSupported",value:function(){return t.isSupportedPromise||(t.isSupportedPromise=new _t((function(e){var t=B();t||Z.warn("LocalStorage is not supported in this browser"),e(t)}))),t.isSupportedPromise}}]),t}();e(St,"isSupportedPromise",null);var jt,Pt="undefined"==typeof Promise?n(702).Promise:Promise;!function(e){e[e.noStorage=v]="noStorage",e[e.indexedDB=g]="indexedDB",e[e.localStorage=y]="localStorage"}(jt||(jt={}));var xt,Dt={getAll:function(e,t,n){return e.getAll(t,n).then((function(e){return Ee(t,Ae.right,e)}))},getFirst:function(e,t){return e.getFirst(t).then((function(e){return Ce(t,Ae.right,e)}))},getItem:function(e,t,n){return e.getItem(t,Oe(t,Ae.left,n)).then((function(e){return Ce(t,Ae.right,e)})).catch((function(e){return Pt.reject(Ue(t,e))}))},filterBy:function(e,t,n){return e.filterBy(t,Ke(n)).then((function(e){return Ee(t,Ae.right,e)}))},addItem:function(e,t,n){var r=Ce(t,Ae.left,n);return e.addItem(t,r).then((function(e){return Oe(t,Ae.right,e)})).catch((function(e){return Pt.reject(Ue(t,e))}))},addBulk:function(e,t,n,r){var o=Ee(t,Ae.left,n);return e.addBulk(t,o,r).then((function(e){return e.map((function(e){return Oe(t,Ae.right,e)}))})).catch((function(e){return Pt.reject(Ue(t,e))}))},updateItem:function(e,t,n){var r=Ce(t,Ae.left,n);return e.updateItem(t,r).then((function(e){return Oe(t,Ae.right,e)}))},deleteItem:function(e,t,n){return e.deleteItem(t,Oe(t,Ae.left,n)).then((function(e){return Oe(t,Ae.right,e)}))},deleteBulk:function(e,t,n,r){return e.deleteBulk(t,Ke(n),r).then((function(e){return e.map((function(e){return Oe(t,Ae.right,e)}))}))},trimItems:function(e,t,n){return e.trimItems(t,n)},count:function(e,t){return e.count(t)},clear:function(e,t){return e.clear(t)},destroy:function(e){return e.destroy()},deleteDatabase:function(e){return e.deleteDatabase()}};var Nt=null;function It(e){var t=null;return null!==Nt?Nt:Nt=Pt.all([wt.isSupported(),St.isSupported()]).then((function(n){var r=u(n,2),o=r[0],i=r[1];if(ut.setCustomName(e),o){xt=jt.indexedDB;var a=new wt;return a.setCustomName(e).then((function(){return t=a}))}return i?(xt=jt.localStorage,t=new St,Pt.resolve(t)):(Z.error("There is no storage available, app will run with minimum set of features"),xt=jt.noStorage,t=null,Pt.resolve(t))})).then((function(){return{type:xt,storage:t}}))}const At=o({init:It,getType:function(){return xt}},(Tt=E(Dt).map((function(e){var t=u(e,2),n=t[0],r=t[1];return[n,function(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),o=1;o2&&void 0!==arguments[2]&&arguments[2];return{status:"error",action:n?"CONTINUE":"RETRY",response:N(e.responseText)?JSON.parse(e.responseText):e.responseText,message:m[t],code:t}}function Ot(e,t){var n=e.slice(0,e.length-t.length-1).split("").reduce((function(e){return e.concat(" ")}),"");return"".concat(t).concat(n,":")}function Kt(e,t){var n="REQUEST PARAMETERS:",r=function(e){return e.replace(/([A-Z])/g,(function(e){return"_".concat(e.toLowerCase())}))},i=E(o(o(o({},ae.getBaseParams()),t),e)).map((function(e){var t=u(e,2),n=t[0],o=t[1];return[r(n),o]}));return Z.log(n),i.filter((function(e){return K(u(e,2)[1])})).map((function(e){var t=u(e,2),r=t[0],o=t[1];return Z.log(Ot(n,r),o),function(e){var t=u(e,2),n=t[0],r=t[1],o=encodeURIComponent(n),i=r;return"string"==typeof r&&(i=encodeURIComponent(r)),D(r)&&(i=encodeURIComponent(JSON.stringify(r)||"")),[o,i].join("=")}([r,o])})).join("&")}function Bt(e,t,n){var r=n.xhr,o=n.url;if(4===r.readyState){var i=r.status>=200&&r.status<300,a=N(r.responseText);if(0!==r.status)return a?t(i?function(e,t){var n=JSON.parse(e.responseText),r={status:"success",adid:n.adid,timestamp:n.timestamp,ask_in:n.ask_in,retry_in:n.retry_in,continue_in:n.continue_in,tracking_state:n.tracking_state,attribution:void 0,message:void 0};return R(t,"attribution")&&(r.attribution=n.attribution,r.message=n.message),E(r).filter((function(e){return!!u(e,2)[1]})).reduce(C,{})}(r,o):Et(r,"SERVER_CANNOT_PROCESS",!0)):e(Et(r,i?"SERVER_MALFORMED_RESPONSE":"SERVER_INTERNAL_ERROR"));e(Et(r,"NO_CONNECTION"))}}function Ut(e,t){var n=e.endpoint,r=e.url,o=e.method,i=void 0===o?"GET":o,a=e.params,s=function(e,t){var n=e.endpoint,r=e.url,o=e.method,i=Kt(e.params,t);return{fullUrl:n+r+("GET"===o?"?".concat(i):""),encodedParams:i}}({endpoint:n,url:r,method:i,params:void 0===a?{}:a},t),c=s.fullUrl,l=s.encodedParams;return new Ct((function(e,t){var n=new XMLHttpRequest;n.open(i,c,!0),function(e,t){var n="REQUEST HEADERS:",r=[["Client-SDK","js".concat(U.version)],["Content-Type","POST"===t?"application/x-www-form-urlencoded":"application/json"]];Z.log(n),r.forEach((function(t){var r=u(t,2),o=r[0],i=r[1];e.setRequestHeader(o,i),Z.log(Ot(n,o),i)}))}(n,i),n.onreadystatechange=function(){return Bt(t,e,{xhr:n,url:r})},n.onerror=function(){return t(Et(n,"TRANSACTION_ERROR"))},n.send("GET"===i?void 0:l)}))}function qt(e,t){return"success"===e.status?function(e,t){var n=R(t,"gdpr_forget_device"),r=R(t,"attribution"),o=R(t,"session"),i=R(t,"disable_third_party_sharing"),a="opted_out"===e.tracking_state;if(!n&&a)return at("sdk:gdpr-forget-me"),e;r||n||a||!e.ask_in||at("attribution:check",e);o&&at("session:finished",e);if(i)return at("sdk:third-party-sharing-opt-out"),e;return e}(e,t):e}function Lt(e){return Rt().then((function(t){return Ut(e,t)})).then((function(t){return qt(t,e.url)}))}var Mt={long:{delay:12e4,maxDelay:f,minRange:.5,maxRange:1},short:{delay:200,maxDelay:d,minRange:.5,maxRange:1},test:{delay:100,maxDelay:300}};function Wt(e,t){var n,r,o=Mt[t=t||"long"],i=o.delay*Math.pow(2,e-1);return i=Math.min(i,o.maxDelay),o.minRange&&o.maxRange&&(i*=(n=o.minRange,r=o.maxRange,Math.random()*(r-n)+n)),Math.round(i)}var Vt,Ft,zt,Gt=navigator.onLine;function Yt(){Gt=!0}function Jt(){Gt=!1}function Xt(e,t,n){e.addEventListener&&e.addEventListener(t,n,!1)}function Qt(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)}function Ht(){return Gt}function Zt(e,t){Z.warn("Both ".concat(e," and ").concat(t," are set in config, ").concat(t," will be ignored"))}!function(e){e.Default="default",e.India="india",e.China="china"}(Ft||(Ft={})),function(e){e.EU="EU",e.TR="TR",e.US="US"}(zt||(zt={}));var $t=(e(Vt={},Ft.Default,b),e(Vt,Ft.India,k),e(Vt,Ft.China,w),e(Vt,zt.EU,_),e(Vt,zt.TR,S),e(Vt,zt.US,j),Vt);function en(e){var t,n,r,o,i=(t=ae.getCustomConfig(),n=t.customUrl,r=t.urlStrategy,o=t.dataResidency,n?((o||r)&&Zt("customUrl",o?"dataResidency":"urlStrategy"),{app:n,gdpr:n}):(o&&r&&Zt("dataResidency","urlStrategy"),o?[o]:r===Ft.India?[Ft.India,Ft.Default]:r===Ft.China?[Ft.China,Ft.Default]:[Ft.Default,Ft.India,Ft.China]));return Array.isArray(i)?i.map((function(t){return e[t]||null})).filter((function(e){return!!e})):[i]}function tn(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:$t,t=en(e),n=0;return{next:function(){return n0&&void 0!==arguments[0]?arguments[0]:{},r=n.url,i=n.method,a=void 0===i?"GET":i,s=n.params,c=void 0===s?{}:s,l=n.continueCb,d=n.strategy,f=n.wait,p={url:r,method:a,params:c,continueCb:l},h=r,v=a,g=o({},c),y=l,b=d,k=function(){e.reset(),t=e.next()},w=function(e,t){return e["/gdpr_forget_device"===t?"gdpr":"app"]},_=null,S={request:0,connection:0},j=D(f),P=null;function D(e){return(e=e||rn)>on?on:e}function N(e){var t=e.url,n=e.method,r=e.params,i=e.continueCb;t&&(h=t),n&&(v=n),x(r)||(g=o({},r)),g=o({createdAt:Ve()},g),"function"==typeof i&&(y=i)}function I(e){if(!P)return!1;if(_){var t=j-(Date.now()-P);if(e&&t0&&void 0!==arguments[0]?arguments[0]:{},t=e.url,n=e.method,r=e.params,o=void 0===r?{}:r,i=e.continueCb,a=e.wait;return N({url:t,method:n,params:o,continueCb:i}),A({wait:a})}function W(){return!!_}function V(){_&&clearTimeout(_),_=null}function F(){var e=!!P;V(),P=null,e&&(j=rn,S.request=0,S.connection=0,Z.log("Previous ".concat(h||"unknown"," request attempt canceled")),O())}return{send:M,isRunning:W,clear:F}};var un=function(e){return e===h?"GDPR disable":"disable"},cn=function(e){return{start:{inProgress:"Adjust SDK ".concat(un(e)," process has already started"),done:"Adjust SDK ".concat(un(e)," process is now started")},finish:{inProgress:"Adjust SDK ".concat(un(e)," process has already finished"),done:"Adjust SDK ".concat(un(e)," process is now finished")}}};function ln(e,t){var n=e.reason,r=e.pending,o=pt()||{},i="start"===t&&o.pending?"start":"finish",a="start"===t&&o.reason,s="finish"===t&&o.reason&&!o.pending;return a||s?(Z.log(cn(o.reason)[i].inProgress),!1):(Z.log(cn(n)[i].done),ht({reason:n||p,pending:r}),!0)}function dn(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return ln({reason:e,pending:t||!1},"start")}function fn(){var e=pt()||{};return e.reason===p||e.reason===h&&!e.pending?"off":e.reason===h&&e.pending?"paused":"on"}var pn="undefined"==typeof Promise?n(702).Promise:Promise,hn="activityState",mn=!1;function vn(e){return e?"unknown"===e.uuid?(dn({reason:h}),nt.destroy(),{exists:!0,stored:null}):(nt.init(e),{exists:!0,stored:e}):{exists:!1}}function gn(){return"off"!==fn()&&nt.isStarted()}function yn(){if(!gn())return pn.resolve(null);var e=o(o({},nt.current),{},{lastActive:Date.now()});return At.updateItem(hn,e).then((function(){return nt.current=e}))}var bn="undefined"==typeof Promise?n(702).Promise:Promise,kn=sn({strategy:"long",continueCb:function(e,t){var n=e&&e.continue_in||null;return Sn.pause=n?{timestamp:Date.now(),wait:n}:null,At.getFirst(_n).then((function(e){return e?At.deleteItem(_n,e.timestamp):null})).then((function(){return t(),Sn.running=!1,In({wait:n})}))}}),wn=!1,_n="queue",Sn={running:!1,timestamp:null,pause:null};function jn(){var e=Date.now();return Sn.timestamp&&e<=Sn.timestamp&&(e=Sn.timestamp+1),Sn.timestamp=e,e}function Pn(e){return R(e,"session")&&nt.resetSessionOffset(),nt.updateLastActive(),yn()}function xn(e){var t=e.url,n=e.method,r=e.params,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},a=i.auto,s=i.timestamp;nt.updateParams(t,a);var c=E(r||{}).filter((function(e){return K(u(e,2)[1])})).reduce(C,{}),l={timestamp:jn(),url:t,method:n,params:o(o({},nt.getParams(t)),c)};return s&&(l.createdAt=s),At.addItem(_n,l).then((function(){return Pn(t)})).then((function(){return Sn.running?{}:In()}))}function Dn(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.timestamp,n=e.createdAt,r=e.url,i=e.method,a=e.params,s=arguments.length>1?arguments[1]:void 0,u=nt.current||{},c="/session"===r&&!u.installed,l=!r&&!i&&!a;return wn&&!c||l?(Sn.running=!1,bn.resolve({})):kn.send({url:r,method:i,params:o(o({},a),{},{createdAt:Ve(n||t)}),wait:s||Nn()})}function Nn(){var e=Sn.pause||{},t=e.timestamp,n=e.wait,r=Date.now()-(t||0);return r0&&void 0!==arguments[0]?arguments[0]:{},t=e.cleanUp,n=e.wait;if(Sn.running)return bn.resolve({});Sn.running=!0;var r=bn.resolve({});return t&&(r=r.then(Tn)),r.then((function(){return At.getFirst(_n)})).then((function(e){return Dn(e,n)}))}function An(e){if(void 0!==e)if(e!==wn){var t=wn;wn=e,!e&&t&&In(),Z.info("The app is now in ".concat(e?"offline":"online"," mode"))}else Z.error("The app is already in ".concat(e?"offline":"online"," mode"));else Z.error("State not provided, true or false has to be defined")}function Tn(){var e=Date.now()-ae.requestValidityWindow;return At.deleteBulk(_n,e,"upperBound")}var Rn="undefined"==typeof Promise?n(702).Promise:Promise,Cn="globalParams",En="No type provided",On="Global parameter type not provided, `callback` or `partner` types are available";function Kn(e){return(e||[]).map((function(e){return{key:e.key,value:e.value}}))}function Bn(){return Rn.all([At.filterBy(Cn,"callback"),At.filterBy(Cn,"partner")]).then((function(e){var t=u(e,2),n=t[0],r=t[1];return{callbackParams:Kn(n),partnerParams:Kn(r)}}))}function Un(e,t){if(void 0===t)return Z.error(On),Rn.reject({message:En});var n=A(e),r=Object.keys(n).map((function(e){return{key:e,value:n[e],type:t}}));return Rn.all([At.filterBy(Cn,t),At.addBulk(Cn,r,!0)]).then((function(e){var n=u(e,2),o=n[0],i=n[1],a=T(o.map((function(e){return e.key})),i.map((function(e){return e[0]})));return Z.log("Following ".concat(t," parameters have been saved: ").concat(r.map((function(e){return"".concat(e.key,":").concat(e.value)})).join(", "))),a.length&&Z.log("Keys: ".concat(a.join(", ")," already existed so their values have been updated")),i}))}function qn(e,t){return void 0===t?(Z.error(On),Rn.reject({message:En})):At.deleteItem(Cn,[e,t]).then((function(n){return Z.log("".concat(e," ").concat(t," parameter has been deleted")),n}))}function Ln(e){return void 0===e?(Z.error(On),Rn.reject({message:En})):At.deleteBulk(Cn,e).then((function(t){return Z.log("All ".concat(e," parameters have been deleted")),t}))}var Mn,Wn,Vn,Fn="undefined"==typeof Promise?n(702).Promise:Promise,zn=!1,Gn=document;function Yn(){return Vn=function(){var e=document;if(void 0!==e.hidden)return{hidden:"hidden",visibilityChange:"visibilitychange"};for(var t=E({mozHidden:"mozvisibilitychange",msHidden:"msvisibilitychange",oHidden:"ovisibilitychange",webkitHidden:"webkitvisibilitychange"}),n=0;n0;return!n||n&&t*l>=ae.sessionWindow?Bn().then((function(e){var t,n,r;xn({url:"/session",method:"POST",params:(t=e,n=t.callbackParams,r=t.partnerParams,{callbackParams:n.length?A(n):null,partnerParams:r.length?A(r):null})},{auto:!0})})):(at("attribution:check"),yn())}var tr="undefined"==typeof Promise?n(702).Promise:Promise,nr=sn({url:"/attribution",strategy:"short",continueCb:function(e,t,n){if(!e||e&&"error"===e.status)return t(),tr.resolve({state:"unknown"});if(!e.ask_in)return t(),function(e){if(x(e)||!function(e){var t=e.adid,n=void 0===t?"":t,r=e.attribution,o=void 0===r?{}:r;return!!n&&!!T(rr,Object.keys(o)).length}(e)||function(e){var t=e.adid,n=e.attribution,r=nt.current.attribution||{};return!(n&&rr.some((function(e){return r[e]!==n[e]})))&&t===r.adid}(e))return tr.resolve({state:"same"});var t=E(e.attribution).filter((function(e){var t=u(e,1)[0];return-1!==rr.indexOf(t)})).reduce(C,{adid:e.adid});return nt.current=o(o({},nt.current),{},{attribution:t}),yn().then((function(){return at("attribution:change",t),Z.info("Attribution has been updated"),{state:"changed"}}))}(e);return n(e.ask_in)}}),rr=["tracker_token","tracker_name","network","campaign","adgroup","creative","click_label","state"];var or=sn({url:"/gdpr_forget_device",method:"POST",strategy:"short"}),ir={running:"Adjust SDK is running pending GDPR Forget Me request",pending:"Adjust SDK will run GDPR Forget Me request after initialisation",paused:"Adjust SDK is already prepared to send GDPR Forget Me request",off:"Adjust SDK is already disabled"};function ar(e){var t=fn();return e||"on"===t?ae.isInitialised()?(or.send({params:o({},nt.getParams())}).then((function(){at("sdk:gdpr-forget-me")})),!0):(Z.log(ir.pending),!0):(Z.log(ir[t]),!1)}function sr(){return ln({reason:h,pending:!1},"finish")}var ur={running:"Adjust SDK is running pending third-party sharing opt-out request",delayed:"Adjust SDK will run third-party sharing opt-out request after initialisation",pending:"Adjust SDK already queued third-party sharing opt-out request",off:"Third-party sharing opt-out is already done",start:{inProgress:"Third-party sharing opt-out has already started",done:"Third-party sharing opt-out is now started"},finish:{inProgress:"Third-party sharing opt-out has already finished",done:"Third-party sharing opt-out is now finished"}};function cr(){var e=mt()||{};return e.reason?e.pending?"pending":"off":"on"}function lr(e){var t=cr();return e||"on"===t?ae.isInitialised()?(xn({url:"/disable_third_party_sharing",method:"POST"}),!0):(Z.log(ur.delayed),!0):(Z.log(ur[t]),!1)}function dr(e,t){var n,r,i=mt()||{},a="start"===t&&e?"start":"finish",s="start"===t&&i.reason,u="finish"===t&&i.reason&&!i.pending;return s||u?(Z.log(ur[a].inProgress),!1):(Z.log(ur[a].done),r=(n={reason:p,pending:e})?o({},n):null,ut.stores[ct]=o(o({},dt()),{},{thirdPartySharingDisabled:r}),ft(),!0)}function fr(){return dr(!1,"finish")}function pr(){"pending"===cr()&&(Z.log(ur.running),lr(!0))}var hr=[];function mr(e,t){hr.push({method:e,description:t,timestamp:Date.now()})}var vr,gr="undefined"==typeof Promise?n(702).Promise:Promise,yr="eventDeduplication";function br(e,t){var n,r,i=t.callbackParams,a=t.partnerParams,s={},u=o({eventToken:e.eventToken,deduplicationId:e.deduplicationId},(n=e.revenue,r=e.currency,isNaN(n)||(n=parseFloat(n))<0||!r?{}:{revenue:n.toFixed(5),currency:r})),c=o(o({},A(i)),A(e.callbackParams)),l=o(o({},A(a)),A(e.partnerParams));return x(c)||(s.callbackParams=c),x(l)||(s.partnerParams=l),o(o({},u),s)}function kr(e){return e?At.getAll(yr).then((function(e){return e.map((function(e){return e.id}))})).then((function(t){return-1===t.indexOf(e)?function(e){var t=ae.getCustomConfig().eventDeduplicationListLimit,n=t>0?t:10;return At.count(yr).then((function(e){var t=gr.resolve();if(e>=n){var r=e-n+1;Z.log("Event deduplication list limit has been reached. Oldest ids are about to be removed (".concat(r," of them)")),t=At.trimItems(yr,r)}return t})).then((function(){return Z.info("New event deduplication id is added to the list: ".concat(e)),At.addItem(yr,{id:e})}))}(e):gr.reject({message:"Event won't be tracked, since it was previously tracked with the same deduplication id ".concat(e)})})):gr.resolve()}function wr(e){return{clickTime:Ve(),source:"web_referrer",referrer:decodeURIComponent(e)}}function _r(e,t){var n;(n=e||window.location.search.substring(1).split("&").map((function(e){return e.split("=")})).reduce(C,{}).adjust_referrer)&&xn({url:"/sdk_click",method:"POST",params:wr(n)},{timestamp:t})}function Sr(e){if(!e)return null;try{return JSON.parse(e)}catch(e){return null}}!function(e){e.Android="android",e.iOS="ios",e.WindowsPC="windows",e.WindowsPhone="windows-phone"}(vr||(vr={}));var jr,Pr=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"adjust-smart-banner";qe(this,e),this.storageName=t}return Me(e,[{key:"setItem",value:function(e,t){localStorage.setItem("".concat(this.storageName,".").concat(e),JSON.stringify(t))}},{key:"getItem",value:function(e){return Sr(localStorage.getItem("".concat(this.storageName,".").concat(e)))}},{key:"removeItem",value:function(e){localStorage.removeItem("".concat(this.storageName,".").concat(e))}}]),e}(),xr=function(){function t(){qe(this,t),e(this,"items",{})}return Me(t,[{key:"setItem",value:function(e,t){this.items[e]=t}},{key:"getItem",value:function(e){return Object.prototype.hasOwnProperty.call(this.items,e)?this.items[e]:null}},{key:"removeItem",value:function(e){delete this.items[e]}}]),t}(),Dr=function(){function e(){qe(this,e)}return Me(e,null,[{key:"isLocalStorageSupported",value:function(){try{var e=(new Date).toString(),t=window.localStorage;t.setItem(e,e);var n=t.getItem(e)===e;return t.removeItem(e),!(!n||!t)}catch(e){return!1}}},{key:"createStorage",value:function(){return this.isLocalStorageSupported()?new Pr:new xr}}]),e}();"undefined"==typeof Promise&&n(702).Promise;function Nr(e,t,n){return n.request("/smart_banner",{app_web_token:e}).then((function(e){var n,r,o,i,a,s,u,c=e.find((function(e){return e.platform===t}));return c?(i=(n=c).title,a=n.description,s=n.button_label,u=n.tracker_token,i&&a&&s&&u?{appId:(null===(r=n.app)||void 0===r?void 0:r.default_store_app_id)||"",appName:(null===(o=n.app)||void 0===o?void 0:o.name)||"",position:n.position||jr.Bottom,imageUrl:n.image_url,header:i,description:a,buttonText:s,trackerToken:u,deeplinkPath:n.deeplink_path,dismissInterval:864e5}:null):null})).catch((function(e){return Z.error("Network error occurred during loading Smart Banner: "+JSON.stringify(e)),null}))}!function(e){e.Top="top",e.Bottom="bottom"}(jr||(jr={}));var Ir=n(379),Ar=n.n(Ir),Tr=n(795),Rr=n.n(Tr),Cr=n(569),Er=n.n(Cr),Or=n(565),Kr=n.n(Or),Br=n(216),Ur=n.n(Br),qr=n(589),Lr=n.n(qr),Mr=n(841),Wr={};Wr.styleTagTransform=Lr(),Wr.setAttributes=Kr(),Wr.insert=Er().bind(null,"head"),Wr.domAPI=Rr(),Wr.insertStyleElement=Ur();Ar()(Mr.Z,Wr);const Vr=Mr.Z&&Mr.Z.locals?Mr.Z.locals:void 0;var Fr="undefined"==typeof Promise?n(702).Promise:Promise,zr=function(){function t(n,r,o){qe(this,t),e(this,"appTraceUrl",(function(e){return"https://www.apptrace.com/api/app/".concat(e,"/artwork_url_small")})),e(this,"appName",void 0),e(this,"image",void 0),e(this,"placeholder",void 0),this.image=r,this.placeholder=o,this.appName=n.appName;var i=this.getSources(n);this.showImage(i)}return Me(t,[{key:"getSources",value:function(e){var t=[];return e.imageUrl&&t.push(e.imageUrl),t.push(this.appTraceUrl(e.appId)),t}},{key:"showImage",value:function(e){var t=this;return e.reduce((function(e,n){return e.catch((function(){return t.loadImage(n,t.image)}))}),Fr.reject()).then((function(){t.placeholder.remove()})).catch((function(){t.image.remove(),t.placeholder.innerText=t.appName.length?t.appName[0].toUpperCase():""}))}},{key:"loadImage",value:function(e,t){return new Fr((function(n,r){t.onload=n,t.onerror=r,t.src=e}))}}]),t}(),Gr=function(){function t(n,r,o){qe(this,t),e(this,"parent",document.body),e(this,"banner",void 0),e(this,"dismissButton",null),e(this,"onDismiss",void 0),this.onDismiss=r,this.render(n,o)}return Me(t,[{key:"render",value:function(e,t){this.banner=document.createElement("div"),this.banner.setAttribute("class",Vr.bannerContainer);var n=e.position===jr.Top?Vr.stickyToTop:Vr.stickyToBottom,r=e.deeplinkPath?"?deeplink=".concat(encodeURIComponent(e.deeplinkPath)):"",o="".concat(t,"/").concat(e.trackerToken).concat(r);this.banner.innerHTML=function(e,t,n,r,o){return'\n
\n
\n
\n \n
\n
\n ').concat(t,'\n
\n
\n

').concat(t,'

\n

').concat(n,'

\n
\n 1&&void 0!==arguments[1]?arguments[1]:r;return function(){return o(t,e)}}}(to||(to={})),(no||(no={})).preferredUrlsGetter=function(e){return function(){return function(e){return[{endpointName:"Custom (".concat(e,")"),app:e,gdpr:e}]}(e)}},function(t){t.EU="EU",t.TR="TR",t.US="US";var n,r=(e(n={},ro.EU,_),e(n,ro.TR,S),e(n,ro.US,j),n),o=function(e,t){return[e[t]]};t.preferredUrlsGetter=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:r;return function(){return o(t,e)}}}(ro||(ro={})),function(e){var t=function(e,t){Z.warn("Both ".concat(e," and ").concat(t," are set in config, ").concat(t," will be ignored"))};e.create=function(e){var n=e.customUrl,r=e.dataResidency,o=e.urlStrategy;return n?((r||o)&&t("customUrl",r?"dataResidency":"urlStrategy"),new ao(no.preferredUrlsGetter(n))):r?(o&&t("dataResidency","urlStrategy"),new ao(ro.preferredUrlsGetter(r))):new ao(to.preferredUrlsGetter(o))}}(oo||(oo={}));"undefined"==typeof Promise&&n(702).Promise;var so=function(t){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Hr(e,t)}(r,t);var n=eo(r);function r(t,o){var i,a=o.urlStrategy,s=o.urlStrategyConfig;return qe(this,r),e(Qr(i=n.call(this,t)),"lastSuccessfulEndpoint",void 0),e(Qr(i),"urlStrategy",void 0),i.urlStrategy=a||oo.create(s),i}return Me(r,[{key:"endpoint",get:function(){return this.lastSuccessfulEndpoint||r.DEFAULT_ENDPOINT}},{key:"request",value:function(e,t){var n=this;return this.urlStrategy.retries((function(r){return n.network.endpoint=r.app,n.network.request(e,t).then((function(e){return n.lastSuccessfulEndpoint=r.app,e})).catch((function(e){throw n.lastSuccessfulEndpoint=void 0,e}))}))}}]),r}(io);e(so,"DEFAULT_ENDPOINT",b.app),so||(so={});"undefined"==typeof Promise&&n(702).Promise;var uo=function(){function t(n,r){var o=n.webToken,i=n.logLevel,a=void 0===i?"error":i,s=n.dataResidency,u=n.onCreated,c=n.onDismissed;qe(this,t),e(this,"STORAGE_KEY_DISMISSED","closed"),e(this,"network",void 0),e(this,"storage",void 0),e(this,"timer",null),e(this,"dataFetchPromise",void 0),e(this,"banner",void 0),e(this,"onCreated",void 0),e(this,"onDismissed",void 0),this.onCreated=u,this.onDismissed=c,Z.setLogLevel(a);var l=s?{dataResidency:s}:{};this.network=r||new so(new Xr,{urlStrategyConfig:l}),this.storage=Dr.createStorage(),this.init(o)}return Me(t,[{key:"init",value:function(e){var t=this;if(this.banner)Z.error("Smart Banner already exists");else if(this.dataFetchPromise)Z.error("Smart Banner is initialising already");else{var n=function(){var e,t,n=null===(e=navigator)||void 0===e||null===(t=e.userAgent)||void 0===t?void 0:t.toLowerCase();if(n&&!(n.length<1))return/ipad|iphone|ipod/.test(n)?vr.iOS:n.includes("windows")?/phone|mobile/.test(n)?vr.WindowsPhone:vr.WindowsPC:n.includes("android")?vr.Android:void 0}();n?(this.dataFetchPromise=Nr(e,n,this.network),this.dataFetchPromise.then((function(r){if(t.dataFetchPromise=null,r){var o=t.getDateToShowAgain(r.dismissInterval);if(Date.now()
diff --git a/src/demo/set-referrer/set-referrer.js b/src/demo/set-referrer/set-referrer.js index 800b11d..6a57c7b 100644 --- a/src/demo/set-referrer/set-referrer.js +++ b/src/demo/set-referrer/set-referrer.js @@ -33,7 +33,7 @@ function _handleSave (e) { _ui.submitButton.disabled = true const referrerConfig = { - [_form.reffererKey.value]: _form.reffererValue.value + [_form.referrerKey.value]: _form.referrerValue.value } _setJson(referrerConfig) @@ -81,12 +81,12 @@ function _handleToggle (e) { function _prepareForm () { const referrerConfig = getItem('referrerConfig') || {..._defaultReferrerConfig} - _form.reffererKey = _ui.referrerConfigForm.querySelector('#refferer-key') - _form.reffererValue = _ui.referrerConfigForm.querySelector('#refferer-value') + _form.referrerKey = _ui.referrerConfigForm.querySelector('#referrer-key') + _form.referrerValue = _ui.referrerConfigForm.querySelector('#referrer-value') Object.keys(referrerConfig).map(key => { - _form.reffererKey.value = key - _form.reffererValue.value = referrerConfig[key] + _form.referrerKey.value = key + _form.referrerValue.value = referrerConfig[key] }) _setJson(referrerConfig) @@ -94,8 +94,8 @@ function _prepareForm () { function _setJson (referrerConfig) { Object.keys(referrerConfig).map(key => { - _form.reffererKey.value = key - _form.reffererValue.value = referrerConfig[key] + _form.referrerKey.value = key + _form.referrerValue.value = referrerConfig[key] }) _ui.referrerConfigJson.textContent = `Adjust.setReferrer("${_referrerConfigToString(referrerConfig)}")` From efa8f8abe84b75a1d7ab410acbc9f3d3b66decf2 Mon Sep 17 00:00:00 2001 From: Yara Matkova Date: Thu, 4 Jul 2024 13:25:45 +0200 Subject: [PATCH 11/70] feat: revert sb functions for back compatibility, add error messages --- src/sdk/main.js | 18 ++++++++++++++++++ src/snippet.js | 3 +++ 2 files changed, 21 insertions(+) diff --git a/src/sdk/main.js b/src/sdk/main.js index 8eebdf2..81968f7 100644 --- a/src/sdk/main.js +++ b/src/sdk/main.js @@ -250,6 +250,21 @@ function disableThirdPartySharing(): void { }) } +/** @deprecated */ +function initSmartBanner (): void { + Logger.error('function `initSmartBanner` is deprecated'); +} + +/** @deprecated */ +function showSmartBanner (): void { + Logger.error('function `showSmartBanner` is deprecated'); +} + +/** @deprecated */ +function hideSmartBanner (): void { + Logger.error('function `hideSmartBanner` is deprecated'); +} + /** * Handle third party sharing disable * @@ -568,6 +583,9 @@ const Adjust = { restart, gdprForgetMe, disableThirdPartySharing, + initSmartBanner, + showSmartBanner, + hideSmartBanner, __testonly__: { destroy: _destroy, clearDatabase: _clearDatabase diff --git a/src/snippet.js b/src/snippet.js index 8a56251..5de7077 100644 --- a/src/snippet.js +++ b/src/snippet.js @@ -53,6 +53,9 @@ 'restart', 'gdprForgetMe', 'disableThirdPartySharing', + 'initSmartBanner', + 'showSmartBanner', + 'hideSmartBanner', ], function (context, queue, methodName) { context[methodName] = function () { From 6295f5beac393843c1c39c6df977d546f39ec9f1 Mon Sep 17 00:00:00 2001 From: Yara Matkova Date: Thu, 4 Jul 2024 13:25:45 +0200 Subject: [PATCH 12/70] chore: update dependencies --- CHANGELOG.md | 4 ++-- package-lock.json | 20 ++++++++++---------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d52fa80..050ebb9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -### Version 5.7.0 (SOME_DAY May 2024) +### Version 5.7.0 ( DATE ) #### Added @@ -6,7 +6,7 @@ #### Changed -- Outdated Smart Banners removed +- Outdated Smart Banners removed. --- diff --git a/package-lock.json b/package-lock.json index beb2546..c3ee203 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4705,12 +4705,12 @@ } }, "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" @@ -7234,9 +7234,9 @@ } }, "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "dependencies": { "to-regex-range": "^5.0.1" @@ -15421,9 +15421,9 @@ } }, "node_modules/ws": { - "version": "8.17.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.0.tgz", - "integrity": "sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", "dev": true, "engines": { "node": ">=10.0.0" From cc69b01de797d29a9c7a1bdecfa0cc374ab253bf Mon Sep 17 00:00:00 2001 From: Yara Matkova Date: Thu, 4 Jul 2024 13:25:45 +0200 Subject: [PATCH 13/70] build: update production files --- dist/INTEGRITY | 2 +- dist/adjust-latest.js | 18 ++++++++++++++++++ dist/adjust-latest.min.js | 2 +- dist/sdk.snippet-sri.min.js | 2 +- dist/sdk.snippet.min.js | 2 +- 5 files changed, 22 insertions(+), 4 deletions(-) diff --git a/dist/INTEGRITY b/dist/INTEGRITY index e879f57..494592a 100644 --- a/dist/INTEGRITY +++ b/dist/INTEGRITY @@ -1 +1 @@ -sha384-Yo5Rdp/3+fr9wr27apcsY00R3V3PjL2tZDE9sYTxro5nVmjTz3gK/UTdK2xDOi9m \ No newline at end of file +sha384-R8+wBSENIf+LVn3v1iqOc68PRp1tW0f/ZI4fw+yR9odK74FLXFighOtkXQNPg2qR \ No newline at end of file diff --git a/dist/adjust-latest.js b/dist/adjust-latest.js index 7ac43cb..c4b1e0d 100644 --- a/dist/adjust-latest.js +++ b/dist/adjust-latest.js @@ -6826,6 +6826,21 @@ function disableThirdPartySharing() /*: void*/{ }); } +/** @deprecated */ +function initSmartBanner() /*: void*/{ + logger.error('function `initSmartBanner` is deprecated'); +} + +/** @deprecated */ +function showSmartBanner() /*: void*/{ + logger.error('function `showSmartBanner` is deprecated'); +} + +/** @deprecated */ +function hideSmartBanner() /*: void*/{ + logger.error('function `hideSmartBanner` is deprecated'); +} + /** * Handle third party sharing disable * @@ -7117,6 +7132,9 @@ var Adjust = { restart: restart, gdprForgetMe: gdprForgetMe, disableThirdPartySharing: disableThirdPartySharing, + initSmartBanner: initSmartBanner, + showSmartBanner: showSmartBanner, + hideSmartBanner: hideSmartBanner, __testonly__: { destroy: main_destroy, clearDatabase: _clearDatabase diff --git a/dist/adjust-latest.min.js b/dist/adjust-latest.min.js index 030e3f3..f352a6b 100644 --- a/dist/adjust-latest.min.js +++ b/dist/adjust-latest.min.js @@ -1 +1 @@ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.Adjust=t():e.Adjust=t()}(self,(()=>(()=>{"use strict";var e={d:(t,n)=>{for(var r in n)e.o(n,r)&&!e.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:n[r]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t)},t={};function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}function r(e){var t=function(e,t){if("object"!=n(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var o=r.call(e,t||"default");if("object"!=n(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==n(t)?t:t+""}function o(e,t,n){return(t=r(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function s(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);nvr});var f=1e3,p=60*f,m=60*p,h=24*m,v="general",g="gdpr",y={TRANSACTION_ERROR:"XHR transaction failed due to an error",SERVER_MALFORMED_RESPONSE:"Response from server is malformed",SERVER_INTERNAL_ERROR:"Internal error occurred on the server",SERVER_CANNOT_PROCESS:"Server was not able to process the request, probably due to error coming from the client",NO_CONNECTION:"No internet connectivity",SKIP:"Skipping slower attempt",MISSING_URL:"Url is not provided"},b={NO_STORAGE:"noStorage",INDEXED_DB:"indexedDB",LOCAL_STORAGE:"localStorage"},k={endpointName:"Default",app:"https://app.adjust.com",gdpr:"https://gdpr.adjust.com"},w={endpointName:"Indian",app:"https://app.adjust.net.in",gdpr:"https://gdpr.adjust.net.in"},P={endpointName:"Chinese",app:"https://app.adjust.world",gdpr:"https://gdpr.adjust.world"},S={endpointName:"EU",app:"https://app.eu.adjust.com",gdpr:"https://gdpr.eu.adjust.com"},D={endpointName:"TR",app:"https://app.tr.adjust.com",gdpr:"https://gdpr.tr.adjust.com"},x={endpointName:"US",app:"https://app.us.adjust.com",gdpr:"https://gdpr.us.adjust.com"};function N(e){return!Object.keys(e).length&&e.constructor===Object}function I(e){return"object"===n(e)&&null!==e&&!(e instanceof Array)}function O(e){try{return I(JSON.parse(e))}catch(e){return!1}}function j(e,t,n){function r(e){return Array.isArray(t)?t.every((function(t){return e[t]===n[t]})):e[t]===n}for(var o=0;o0&&void 0!==arguments[0]?arguments[0]:[]).reduce((function(e,t){return a(a({},e),{},o({},t.key,t.value))}),{})}function C(){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:[]).filter((function(t){return-1!==e.indexOf(t)}))}function E(e,t){return new RegExp("\\/".concat(t,"(\\/.*|\\?.*){0,1}$")).test(e)}function R(e,t){var n=l(t,2),r=n[0],i=n[1];return a(a({},e),{},o({},r,i))}function T(e){return Object.keys(e).map((function(t){return[t,e[t]]}))}function _(e){return Object.keys(e).map((function(t){return e[t]}))}function B(e){return I(e)?!N(e):!!e||0===e}function K(){try{var e=(new Date).toString(),t=window.localStorage;t.setItem(e,e);var n=t.getItem(e)===e;return t.removeItem(e),!(!n||!t)}catch(e){return!1}}const L={namespace:"adjust-sdk",version:"5.6.0",env:"production"};var q="error",U="warning",M="info",F="verbose",G=o(o(o(o(o({},"none",-1),q,0),U,1),M,2),F,3),V={log:" ",info:" ",warn:" ",error:""},W={development:F,production:q,test:F},H=z(),Y="";function z(){return W[L.env]||q}function J(e,t){var n;if(!(G[H]2?u-2:0),c=2;c2&&void 0!==arguments[2]?arguments[2]:[]).map((function(n){return Oe(e,t,n)}))}function Ae(e,t,n){var r=we[t][Ee(e,Ne.right)],o=r.fields[r.keyPath],i=n instanceof Array?n.slice():[n],a=(le(o)?o.composite:[r.keyPath]).map((function(e,t){var n=r.fields[e];return Ie(se(n)?n.values:null,i[t])}));return 1===a.length?a[0]:a}function Ce(e){return we.values[e]||e}function Ee(e,t){return(we.storeNames[t][e]||{}).name||e}function Re(e,t){return{name:t.name,message:t.message.replace('"'.concat(e,'"'),Ee(e,Ne.right))}}function Te(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function _e(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:1,n=e+"",r=1;r<=t;r+=1)e0?"-":"+")+Ke(Math.floor(Math.abs(t)/60))+Ke(Math.abs(t)%60)}(t);return"".concat(n,"T").concat(r,"Z").concat(o)}function qe(e,t){return isNaN(e)||isNaN(t)?0:Math.abs(t-e)}var Ue={},Me=!1,Fe=!1;function Ge(){Ue=Me?a({},arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}):{}}function Ve(){Me&&(Ue.lastInterval=function(){var e=Ue.lastActive;if(e)return Math.round(qe(e,Date.now())/f);return-1}(),Ue.lastActive=Date.now())}function We(e){Ue=a(a({},Ue),e)}function He(){Fe=!0}function Ye(){var e=Ue.lastActive;return Math.round(qe(e,Date.now())/f)}function ze(){return(Ue.timeSpent||0)+(Fe?Ye():0)}function Je(){var e=qe(Ue.lastActive,Date.now())=0?Ue.lastInterval:0,n={timeSpent:Ue.timeSpent||0,sessionLength:Ue.sessionLength||0,sessionCount:Ue.sessionCount||1,lastInterval:t||0};return e&&E(e,"event")&&(n.eventCount=Ue.eventCount),n},updateParams:function(e,t){if(Me){var n={};n.timeSpent=ze(),n.sessionLength=Je(),E(e,"session")&&(n.sessionCount=(Ue.sessionCount||0)+1),E(e,"event")&&(n.eventCount=(Ue.eventCount||0)+1),We(n),t||Ve()}},updateInstalled:function(){Me&&(Ue.installed||We({installed:!0}))},updateSessionOffset:Qe,updateSessionLength:function(){Me&&(We({sessionLength:Je()}),Ve())},resetSessionOffset:function(){Me&&We({timeSpent:0,sessionLength:0})},updateLastActive:Ve,destroy:function(){Ue={},Me=!1,Fe=!1},getAttribution:function(){return Me?Ue.attribution?Ue.attribution:(X.log("No attribution data yet"),null):null},getWebUUID:function(){return Me?Ue.uuid:null}};var Ze={},$e=[];function et(e,t){var n="id"+Math.random().toString(36).substr(2,16),r={id:n,cb:t};return Ze[e]||(Ze[e]=[]),Ze[e].push(r),n}function tt(e,t){Ze[e]&&Ze[e].forEach((function(n){"function"==typeof n.cb&&$e.push(setTimeout((function(){return n.cb(e,t)})))}))}var nt=function(){return Be((function e(){Te(this,e),o(this,"items",{})}),[{key:"getItem",value:function(e){return Object.prototype.hasOwnProperty.call(this.items,e)?this.items[e]:null}},{key:"removeItem",value:function(e){delete this.items[e]}},{key:"setItem",value:function(e,t){this.items[e]=t}}])}();const rt=new(function(){return Be((function e(){var t=this;Te(this,e),o(this,"defaultName",L.namespace),o(this,"storageName",this.defaultName),o(this,"storeNames",we.storeNames.left),this.storesMap={},K()?this.storage=window.localStorage:this.storage=new nt;var n=this.read.bind(this),r=this.write.bind(this);_(this.storeNames).forEach((function(e){var o=e.name;Object.defineProperty(t.storesMap,o,{get:function(){return n(o)},set:function(e){r(o,e)}})})),Object.freeze(this.storesMap)}),[{key:"read",value:function(e){var t=this.storage.getItem("".concat(this.storageName,".").concat(e)),n=t?JSON.parse(t):null;return e===ae.Preferences&&n?Oe(ae.Preferences,Ne.right,n):n}},{key:"write",value:function(e,t){t?this.storage.setItem("".concat(this.storageName,".").concat(e),JSON.stringify(t instanceof Array?t:Oe(ae.Preferences,Ne.left,t))):this.storage.removeItem("".concat(this.storageName,".").concat(e))}},{key:"clear",value:function(){this.deleteData()}},{key:"deleteData",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];_(this.storeNames).forEach((function(n){!t&&n.permanent||e.storage.removeItem("".concat(e.storageName,".").concat(n.name))}))}},{key:"setCustomName",value:function(e){var t=this;if(e&&e.length){var n="".concat(L.namespace,"-").concat(e);_(this.storeNames).forEach((function(e){var r=e.name,o=t.storage.getItem("".concat(t.storageName,".").concat(r));o&&t.storage.setItem("".concat(n,".").concat(r),o)})),this.deleteData(!0),this.storageName=n}}},{key:"stores",get:function(){return this.storesMap}}])}());var ot=fe.preferences.name,it=at();function at(){return it||ut(),it?a({},it):null}function ut(){it=rt.stores[ot]}function st(){var e=at();return e?e.sdkDisabled:null}function ct(e){var t=e?a({},e):null;rt.stores[ot]=a(a({},at()),{},{sdkDisabled:t}),ut()}function lt(){var e=at();return e?e.thirdPartySharingDisabled:null}function dt(){var e=rt.stores[ot]||{},t=(it||{}).sdkDisabled||null;e.sdkDisabled&&!t&&tt("sdk:shutdown"),ut()}function ft(){rt.stores[ot]||(rt.stores[ot]=a({},it))}var pt=function(e){return e.add="add",e.put="put",e.get="get",e.list="list",e.clear="clear",e.delete="delete",e}(pt||{}),mt=function(e){return e.readonly="readonly",e.readwrite="readwrite",e}(mt||{}),ht=function(){function e(){Te(this,e),o(this,"dbDefaultName",L.namespace),o(this,"dbName",this.dbDefaultName),o(this,"dbVersion",1),o(this,"indexedDbConnection",null),o(this,"notSupportedError",{name:"IDBNotSupported",message:"IndexedDB is not supported"}),o(this,"databaseOpenError",{name:"CannotOpenDatabaseError",message:"Cannot open a database"}),o(this,"noConnectionError",{name:"NoDatabaseConnection",message:"Cannot open a transaction"});var t=e.getIndexedDB();if(!t)throw this.notSupportedError;this.idbFactory=t}return Be(e,[{key:"setCustomName",value:function(e){return e&&e.length>0?(this.dbName="".concat(L.namespace,"-").concat(e),this.migrateDb(this.dbDefaultName,this.dbName)):Promise.resolve()}},{key:"openDatabase",value:function(t,n,r){var o=this;return e.isSupported().then((function(e){return e?new Promise((function(e,i){var a=o.idbFactory.open(t,r);n&&(a.onupgradeneeded=function(e){return n(e,i)}),a.onsuccess=function(t){var n=t.target.result;n?e(n):i(o.databaseOpenError)},a.onerror=i})):Promise.reject(o.notSupportedError)}))}},{key:"databaseExists",value:function(e){var t=this;return new Promise((function(n){var r=!0;t.openDatabase(e,(function(){r=!1})).then((function(n){if(n.close(),!r)return t.deleteDatabaseByName(e)})).then((function(){return n(r)}))}))}},{key:"cloneData",value:function(e,t){var n=this;return _(we.storeNames.left).map((function(e){return e.name})).filter((function(e){return"p"!==e})).map((function(r){return function(){return o=r,i=n.indexedDbConnection,n.indexedDbConnection=e,n.getAll(o).then((function(e){if(n.indexedDbConnection=t,!(e.length<1))return n.addBulk(o,e,!0)})).then((function(){n.indexedDbConnection=i}));var o,i}})).reduce((function(e,t){return e.then(t)}),Promise.resolve())}},{key:"migrateDb",value:function(e,t){var n=this;return this.databaseExists(e).then((function(r){return r?Promise.all([n.openDatabase(e,n.handleUpgradeNeeded,n.dbVersion),n.openDatabase(t,n.handleUpgradeNeeded,n.dbVersion)]).then((function(t){var r=l(t,2),o=r[0],i=r[1];return n.cloneData(o,i).then((function(){return n.indexedDbConnection=i,o.close(),n.deleteDatabaseByName(e)}))})).then((function(){return X.info("Database migration finished")})):n.openDatabase(t,n.handleUpgradeNeeded,n.dbVersion).then((function(e){n.indexedDbConnection=e}))}))}},{key:"handleUpgradeNeeded",value:function(e,t){var n=e.target.result;e.target.transaction.onerror=t,e.target.transaction.onabort=t;var r=we.storeNames.left,o=Xe.current||{},i=o&&!N(o);T(r).filter((function(e){return!l(e,2)[1].permanent})).forEach((function(e){var t=l(e,2),r=t[0],a=t[1].name,u=we.right[r],s=n.createObjectStore(a,{keyPath:u.keyPath,autoIncrement:u.autoIncrement||!1});if(u.index&&s.createIndex("".concat(u.index,"Index"),u.index),a===ie.ActivityState&&i)return s.add(Oe(r,Ne.left,o)),void X.info("Activity state has been recovered");var c=rt.stores[a];c&&(c.forEach((function(e){return s.add(e)})),X.info("Migration from localStorage done for ".concat(r," store")))})),ft(),rt.clear()}},{key:"open",value:function(){var e=this;return this.indexedDbConnection?Promise.resolve({success:!0}):this.openDatabase(this.dbName,this.handleUpgradeNeeded,this.dbVersion).then((function(t){return e.indexedDbConnection=t,e.indexedDbConnection.onclose=function(){return e.destroy},{success:!0}}))}},{key:"getTransactionStore",value:function(e,t,n){var r,o=e.storeName,i=e.mode,a=n.transaction([o],i),u=a.objectStore(o),s=we.right[Ee(o,Ne.right)];return s.index&&(r=u.index("".concat(s.index,"Index"))),a.onerror=t,a.onabort=t,{transaction:a,store:u,index:r,options:s}}},{key:"overrideError",value:function(e,t){var n=t.target.error;return e({name:n.name,message:n.message})}},{key:"getCompositeKeys",value:function(e){var t=e.fields[e.keyPath];return le(t)?t.composite:null}},{key:"targetIsObject",value:function(e){return I(e)}},{key:"prepareTarget",value:function(e,t,n){if(n===pt.clear||!t)return null;var r=this.getCompositeKeys(e);return-1!==[pt.add,pt.put].indexOf(n)?this.targetIsObject(t)?r?a(o({},e.keyPath,r.map((function(e){return t[e]})).join("")),t):t:null:t instanceof Array?t.join(""):t}},{key:"prepareResult",value:function(e,t){var n=this.getCompositeKeys(e);return n&&this.targetIsObject(t)?n.map((function(e){return t[e]})):null}},{key:"initRequest",value:function(e){var t=this,n=e.storeName,r=e.target,o=void 0===r?null:r,i=e.action,a=e.mode,u=void 0===a?mt.readonly:a;return this.open().then((function(){return new Promise((function(e,r){if(t.indexedDbConnection){var a=t.getTransactionStore({storeName:n,mode:u},r,t.indexedDbConnection),s=a.store,c=a.options,l=s[i](t.prepareTarget(c,o,i)),d=t.prepareResult(c,o);l.onsuccess=function(){i!==pt.get||l.result?e(d||l.result||o):r({name:"NotRecordFoundError",message:'Requested record not found in "'.concat(n,'" store')})},l.onerror=function(e){return t.overrideError(r,e)}}else r(t.noConnectionError)}))}))}},{key:"initBulkRequest",value:function(e){var t=this,n=e.storeName,r=e.target,o=e.action,i=e.mode,a=void 0===i?mt.readwrite:i;return!r||r&&!r.length?Promise.reject({name:"NoTargetDefined",message:"No array provided to perform ".concat(o,' bulk operation into "').concat(n,'" store')}):this.open().then((function(){return new Promise((function(e,i){if(t.indexedDbConnection){var u=t.getTransactionStore({storeName:n,mode:a},i,t.indexedDbConnection),s=u.transaction,c=u.store,l=u.options,d=new Array,f=r[0];s.oncomplete=function(){return e(d)};!function e(n){n.onerror=function(e){return t.overrideError(i,e)},n.onsuccess=function(){d.push(t.prepareResult(l,f)||n.result),f=r[d.length],d.length1&&void 0!==arguments[1]&&arguments[1];return this.openCursor({storeName:e,action:pt.list,firstOnly:t})}},{key:"getFirst",value:function(e){return this.getAll(e,!0).then((function(e){return e.length?e[0]:void 0}))}},{key:"getItem",value:function(e,t){return this.initRequest({storeName:e,target:t,action:pt.get})}},{key:"filterBy",value:function(e,t){var n=IDBKeyRange.only(t);return this.openCursor({storeName:e,action:pt.list,range:n})}},{key:"addItem",value:function(e,t){return this.initRequest({storeName:e,target:t,action:pt.add,mode:mt.readwrite})}},{key:"addBulk",value:function(e,t,n){return this.initBulkRequest({storeName:e,target:t,action:n?pt.put:pt.add,mode:mt.readwrite})}},{key:"updateItem",value:function(e,t){return this.initRequest({storeName:e,target:t,action:pt.put,mode:mt.readwrite})}},{key:"deleteItem",value:function(e,t){return this.initRequest({storeName:e,target:t,action:pt.delete,mode:mt.readwrite})}},{key:"deleteBulk",value:function(e,t,n){var r=n?IDBKeyRange[n](t):IDBKeyRange.only(t);return this.openCursor({storeName:e,action:pt.delete,range:r,mode:mt.readwrite})}},{key:"trimItems",value:function(e,t){var n=this,r=we.right[Ee(e,Ne.right)];return this.getAll(e).then((function(e){return e.length?e[t-1]:null})).then((function(t){return t?n.deleteBulk(e,t[r.keyPath],De.UpperBound):[]}))}},{key:"count",value:function(e){var t=this;return this.open().then((function(){return new Promise((function(n,r){if(t.indexedDbConnection){var o=t.getTransactionStore({storeName:e,mode:mt.readonly},r,t.indexedDbConnection).store.count();o.onsuccess=function(){return n(o.result)},o.onerror=function(e){return t.overrideError(r,e)}}else r(t.noConnectionError)}))}))}},{key:"clear",value:function(e){return this.initRequest({storeName:e,action:pt.clear,mode:mt.readwrite})}},{key:"destroy",value:function(){this.indexedDbConnection&&this.indexedDbConnection.close(),this.indexedDbConnection=null}},{key:"deleteDatabase",value:function(){return this.destroy(),this.deleteDatabaseByName(this.dbName)}}],[{key:"tryOpen",value:function(t){return new Promise((function(n){try{var r=t.open(e.dbValidationName);r.onsuccess=function(){r.result.close(),t.deleteDatabase(e.dbValidationName),n(!0)},r.onerror=function(){return n(!1)}}catch(e){n(!1)}}))}},{key:"isSupported",value:function(){if(e.isSupportedPromise)return e.isSupportedPromise;var t="IndexedDB is not supported in this browser";return e.isSupportedPromise=new Promise((function(n){var r=e.getIndexedDB(),o=!!navigator.platform&&/iPad|iPhone|iPod/.test(navigator.platform);!r||o?(X.warn(t),n(!1)):n(e.tryOpen(r).then((function(e){return e||X.warn(t),e})))})),e.isSupportedPromise}},{key:"getIndexedDB",value:function(){return window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB}}])}();o(ht,"dbValidationName","validate-db-openable"),o(ht,"isSupportedPromise",null);var vt=function(){function e(){Te(this,e)}return Be(e,[{key:"open",value:function(){return e.isSupported().then((function(e){if(!e)return{status:"error",error:{name:"LSNotSupported",message:"LocalStorage is not supported"}};var t=we.storeNames.left,n=Xe.current||{},r=n&&!N(n);return T(t).filter((function(e){return!l(e,2)[1].permanent})).forEach((function(e){var t=l(e,2),o=t[0],i=t[1].name;i!==ie.ActivityState||rt.stores[i]?rt.stores[i]||(rt.stores[i]=[]):rt.stores[i]=r?[Oe(o,Ne.left,n)]:[]})),ft(),{status:"success"}}))}},{key:"getCompositeKeys",value:function(e){var t=e.fields[e.keyPath];return le(t)?t.composite:null}},{key:"getKeys",value:function(e){var t=Ee(e,Ne.right),n=we.right[t];return this.getCompositeKeys(n)||[n.keyPath]}},{key:"nextIndex",value:function(e){return"number"==typeof e?e+1:void 0}},{key:"initRequest",value:function(e,t){var n=this,r=e.storeName,o=e.id,i=e.item,u=we.right[Ee(r,Ne.right)];return this.open().then((function(e){return"error"===e.status?Promise.reject(e.error):new Promise((function(e,s){var c,l=rt.stores[r],d=n.getKeys(r),f=(l[l.length-1]||{})[u.keyPath]||0;if(o){var p=Array.isArray(o)?o.slice():[o];c=d.map((function(e,t){return[e,p[t]]})).reduce(R,{})}else c=a({},i);var m=c?j(l,d,c):0;return t(e,s,{keys:d,items:l,index:m,options:u,lastId:f})}))}))}},{key:"sort",value:function(e,t,n){var r=d(e),o=t.slice().reverse();return r.sort((function(e,t){return o.reduce((function(r,o){return r||function(e,t,r){var o=n?n===e[r]:e[r]e[r]:e[r]>t[r];return o?-1:i?1:0}(e,t,o)}),0)}))}},{key:"prepareTarget",value:function(e,t,n){var r=this.getCompositeKeys(e);return r?a(o({},e.keyPath,r.map((function(e){return t[e]})).join("")),t):e.autoIncrement&&n?a(o({},e.keyPath,n),t):a({},t)}},{key:"prepareResult",value:function(e,t){var n=this.getCompositeKeys(e);return n?n.map((function(e){return t[e]})).filter((function(e){return!xe(e)})):t[e.keyPath]}},{key:"getAll",value:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return this.open().then((function(r){return"error"===r.status?Promise.reject(r.error):new Promise((function(r,o){var i=rt.stores[e];i instanceof Array?r(n?[i[0]]:t.sort(i,t.getKeys(e))):o({name:"NotFoundError",message:"No objectStore named ".concat(e," in this database")})}))}))}},{key:"getFirst",value:function(e){return this.getAll(e,!0).then((function(e){return e.length?e[0]:void 0}))}},{key:"getItem",value:function(e,t){var n=this;return this.initRequest({storeName:e,id:t},(function(t,r,o){var i=o.items,a=o.index,u=o.options;-1===a?r({name:"NotRecordFoundError",message:'Requested record not found in "'.concat(e,'" store')}):t(n.prepareTarget(u,i[a]))}))}},{key:"filterBy",value:function(e,t){return this.getAll(e).then((function(n){return n.filter((function(n){var r=we.right[Ee(e,Ne.right)];return(r.index&&n[r.index])===t}))}))}},{key:"addItem",value:function(e,t){var n=this;return this.initRequest({storeName:e,item:t},(function(r,o,i){var a=i.items,u=i.index,s=i.options,c=i.lastId;-1!==u?o({name:"ConstraintError",message:'Constraint was not satisfied, trying to add existing item into "'.concat(e,'" store')}):(a.push(n.prepareTarget(s,t,n.nextIndex(c))),rt.stores[e]=a,r(n.prepareResult(s,t)))}))}},{key:"addBulk",value:function(e,t,n){var r=this;return this.initRequest({storeName:e},(function(o,i,a){var u=a.keys,s=a.items,c=a.options,l=a.lastId;if(!t||t&&!t.length)i({name:"NoTargetDefined",message:'No array provided to perform add bulk operation into "'.concat(e,'" store')});else{var f=l,p=t.map((function(e){return r.prepareTarget(c,e,f=r.nextIndex(f))})),m=p.filter((function(e){return-1!==j(s,u,e)})).map((function(e){return e[c.keyPath]})),h=n?s.filter((function(e){return-1===m.indexOf(e[c.keyPath])})):d(s);if(m.length&&!n)i({name:"ConstraintError",message:'Constraint was not satisfied, trying to add existing items into "'.concat(e,'" store')});else rt.stores[e]=r.sort([].concat(d(h),d(p)),u),o(t.map((function(e){return r.prepareResult(c,e)})))}}))}},{key:"updateItem",value:function(e,t){var n=this;return this.initRequest({storeName:e,item:t},(function(r,o,i){var a=i.items,u=i.index,s=i.options,c=i.lastId,l=-1===u?n.nextIndex(c):void 0,d=n.prepareTarget(s,t,l);-1===u?a.push(d):a.splice(u,1,d),rt.stores[e]=a,r(n.prepareResult(s,t))}))}},{key:"deleteItem",value:function(e,t){return this.initRequest({storeName:e,id:t},(function(n,r,o){var i=o.items,a=o.index;-1!==a&&(i.splice(a,1),rt.stores[e]=i),n(t)}))}},{key:"findMax",value:function(e,t,n){if(!e.length)return-1;for(var r={index:-1,value:"string"==typeof n?"":0},o=0;o=r.value&&(r={value:e[o][t],index:o})}return r.index}},{key:"deleteBulk",value:function(e,t,n){var r=this;return this.getAll(e).then((function(o){var i=r.getKeys(e),a=we.right[Ee(e,Ne.right)].index||i[0],u=n?null:t,s=r.sort(o,i,u),c=r.findMax(s,a,t);if(-1===c)return[];var l=n===De.LowerBound?c:0,d=n&&n!==De.UpperBound?s.length:c+1,f=s.splice(l,d).map((function(e){return 1===i.length?e[a]:i.map((function(t){return e[t]}))}));return rt.stores[e]=s,f}))}},{key:"trimItems",value:function(e,t){var n=this,r=Ee(e,Ne.right),o=we.right[r];return this.getAll(e).then((function(e){return e.length?e[t-1]:null})).then((function(t){return t?n.deleteBulk(e,t[o.keyPath],De.UpperBound):[]}))}},{key:"count",value:function(e){return this.open().then((function(t){if("error"===t.status)return Promise.reject(t.error);var n=rt.stores[e];return Promise.resolve(n instanceof Array?n.length:1)}))}},{key:"clear",value:function(e){return this.open().then((function(t){return"error"===t.status?Promise.reject(t.error):new Promise((function(t){rt.stores[e]=[],t()}))}))}},{key:"destroy",value:function(){}},{key:"deleteDatabase",value:function(){}}],[{key:"isSupported",value:function(){return e.isSupportedPromise||(e.isSupportedPromise=new Promise((function(e){var t=K();t||X.warn("LocalStorage is not supported in this browser"),e(t)}))),e.isSupportedPromise}}])}();o(vt,"isSupportedPromise",null);var gt,yt=function(e){return e[e.noStorage=b.NO_STORAGE]="noStorage",e[e.indexedDB=b.INDEXED_DB]="indexedDB",e[e.localStorage=b.LOCAL_STORAGE]="localStorage",e}(yt||{}),bt={getAll:function(e,t,n){return e.getAll(t,n).then((function(e){return je(t,Ne.right,e)}))},getFirst:function(e,t){return e.getFirst(t).then((function(e){return Oe(t,Ne.right,e)}))},getItem:function(e,t,n){return e.getItem(t,Ae(t,Ne.left,n)).then((function(e){return Oe(t,Ne.right,e)})).catch((function(e){return Promise.reject(Re(t,e))}))},filterBy:function(e,t,n){return e.filterBy(t,Ce(n)).then((function(e){return je(t,Ne.right,e)}))},addItem:function(e,t,n){var r=Oe(t,Ne.left,n);return e.addItem(t,r).then((function(e){return Ae(t,Ne.right,e)})).catch((function(e){return Promise.reject(Re(t,e))}))},addBulk:function(e,t,n,r){var o=je(t,Ne.left,n);return e.addBulk(t,o,r).then((function(e){return e.map((function(e){return Ae(t,Ne.right,e)}))})).catch((function(e){return Promise.reject(Re(t,e))}))},updateItem:function(e,t,n){var r=Oe(t,Ne.left,n);return e.updateItem(t,r).then((function(e){return Ae(t,Ne.right,e)}))},deleteItem:function(e,t,n){return e.deleteItem(t,Ae(t,Ne.left,n)).then((function(e){return Ae(t,Ne.right,e)}))},deleteBulk:function(e,t,n,r){return e.deleteBulk(t,Ce(n),r).then((function(e){return e.map((function(e){return Ae(t,Ne.right,e)}))}))},trimItems:function(e,t,n){return e.trimItems(t,n)},count:function(e,t){return e.count(t)},clear:function(e,t){return e.clear(t)},destroy:function(e){return e.destroy()},deleteDatabase:function(e){return e.deleteDatabase()}};var kt=null;function wt(e){var t=null;return null!==kt?kt:kt=Promise.all([ht.isSupported(),vt.isSupported()]).then((function(n){var r=l(n,2),o=r[0],i=r[1];if(rt.setCustomName(e),o){gt=yt.indexedDB;var a=new ht;return a.setCustomName(e).then((function(){return t=a}))}return i?(gt=yt.localStorage,t=new vt,Promise.resolve(t)):(X.error("There is no storage available, app will run with minimum set of features"),gt=yt.noStorage,t=null,Promise.resolve(t))})).then((function(){return{type:gt,storage:t}}))}const Pt=a({init:wt,getType:function(){return gt}},(St=T(bt).map((function(e){var t=l(e,2),n=t[0],r=t[1];return[n,function(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),o=1;o2&&void 0!==arguments[2]&&arguments[2]?"CONTINUE":"RETRY",response:O(e.responseText)?JSON.parse(e.responseText):e.responseText,message:y[t],code:t}}function Nt(e,t){var n=e.slice(0,e.length-t.length-1).split("").reduce((function(e){return e.concat(" ")}),"");return"".concat(t).concat(n,":")}function It(e,t){var n="REQUEST PARAMETERS:",r=function(e){return e.replace(/([A-Z])/g,(function(e){return"_".concat(e.toLowerCase())}))},o=T(a(a(a({},oe.getBaseParams()),t),e)).map((function(e){var t=l(e,2),n=t[0],o=t[1];return[r(n),o]}));return X.log(n),o.filter((function(e){return B(l(e,2)[1])})).map((function(e){var t=l(e,2),r=t[0],o=t[1];return X.log(Nt(n,r),o),function(e){var t=l(e,2),n=t[0],r=t[1],o=encodeURIComponent(n),i=r;return"string"==typeof r&&(i=encodeURIComponent(r)),I(r)&&(i=encodeURIComponent(JSON.stringify(r)||"")),[o,i].join("=")}([r,o])})).join("&")}function Ot(e,t,n){var r=n.xhr,o=n.url;if(4===r.readyState){var i=r.status>=200&&r.status<300,a=O(r.responseText);if(0!==r.status)return a?t(i?function(e,t){var n=JSON.parse(e.responseText),r={status:"success",adid:n.adid,timestamp:n.timestamp,ask_in:n.ask_in,retry_in:n.retry_in,continue_in:n.continue_in,tracking_state:n.tracking_state,attribution:void 0,message:void 0};return E(t,"attribution")&&(r.attribution=n.attribution,r.message=n.message),T(r).filter((function(e){return!!l(e,2)[1]})).reduce(R,{})}(r,o):xt(r,"SERVER_CANNOT_PROCESS",!0)):e(xt(r,i?"SERVER_MALFORMED_RESPONSE":"SERVER_INTERNAL_ERROR"));e(xt(r,"NO_CONNECTION"))}}function jt(e,t){var n=e.endpoint,r=e.url,o=e.method,i=void 0===o?"GET":o,a=e.params,u=function(e,t){var n=e.endpoint,r=e.url,o=e.method,i=It(e.params,t);return{fullUrl:n+r+("GET"===o?"?".concat(i):""),encodedParams:i}}({endpoint:n,url:r,method:i,params:void 0===a?{}:a},t),s=u.fullUrl,c=u.encodedParams;return new Promise((function(e,t){var n=new XMLHttpRequest;n.open(i,s,!0),function(e,t){var n="REQUEST HEADERS:",r=[["Client-SDK","js".concat(L.version)],["Content-Type","POST"===t?"application/x-www-form-urlencoded":"application/json"]];X.log(n),r.forEach((function(t){var r=l(t,2),o=r[0],i=r[1];e.setRequestHeader(o,i),X.log(Nt(n,o),i)}))}(n,i),n.onreadystatechange=function(){return Ot(t,e,{xhr:n,url:r})},n.onerror=function(){return t(xt(n,"TRANSACTION_ERROR"))},n.send("GET"===i?void 0:c)}))}function At(e,t){return"success"===e.status?function(e,t){var n=E(t,"gdpr_forget_device"),r=E(t,"attribution"),o=E(t,"session"),i=E(t,"disable_third_party_sharing"),a="opted_out"===e.tracking_state;if(!n&&a)return tt("sdk:gdpr-forget-me"),e;r||n||a||!e.ask_in||tt("attribution:check",e);o&&tt("session:finished",e);if(i)return tt("sdk:third-party-sharing-opt-out"),e;return e}(e,t):e}var Ct={long:{delay:2*p,maxDelay:h,minRange:.5,maxRange:1},short:{delay:200,maxDelay:m,minRange:.5,maxRange:1},test:{delay:100,maxDelay:300}};function Et(e,t){var n,r,o=Ct[t=t||"long"],i=o.delay*Math.pow(2,e-1);return i=Math.min(i,o.maxDelay),o.minRange&&o.maxRange&&(i*=(n=o.minRange,r=o.maxRange,Math.random()*(r-n)+n)),Math.round(i)}var Rt=navigator.onLine;function Tt(){Rt=!0}function _t(){Rt=!1}function Bt(e,t,n){e.addEventListener&&e.addEventListener(t,n,!1)}function Kt(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)}var Lt=function(e){return e.Default="default",e.India="india",e.China="china",e}(Lt||{}),qt=function(e){return e.EU="EU",e.TR="TR",e.US="US",e}(qt||{});function Ut(e,t){X.warn("Both ".concat(e," and ").concat(t," are set in config, ").concat(t," will be ignored"))}var Mt=o(o(o(o(o(o({},Lt.Default,k),Lt.India,w),Lt.China,P),qt.EU,S),qt.TR,D),qt.US,x);function Ft(e){var t,n,r,o,i=(t=oe.getCustomConfig(),n=t.customUrl,r=t.urlStrategy,o=t.dataResidency,n?((o||r)&&Ut("customUrl",o?"dataResidency":"urlStrategy"),{app:n,gdpr:n}):(o&&r&&Ut("dataResidency","urlStrategy"),o?[o]:r===Lt.India?[Lt.India,Lt.Default]:r===Lt.China?[Lt.China,Lt.Default]:[Lt.Default,Lt.India,Lt.China]));return Array.isArray(i)?i.map((function(t){return e[t]||null})).filter((function(e){return!!e})):[i]}var Gt=150,Vt=2147483647,Wt=60*f;const Ht=function(){var e,t,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=n.url,o=n.method,i=void 0===o?"GET":o,u=n.params,s=void 0===u?{}:u,c=n.continueCb,d=n.strategy,f=n.wait,p={url:r,method:i,params:s,continueCb:c},m=r,h=i,v=a({},s),g=c,b=d,k=function(){e.reset(),t=e.next()},w=function(e,t){return e["/gdpr_forget_device"===t?"gdpr":"app"]},P=null,S={request:0,connection:0},D=I(f),x=null;function I(e){return(e=e||Gt)>Vt?Vt:e}function O(n){var r=n.wait,o=n.retrying;return e||(e=function(){var e=Ft(arguments.length>0&&void 0!==arguments[0]?arguments[0]:Mt),t=0;return{next:function(){return t0&&void 0!==arguments[0]?arguments[0]:{},t=e.url,n=e.method,r=e.params,o=void 0===r?{}:r,i=e.continueCb,u=e.wait;return function(e){var t=e.url,n=e.method,r=e.params,o=e.continueCb;t&&(m=t),n&&(h=n),N(r)||(v=a({},r)),v=a({createdAt:Le()},v),"function"==typeof o&&(g=o)}({url:t,method:n,params:o,continueCb:i}),O({wait:u})},isRunning:function(){return!!P},clear:K}};var Yt=function(e){return e===g?"GDPR disable":"disable"},zt=function(e){return{start:{inProgress:"Adjust SDK ".concat(Yt(e)," process has already started"),done:"Adjust SDK ".concat(Yt(e)," process is now started")},finish:{inProgress:"Adjust SDK ".concat(Yt(e)," process has already finished"),done:"Adjust SDK ".concat(Yt(e)," process is now finished")}}};function Jt(e,t){var n=e.reason,r=e.pending,o=st()||{},i="start"===t&&o.pending?"start":"finish",a="start"===t&&o.reason,u="finish"===t&&o.reason&&!o.pending;return a||u?(X.log(zt(o.reason)[i].inProgress),!1):(X.log(zt(n)[i].done),ct({reason:n||v,pending:r}),!0)}function Qt(e){return Jt({reason:e,pending:arguments.length>1&&void 0!==arguments[1]&&arguments[1]||!1},"start")}function Xt(){var e=st()||{};return e.reason===v||e.reason===g&&!e.pending?"off":e.reason===g&&e.pending?"paused":"on"}var Zt="activityState",$t=!1;function en(e){return e?"unknown"===e.uuid?(Qt({reason:g}),Xe.destroy(),{exists:!0,stored:null}):(Xe.init(e),{exists:!0,stored:e}):{exists:!1}}function tn(){return"off"!==Xt()&&Xe.isStarted()}function nn(){if(!tn())return Promise.resolve(null);var e=a(a({},Xe.current),{},{lastActive:Date.now()});return Pt.updateItem(Zt,e).then((function(){return Xe.current=e}))}var rn=Ht({strategy:"long",continueCb:function(e,t){var n=e&&e.continue_in||null;return un.pause=n?{timestamp:Date.now(),wait:n}:null,Pt.getFirst(an).then((function(e){return e?Pt.deleteItem(an,e.timestamp):null})).then((function(){return t(),un.running=!1,dn({wait:n})}))}}),on=!1,an="queue",un={running:!1,timestamp:null,pause:null};function sn(){var e=Date.now();return un.timestamp&&e<=un.timestamp&&(e=un.timestamp+1),un.timestamp=e,e}function cn(e){var t=e.url,n=e.method,r=e.params,o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=o.auto,u=o.timestamp;Xe.updateParams(t,i);var s=T(r||{}).filter((function(e){return B(l(e,2)[1])})).reduce(R,{}),c={timestamp:sn(),url:t,method:n,params:a(a({},Xe.getParams(t)),s)};return u&&(c.createdAt=u),Pt.addItem(an,c).then((function(){return function(e){return E(e,"session")&&Xe.resetSessionOffset(),Xe.updateLastActive(),nn()}(t)})).then((function(){return un.running?{}:dn()}))}function ln(){var e=un.pause||{},t=e.timestamp,n=e.wait,r=Date.now()-(t||0);return r0&&void 0!==arguments[0]?arguments[0]:{},t=e.cleanUp,n=e.wait;if(un.running)return Promise.resolve({});un.running=!0;var r=Promise.resolve({});return t&&(r=r.then(pn)),r.then((function(){return Pt.getFirst(an)})).then((function(e){return function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.timestamp,n=e.createdAt,r=e.url,o=e.method,i=e.params,u=arguments.length>1?arguments[1]:void 0,s=Xe.current||{},c="/session"===r&&!s.installed;return on&&!c||!r&&!o&&!i?(un.running=!1,Promise.resolve({})):rn.send({url:r,method:o,params:a(a({},i),{},{createdAt:Le(n||t)}),wait:u||ln()})}(e,n)}))}function fn(e){if(void 0!==e)if(e!==on){var t=on;on=e,!e&&t&&dn(),X.info("The app is now in ".concat(e?"offline":"online"," mode"))}else X.error("The app is already in ".concat(e?"offline":"online"," mode"));else X.error("State not provided, true or false has to be defined")}function pn(){var e=Date.now()-oe.requestValidityWindow;return Pt.deleteBulk(an,e,"upperBound")}var mn="globalParams",hn={short:"No type provided",long:"Global parameter type not provided, `callback` or `partner` types are available"};function vn(e){return(e||[]).map((function(e){return{key:e.key,value:e.value}}))}function gn(){return Promise.all([Pt.filterBy(mn,"callback"),Pt.filterBy(mn,"partner")]).then((function(e){var t=l(e,2),n=t[0],r=t[1];return{callbackParams:vn(n),partnerParams:vn(r)}}))}function yn(e,t){if(void 0===t)return X.error(hn.long),Promise.reject({message:hn.short});var n=A(e),r=Object.keys(n).map((function(e){return{key:e,value:n[e],type:t}}));return Promise.all([Pt.filterBy(mn,t),Pt.addBulk(mn,r,!0)]).then((function(e){var n=l(e,2),o=n[0],i=n[1],a=C(o.map((function(e){return e.key})),i.map((function(e){return e[0]})));return X.log("Following ".concat(t," parameters have been saved: ").concat(r.map((function(e){return"".concat(e.key,":").concat(e.value)})).join(", "))),a.length&&X.log("Keys: ".concat(a.join(", ")," already existed so their values have been updated")),i}))}function bn(e,t){return void 0===t?(X.error(hn.long),Promise.reject({message:hn.short})):Pt.deleteItem(mn,[e,t]).then((function(n){return X.log("".concat(e," ").concat(t," parameter has been deleted")),n}))}function kn(e){return void 0===e?(X.error(hn.long),Promise.reject({message:hn.short})):Pt.deleteBulk(mn,e).then((function(t){return X.log("All ".concat(e," parameters have been deleted")),t}))}var wn,Pn,Sn,Dn=!1,xn=document;function Nn(){return Sn=function(){var e=document;if(void 0!==e.hidden)return{hidden:"hidden",visibilityChange:"visibilitychange"};for(var t=T({mozHidden:"mozvisibilitychange",msHidden:"msvisibilitychange",oHidden:"ovisibilitychange",webkitHidden:"webkitvisibilitychange"}),n=0;n0;return!n||n&&t*f>=oe.sessionWindow?gn().then((function(e){var t,n,r;cn({url:"/session",method:"POST",params:(t=e,n=t.callbackParams,r=t.partnerParams,{callbackParams:n.length?A(n):null,partnerParams:r.length?A(r):null})},{auto:!0})})):(tt("attribution:check"),nn())}var Tn=Ht({url:"/attribution",strategy:"short",continueCb:function(e,t,n){if(!e||e&&"error"===e.status)return t(),Promise.resolve({state:"unknown"});if(!e.ask_in)return t(),function(e){if(N(e)||!function(e){var t=e.adid,n=void 0===t?"":t,r=e.attribution,o=void 0===r?{}:r;return!!n&&!!C(_n,Object.keys(o)).length}(e)||function(e){var t=e.adid,n=e.attribution,r=Xe.current.attribution||{},o=n&&_n.some((function(e){return r[e]!==n[e]}));return!o&&t===r.adid}(e))return Promise.resolve({state:"same"});var t=T(e.attribution).filter((function(e){var t=l(e,1)[0];return-1!==_n.indexOf(t)})).reduce(R,{adid:e.adid});return Xe.current=a(a({},Xe.current),{},{attribution:t}),nn().then((function(){return tt("attribution:change",t),X.info("Attribution has been updated"),{state:"changed"}}))}(e);return n(e.ask_in)}}),_n=["tracker_token","tracker_name","network","campaign","adgroup","creative","click_label","state"];var Bn=Ht({url:"/gdpr_forget_device",method:"POST",strategy:"short"}),Kn={running:"Adjust SDK is running pending GDPR Forget Me request",pending:"Adjust SDK will run GDPR Forget Me request after initialisation",paused:"Adjust SDK is already prepared to send GDPR Forget Me request",off:"Adjust SDK is already disabled"};function Ln(e){var t=Xt();return e||"on"===t?oe.isInitialised()?(Bn.send({params:a({},Xe.getParams())}).then((function(){tt("sdk:gdpr-forget-me")})),!0):(X.log(Kn.pending),!0):(X.log(Kn[t]),!1)}function qn(){return Jt({reason:g,pending:!1},"finish")}var Un={running:"Adjust SDK is running pending third-party sharing opt-out request",delayed:"Adjust SDK will run third-party sharing opt-out request after initialisation",pending:"Adjust SDK already queued third-party sharing opt-out request",off:"Third-party sharing opt-out is already done",start:{inProgress:"Third-party sharing opt-out has already started",done:"Third-party sharing opt-out is now started"},finish:{inProgress:"Third-party sharing opt-out has already finished",done:"Third-party sharing opt-out is now finished"}};function Mn(){var e=lt()||{};return e.reason?e.pending?"pending":"off":"on"}function Fn(e){var t=Mn();return e||"on"===t?oe.isInitialised()?(cn({url:"/disable_third_party_sharing",method:"POST"}),!0):(X.log(Un.delayed),!0):(X.log(Un[t]),!1)}function Gn(e,t){var n,r,o=lt()||{},i="start"===t&&e?"start":"finish",u="start"===t&&o.reason,s="finish"===t&&o.reason&&!o.pending;return u||s?(X.log(Un[i].inProgress),!1):(X.log(Un[i].done),r=(n={reason:v,pending:e})?a({},n):null,rt.stores[ot]=a(a({},at()),{},{thirdPartySharingDisabled:r}),ut(),!0)}function Vn(){return Gn(!1,"finish")}function Wn(){"pending"===Mn()&&(X.log(Un.running),Fn(!0))}var Hn=[];function Yn(e,t){Hn.push({method:e,description:t,timestamp:Date.now()})}var zn=10,Jn="eventDeduplication";function Qn(e,t){var n,r,o=t.callbackParams,i=t.partnerParams,u={},s=a({eventToken:e.eventToken,deduplicationId:e.deduplicationId},(n=e.revenue,r=e.currency,isNaN(n)||(n=parseFloat(n))<0||!r?{}:{revenue:n.toFixed(5),currency:r})),c=a(a({},A(o)),A(e.callbackParams)),l=a(a({},A(i)),A(e.partnerParams));return N(c)||(u.callbackParams=c),N(l)||(u.partnerParams=l),a(a({},s),u)}function Xn(e){return e?Pt.getAll(Jn).then((function(e){return e.map((function(e){return e.id}))})).then((function(t){return-1===t.indexOf(e)?function(e){var t=oe.getCustomConfig().eventDeduplicationListLimit,n=t>0?t:zn;return Pt.count(Jn).then((function(e){var t=Promise.resolve();if(e>=n){var r=e-n+1;X.log("Event deduplication list limit has been reached. Oldest ids are about to be removed (".concat(r," of them)")),t=Pt.trimItems(Jn,r)}return t})).then((function(){return X.info("New event deduplication id is added to the list: ".concat(e)),Pt.addItem(Jn,{id:e})}))}(e):Promise.reject({message:"Event won't be tracked, since it was previously tracked with the same deduplication id ".concat(e)})})):Promise.resolve()}function Zn(e){return{clickTime:Le(),source:"web_referrer",referrer:decodeURIComponent(e)}}function $n(e,t){var n;(n=e||window.location.search.substring(1).split("&").map((function(e){return e.split("=")})).reduce(R,{}).adjust_referrer)&&cn({url:"/sdk_click",method:"POST",params:Zn(n)},{timestamp:t})}var er=["logLevel","logOutput"],tr=null,nr=!1,rr=!1,or=!1;function ir(){Fn()&&Gn(!0,"start")}function ar(){var e;"paused"===Xt()&&(qn(),Promise.all([(e={uuid:"unknown"},Xe.current=e,Pt.clear(Zt).then((function(){return Pt.addItem(Zt,e)}))),Pt.clear(mn),Pt.clear(an)]).then(lr))}function ur(){return nr||oe.isInitialised()}function sr(){nr=!1,rr=!1,Hn=[],rn.clear(),un.running=!1,un.timestamp=null,un.pause=null,Dn=!1,Xe.toBackground(),En(),Sn&&(clearTimeout(Pn),Kt(xn,Sn.visibilityChange,jn),Bt(xn,Sn.visibilityChange,An)),Tn.clear()}function cr(e){e&&X.log("Adjust SDK has been shutdown due to asynchronous disable"),sr(),$e.forEach(clearTimeout),$e=[],Ze={},Xe.destroy(),Kt(window,"online",Tt),Kt(window,"offline",_t),Pt.destroy(),oe.destroy()}function lr(){or=!1,cr(),Bn.clear(),tr=null,X.log("Adjust SDK instance has been destroyed")}function dr(e){X.log("Adjust SDK is starting with web_uuid set to ".concat(e.uuid));var t=Xe.current.installed;"paused"===Xt()&&(X.log(Kn.running),Ln(!0)),t||Wn();var n=Xt(),r=function(e){return"Adjust SDK start has been interrupted ".concat(e)};return"off"===n?(cr(),Promise.reject({interrupted:!0,message:r("due to complete async disable")})):"paused"===n?(sr(),Promise.reject({interrupted:!0,message:r("due to partial async disable")})):rr?Promise.reject({interrupted:!0,message:r("due to multiple synchronous start attempt")}):(dn({cleanUp:!0}),Nn().then((function(){nr=!1,rr=!0,t&&(fr(),Wn())})))}function fr(){var e;or=!0,Hn.forEach((function(e){"function"==typeof e.method&&(X.log("Delayed ".concat(e.description," task is running now")),e.method(e.timestamp))})),Hn=[],(e="sdk:installed")&&T(Ze).some((function(t){var n=l(t,2)[1];return n.some((function(t,r){if(t.id===e)return n.splice(r,1),!0}))}))}function pr(e){if(e.interrupted)X.log(e.message);else if(cr(),X.error("Adjust SDK start has been canceled due to an error",e),e.stack)throw e}function mr(e){"off"!==Xt()?(oe.set(e),Bt(window,"online",Tt),Bt(window,"offline",_t),et("sdk:installed",fr),et("sdk:shutdown",(function(){return cr(!0)})),et("sdk:gdpr-forget-me",ar),et("sdk:third-party-sharing-opt-out",Vn),et("attribution:check",(function(e,t){return n=t,r=Xe.current,(o=(n||{}).ask_in)||!r.attribution&&r.installed?(Tn.send({params:a({initiatedBy:n?"backend":"sdk"},Xe.getParams()),wait:o}),Xe.updateSessionOffset(),nn()):Promise.resolve(r);var n,r,o})),"function"==typeof e.attributionCallback&&et("attribution:change",e.attributionCallback),($t?Promise.reject({interrupted:!0,message:"Adjust SDK start already in progress"}):($t=!0,Pt.getFirst(Zt).then(en).then((function(e){if(e.exists)return $t=!1,e.stored;var t,n=N(Xe.current)?{uuid:(t=Date.now(),"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,(function(e){var n=(t+16*Math.random())%16|0;return t=Math.floor(t/16),("x"===e?n:11&n).toString(16)})))}:Xe.current;return Pt.addItem(Zt,n).then((function(){return Xe.init(n),dt(),$t=!1,n}))})))).then(dr).then($n).catch(pr)):X.log("Adjust SDK is disabled, can not start the sdk")}function hr(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=n.schedule,o=n.waitForInitFinished,i=n.optionalInit;if(Pt.getType()!==b.NO_STORAGE)if("on"===Xt())if(i||ur()||!o){if("function"==typeof t){if(!r||or&&rr||!i&&!ur())return t();Yn(t,e),X.log("Running ".concat(e," is delayed until Adjust SDK is up"))}}else X.error("Adjust SDK can not ".concat(e,", sdk instance is not initialized"));else X.log("Adjust SDK is disabled, can not ".concat(e));else X.log("Adjust SDK can not ".concat(e,", no storage available"))}const vr={initSdk:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.logLevel,n=e.logOutput,r=u(e,er);X.setLogLevel(t,n),ur()?X.error("You already initiated your instance"):oe.hasMissing(r)||(nr=!0,Pt.init(r.namespace).then((function(e){e.type!==b.NO_STORAGE?(X.info("Available storage is ".concat(e.type)),tr=a({},r),mr(r)):X.error("Adjust SDK can not start, there is no storage available")})))},getAttribution:function(){return hr("get attribution",(function(){return Xe.getAttribution()}))},getWebUUID:function(){return hr("get web_uuid",(function(){return Xe.getWebUUID()}))},setReferrer:function(e){e&&"string"==typeof e?hr("setting reftag",(function(t){return $n(e,t)}),{schedule:!0,waitForInitFinished:!0,optionalInit:!0}):X.error("You must provide a string referrer")},trackEvent:function(e){return function(e){if(Pt.getType()===b.NO_STORAGE){var t="Adjust SDK can not track event, no storage available";return X.log(t),Promise.reject(t)}if("on"!==Xt()){var n="Adjust SDK is disabled, can not track event";return X.log(n),Promise.reject(n)}if(!ur()){var r="Adjust SDK can not track event, sdk instance is not initialized";return X.error(r),Promise.reject(r)}return new Promise((function(t){var n=function(n){return t(function(e,t){if(!e||e&&(N(e)||!e.eventToken)){var n="You must provide event token in order to track event";return X.error(n),Promise.reject(n)}return Xn(e.deduplicationId).then(gn).then((function(n){return cn({url:"/event",method:"POST",params:Qn(e,n)},{timestamp:t})})).catch((function(e){return e&&e.message&&X.error(e.message),Promise.reject(e)}))}(e,n))};!or||!rr&&ur()?(Yn(n,"track event"),X.log("Running track event is delayed until Adjust SDK is up")):n()}))}(e)},addGlobalCallbackParameters:function(e){hr("add global callback parameters",(function(){return yn(e,"callback")}))},addGlobalPartnerParameters:function(e){hr("add global partner parameters",(function(){return yn(e,"partner")}))},removeGlobalCallbackParameter:function(e){hr("remove global callback parameter",(function(){return bn(e,"callback")}))},removeGlobalPartnerParameter:function(e){hr("remove global partner parameter",(function(){return bn(e,"partner")}))},clearGlobalCallbackParameters:function(){hr("remove all global callback parameters",(function(){return kn("callback")}))},clearGlobalPartnerParameters:function(){hr("remove all global partner parameters",(function(){return kn("partner")}))},switchToOfflineMode:function(){hr("set offline mode",(function(){return fn(!0)}))},switchBackToOnlineMode:function(){hr("set online mode",(function(){return fn(!1)}))},stop:function(){Qt()&&oe.isInitialised()&&cr()},restart:function(){var e;((e=st()||{}).reason===g?(X.log("Adjust SDK is disabled due to GDPR-Forget-Me request and it can not be re-enabled"),!1):e.reason?(X.log("Adjust SDK has been enabled"),ct(null),!0):(X.log("Adjust SDK is already enabled"),!1))&&tr&&mr(tr)},gdprForgetMe:function(){var e=Ln();e&&(e=Qt(g,!0))&&oe.isInitialised()&&sr()},disableThirdPartySharing:function(){hr("disable third-party sharing",ir,{schedule:!0})},__testonly__:{destroy:lr,clearDatabase:function(){return Pt.deleteDatabase()}},__internal__:{restartAfterAsyncEnable:function(){X.log("Adjust SDK has been restarted due to asynchronous enable"),tr&&mr(tr)}}};return t=t.default})())); \ No newline at end of file +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.Adjust=t():e.Adjust=t()}(self,(()=>(()=>{"use strict";var e={d:(t,n)=>{for(var r in n)e.o(n,r)&&!e.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:n[r]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t)},t={};function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}function r(e){var t=function(e,t){if("object"!=n(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var o=r.call(e,t||"default");if("object"!=n(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==n(t)?t:t+""}function o(e,t,n){return(t=r(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function s(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);nvr});var f=1e3,p=60*f,m=60*p,h=24*m,v="general",g="gdpr",y={TRANSACTION_ERROR:"XHR transaction failed due to an error",SERVER_MALFORMED_RESPONSE:"Response from server is malformed",SERVER_INTERNAL_ERROR:"Internal error occurred on the server",SERVER_CANNOT_PROCESS:"Server was not able to process the request, probably due to error coming from the client",NO_CONNECTION:"No internet connectivity",SKIP:"Skipping slower attempt",MISSING_URL:"Url is not provided"},b={NO_STORAGE:"noStorage",INDEXED_DB:"indexedDB",LOCAL_STORAGE:"localStorage"},k={endpointName:"Default",app:"https://app.adjust.com",gdpr:"https://gdpr.adjust.com"},S={endpointName:"Indian",app:"https://app.adjust.net.in",gdpr:"https://gdpr.adjust.net.in"},w={endpointName:"Chinese",app:"https://app.adjust.world",gdpr:"https://gdpr.adjust.world"},P={endpointName:"EU",app:"https://app.eu.adjust.com",gdpr:"https://gdpr.eu.adjust.com"},D={endpointName:"TR",app:"https://app.tr.adjust.com",gdpr:"https://gdpr.tr.adjust.com"},x={endpointName:"US",app:"https://app.us.adjust.com",gdpr:"https://gdpr.us.adjust.com"};function N(e){return!Object.keys(e).length&&e.constructor===Object}function I(e){return"object"===n(e)&&null!==e&&!(e instanceof Array)}function O(e){try{return I(JSON.parse(e))}catch(e){return!1}}function j(e,t,n){function r(e){return Array.isArray(t)?t.every((function(t){return e[t]===n[t]})):e[t]===n}for(var o=0;o0&&void 0!==arguments[0]?arguments[0]:[]).reduce((function(e,t){return a(a({},e),{},o({},t.key,t.value))}),{})}function C(){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:[]).filter((function(t){return-1!==e.indexOf(t)}))}function E(e,t){return new RegExp("\\/".concat(t,"(\\/.*|\\?.*){0,1}$")).test(e)}function R(e,t){var n=l(t,2),r=n[0],i=n[1];return a(a({},e),{},o({},r,i))}function T(e){return Object.keys(e).map((function(t){return[t,e[t]]}))}function _(e){return Object.keys(e).map((function(t){return e[t]}))}function B(e){return I(e)?!N(e):!!e||0===e}function K(){try{var e=(new Date).toString(),t=window.localStorage;t.setItem(e,e);var n=t.getItem(e)===e;return t.removeItem(e),!(!n||!t)}catch(e){return!1}}const L={namespace:"adjust-sdk",version:"5.6.0",env:"production"};var q="error",U="warning",M="info",F="verbose",G=o(o(o(o(o({},"none",-1),q,0),U,1),M,2),F,3),V={log:" ",info:" ",warn:" ",error:""},W={development:F,production:q,test:F},H=z(),Y="";function z(){return W[L.env]||q}function J(e,t){var n;if(!(G[H]2?u-2:0),c=2;c2&&void 0!==arguments[2]?arguments[2]:[]).map((function(n){return Oe(e,t,n)}))}function Ae(e,t,n){var r=Se[t][Ee(e,Ne.right)],o=r.fields[r.keyPath],i=n instanceof Array?n.slice():[n],a=(le(o)?o.composite:[r.keyPath]).map((function(e,t){var n=r.fields[e];return Ie(se(n)?n.values:null,i[t])}));return 1===a.length?a[0]:a}function Ce(e){return Se.values[e]||e}function Ee(e,t){return(Se.storeNames[t][e]||{}).name||e}function Re(e,t){return{name:t.name,message:t.message.replace('"'.concat(e,'"'),Ee(e,Ne.right))}}function Te(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function _e(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:1,n=e+"",r=1;r<=t;r+=1)e0?"-":"+")+Ke(Math.floor(Math.abs(t)/60))+Ke(Math.abs(t)%60)}(t);return"".concat(n,"T").concat(r,"Z").concat(o)}function qe(e,t){return isNaN(e)||isNaN(t)?0:Math.abs(t-e)}var Ue={},Me=!1,Fe=!1;function Ge(){Ue=Me?a({},arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}):{}}function Ve(){Me&&(Ue.lastInterval=function(){var e=Ue.lastActive;if(e)return Math.round(qe(e,Date.now())/f);return-1}(),Ue.lastActive=Date.now())}function We(e){Ue=a(a({},Ue),e)}function He(){Fe=!0}function Ye(){var e=Ue.lastActive;return Math.round(qe(e,Date.now())/f)}function ze(){return(Ue.timeSpent||0)+(Fe?Ye():0)}function Je(){var e=qe(Ue.lastActive,Date.now())=0?Ue.lastInterval:0,n={timeSpent:Ue.timeSpent||0,sessionLength:Ue.sessionLength||0,sessionCount:Ue.sessionCount||1,lastInterval:t||0};return e&&E(e,"event")&&(n.eventCount=Ue.eventCount),n},updateParams:function(e,t){if(Me){var n={};n.timeSpent=ze(),n.sessionLength=Je(),E(e,"session")&&(n.sessionCount=(Ue.sessionCount||0)+1),E(e,"event")&&(n.eventCount=(Ue.eventCount||0)+1),We(n),t||Ve()}},updateInstalled:function(){Me&&(Ue.installed||We({installed:!0}))},updateSessionOffset:Qe,updateSessionLength:function(){Me&&(We({sessionLength:Je()}),Ve())},resetSessionOffset:function(){Me&&We({timeSpent:0,sessionLength:0})},updateLastActive:Ve,destroy:function(){Ue={},Me=!1,Fe=!1},getAttribution:function(){return Me?Ue.attribution?Ue.attribution:(X.log("No attribution data yet"),null):null},getWebUUID:function(){return Me?Ue.uuid:null}};var Ze={},$e=[];function et(e,t){var n="id"+Math.random().toString(36).substr(2,16),r={id:n,cb:t};return Ze[e]||(Ze[e]=[]),Ze[e].push(r),n}function tt(e,t){Ze[e]&&Ze[e].forEach((function(n){"function"==typeof n.cb&&$e.push(setTimeout((function(){return n.cb(e,t)})))}))}var nt=function(){return Be((function e(){Te(this,e),o(this,"items",{})}),[{key:"getItem",value:function(e){return Object.prototype.hasOwnProperty.call(this.items,e)?this.items[e]:null}},{key:"removeItem",value:function(e){delete this.items[e]}},{key:"setItem",value:function(e,t){this.items[e]=t}}])}();const rt=new(function(){return Be((function e(){var t=this;Te(this,e),o(this,"defaultName",L.namespace),o(this,"storageName",this.defaultName),o(this,"storeNames",Se.storeNames.left),this.storesMap={},K()?this.storage=window.localStorage:this.storage=new nt;var n=this.read.bind(this),r=this.write.bind(this);_(this.storeNames).forEach((function(e){var o=e.name;Object.defineProperty(t.storesMap,o,{get:function(){return n(o)},set:function(e){r(o,e)}})})),Object.freeze(this.storesMap)}),[{key:"read",value:function(e){var t=this.storage.getItem("".concat(this.storageName,".").concat(e)),n=t?JSON.parse(t):null;return e===ae.Preferences&&n?Oe(ae.Preferences,Ne.right,n):n}},{key:"write",value:function(e,t){t?this.storage.setItem("".concat(this.storageName,".").concat(e),JSON.stringify(t instanceof Array?t:Oe(ae.Preferences,Ne.left,t))):this.storage.removeItem("".concat(this.storageName,".").concat(e))}},{key:"clear",value:function(){this.deleteData()}},{key:"deleteData",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];_(this.storeNames).forEach((function(n){!t&&n.permanent||e.storage.removeItem("".concat(e.storageName,".").concat(n.name))}))}},{key:"setCustomName",value:function(e){var t=this;if(e&&e.length){var n="".concat(L.namespace,"-").concat(e);_(this.storeNames).forEach((function(e){var r=e.name,o=t.storage.getItem("".concat(t.storageName,".").concat(r));o&&t.storage.setItem("".concat(n,".").concat(r),o)})),this.deleteData(!0),this.storageName=n}}},{key:"stores",get:function(){return this.storesMap}}])}());var ot=fe.preferences.name,it=at();function at(){return it||ut(),it?a({},it):null}function ut(){it=rt.stores[ot]}function st(){var e=at();return e?e.sdkDisabled:null}function ct(e){var t=e?a({},e):null;rt.stores[ot]=a(a({},at()),{},{sdkDisabled:t}),ut()}function lt(){var e=at();return e?e.thirdPartySharingDisabled:null}function dt(){var e=rt.stores[ot]||{},t=(it||{}).sdkDisabled||null;e.sdkDisabled&&!t&&tt("sdk:shutdown"),ut()}function ft(){rt.stores[ot]||(rt.stores[ot]=a({},it))}var pt=function(e){return e.add="add",e.put="put",e.get="get",e.list="list",e.clear="clear",e.delete="delete",e}(pt||{}),mt=function(e){return e.readonly="readonly",e.readwrite="readwrite",e}(mt||{}),ht=function(){function e(){Te(this,e),o(this,"dbDefaultName",L.namespace),o(this,"dbName",this.dbDefaultName),o(this,"dbVersion",1),o(this,"indexedDbConnection",null),o(this,"notSupportedError",{name:"IDBNotSupported",message:"IndexedDB is not supported"}),o(this,"databaseOpenError",{name:"CannotOpenDatabaseError",message:"Cannot open a database"}),o(this,"noConnectionError",{name:"NoDatabaseConnection",message:"Cannot open a transaction"});var t=e.getIndexedDB();if(!t)throw this.notSupportedError;this.idbFactory=t}return Be(e,[{key:"setCustomName",value:function(e){return e&&e.length>0?(this.dbName="".concat(L.namespace,"-").concat(e),this.migrateDb(this.dbDefaultName,this.dbName)):Promise.resolve()}},{key:"openDatabase",value:function(t,n,r){var o=this;return e.isSupported().then((function(e){return e?new Promise((function(e,i){var a=o.idbFactory.open(t,r);n&&(a.onupgradeneeded=function(e){return n(e,i)}),a.onsuccess=function(t){var n=t.target.result;n?e(n):i(o.databaseOpenError)},a.onerror=i})):Promise.reject(o.notSupportedError)}))}},{key:"databaseExists",value:function(e){var t=this;return new Promise((function(n){var r=!0;t.openDatabase(e,(function(){r=!1})).then((function(n){if(n.close(),!r)return t.deleteDatabaseByName(e)})).then((function(){return n(r)}))}))}},{key:"cloneData",value:function(e,t){var n=this;return _(Se.storeNames.left).map((function(e){return e.name})).filter((function(e){return"p"!==e})).map((function(r){return function(){return o=r,i=n.indexedDbConnection,n.indexedDbConnection=e,n.getAll(o).then((function(e){if(n.indexedDbConnection=t,!(e.length<1))return n.addBulk(o,e,!0)})).then((function(){n.indexedDbConnection=i}));var o,i}})).reduce((function(e,t){return e.then(t)}),Promise.resolve())}},{key:"migrateDb",value:function(e,t){var n=this;return this.databaseExists(e).then((function(r){return r?Promise.all([n.openDatabase(e,n.handleUpgradeNeeded,n.dbVersion),n.openDatabase(t,n.handleUpgradeNeeded,n.dbVersion)]).then((function(t){var r=l(t,2),o=r[0],i=r[1];return n.cloneData(o,i).then((function(){return n.indexedDbConnection=i,o.close(),n.deleteDatabaseByName(e)}))})).then((function(){return X.info("Database migration finished")})):n.openDatabase(t,n.handleUpgradeNeeded,n.dbVersion).then((function(e){n.indexedDbConnection=e}))}))}},{key:"handleUpgradeNeeded",value:function(e,t){var n=e.target.result;e.target.transaction.onerror=t,e.target.transaction.onabort=t;var r=Se.storeNames.left,o=Xe.current||{},i=o&&!N(o);T(r).filter((function(e){return!l(e,2)[1].permanent})).forEach((function(e){var t=l(e,2),r=t[0],a=t[1].name,u=Se.right[r],s=n.createObjectStore(a,{keyPath:u.keyPath,autoIncrement:u.autoIncrement||!1});if(u.index&&s.createIndex("".concat(u.index,"Index"),u.index),a===ie.ActivityState&&i)return s.add(Oe(r,Ne.left,o)),void X.info("Activity state has been recovered");var c=rt.stores[a];c&&(c.forEach((function(e){return s.add(e)})),X.info("Migration from localStorage done for ".concat(r," store")))})),ft(),rt.clear()}},{key:"open",value:function(){var e=this;return this.indexedDbConnection?Promise.resolve({success:!0}):this.openDatabase(this.dbName,this.handleUpgradeNeeded,this.dbVersion).then((function(t){return e.indexedDbConnection=t,e.indexedDbConnection.onclose=function(){return e.destroy},{success:!0}}))}},{key:"getTransactionStore",value:function(e,t,n){var r,o=e.storeName,i=e.mode,a=n.transaction([o],i),u=a.objectStore(o),s=Se.right[Ee(o,Ne.right)];return s.index&&(r=u.index("".concat(s.index,"Index"))),a.onerror=t,a.onabort=t,{transaction:a,store:u,index:r,options:s}}},{key:"overrideError",value:function(e,t){var n=t.target.error;return e({name:n.name,message:n.message})}},{key:"getCompositeKeys",value:function(e){var t=e.fields[e.keyPath];return le(t)?t.composite:null}},{key:"targetIsObject",value:function(e){return I(e)}},{key:"prepareTarget",value:function(e,t,n){if(n===pt.clear||!t)return null;var r=this.getCompositeKeys(e);return-1!==[pt.add,pt.put].indexOf(n)?this.targetIsObject(t)?r?a(o({},e.keyPath,r.map((function(e){return t[e]})).join("")),t):t:null:t instanceof Array?t.join(""):t}},{key:"prepareResult",value:function(e,t){var n=this.getCompositeKeys(e);return n&&this.targetIsObject(t)?n.map((function(e){return t[e]})):null}},{key:"initRequest",value:function(e){var t=this,n=e.storeName,r=e.target,o=void 0===r?null:r,i=e.action,a=e.mode,u=void 0===a?mt.readonly:a;return this.open().then((function(){return new Promise((function(e,r){if(t.indexedDbConnection){var a=t.getTransactionStore({storeName:n,mode:u},r,t.indexedDbConnection),s=a.store,c=a.options,l=s[i](t.prepareTarget(c,o,i)),d=t.prepareResult(c,o);l.onsuccess=function(){i!==pt.get||l.result?e(d||l.result||o):r({name:"NotRecordFoundError",message:'Requested record not found in "'.concat(n,'" store')})},l.onerror=function(e){return t.overrideError(r,e)}}else r(t.noConnectionError)}))}))}},{key:"initBulkRequest",value:function(e){var t=this,n=e.storeName,r=e.target,o=e.action,i=e.mode,a=void 0===i?mt.readwrite:i;return!r||r&&!r.length?Promise.reject({name:"NoTargetDefined",message:"No array provided to perform ".concat(o,' bulk operation into "').concat(n,'" store')}):this.open().then((function(){return new Promise((function(e,i){if(t.indexedDbConnection){var u=t.getTransactionStore({storeName:n,mode:a},i,t.indexedDbConnection),s=u.transaction,c=u.store,l=u.options,d=new Array,f=r[0];s.oncomplete=function(){return e(d)};!function e(n){n.onerror=function(e){return t.overrideError(i,e)},n.onsuccess=function(){d.push(t.prepareResult(l,f)||n.result),f=r[d.length],d.length1&&void 0!==arguments[1]&&arguments[1];return this.openCursor({storeName:e,action:pt.list,firstOnly:t})}},{key:"getFirst",value:function(e){return this.getAll(e,!0).then((function(e){return e.length?e[0]:void 0}))}},{key:"getItem",value:function(e,t){return this.initRequest({storeName:e,target:t,action:pt.get})}},{key:"filterBy",value:function(e,t){var n=IDBKeyRange.only(t);return this.openCursor({storeName:e,action:pt.list,range:n})}},{key:"addItem",value:function(e,t){return this.initRequest({storeName:e,target:t,action:pt.add,mode:mt.readwrite})}},{key:"addBulk",value:function(e,t,n){return this.initBulkRequest({storeName:e,target:t,action:n?pt.put:pt.add,mode:mt.readwrite})}},{key:"updateItem",value:function(e,t){return this.initRequest({storeName:e,target:t,action:pt.put,mode:mt.readwrite})}},{key:"deleteItem",value:function(e,t){return this.initRequest({storeName:e,target:t,action:pt.delete,mode:mt.readwrite})}},{key:"deleteBulk",value:function(e,t,n){var r=n?IDBKeyRange[n](t):IDBKeyRange.only(t);return this.openCursor({storeName:e,action:pt.delete,range:r,mode:mt.readwrite})}},{key:"trimItems",value:function(e,t){var n=this,r=Se.right[Ee(e,Ne.right)];return this.getAll(e).then((function(e){return e.length?e[t-1]:null})).then((function(t){return t?n.deleteBulk(e,t[r.keyPath],De.UpperBound):[]}))}},{key:"count",value:function(e){var t=this;return this.open().then((function(){return new Promise((function(n,r){if(t.indexedDbConnection){var o=t.getTransactionStore({storeName:e,mode:mt.readonly},r,t.indexedDbConnection).store.count();o.onsuccess=function(){return n(o.result)},o.onerror=function(e){return t.overrideError(r,e)}}else r(t.noConnectionError)}))}))}},{key:"clear",value:function(e){return this.initRequest({storeName:e,action:pt.clear,mode:mt.readwrite})}},{key:"destroy",value:function(){this.indexedDbConnection&&this.indexedDbConnection.close(),this.indexedDbConnection=null}},{key:"deleteDatabase",value:function(){return this.destroy(),this.deleteDatabaseByName(this.dbName)}}],[{key:"tryOpen",value:function(t){return new Promise((function(n){try{var r=t.open(e.dbValidationName);r.onsuccess=function(){r.result.close(),t.deleteDatabase(e.dbValidationName),n(!0)},r.onerror=function(){return n(!1)}}catch(e){n(!1)}}))}},{key:"isSupported",value:function(){if(e.isSupportedPromise)return e.isSupportedPromise;var t="IndexedDB is not supported in this browser";return e.isSupportedPromise=new Promise((function(n){var r=e.getIndexedDB(),o=!!navigator.platform&&/iPad|iPhone|iPod/.test(navigator.platform);!r||o?(X.warn(t),n(!1)):n(e.tryOpen(r).then((function(e){return e||X.warn(t),e})))})),e.isSupportedPromise}},{key:"getIndexedDB",value:function(){return window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB}}])}();o(ht,"dbValidationName","validate-db-openable"),o(ht,"isSupportedPromise",null);var vt=function(){function e(){Te(this,e)}return Be(e,[{key:"open",value:function(){return e.isSupported().then((function(e){if(!e)return{status:"error",error:{name:"LSNotSupported",message:"LocalStorage is not supported"}};var t=Se.storeNames.left,n=Xe.current||{},r=n&&!N(n);return T(t).filter((function(e){return!l(e,2)[1].permanent})).forEach((function(e){var t=l(e,2),o=t[0],i=t[1].name;i!==ie.ActivityState||rt.stores[i]?rt.stores[i]||(rt.stores[i]=[]):rt.stores[i]=r?[Oe(o,Ne.left,n)]:[]})),ft(),{status:"success"}}))}},{key:"getCompositeKeys",value:function(e){var t=e.fields[e.keyPath];return le(t)?t.composite:null}},{key:"getKeys",value:function(e){var t=Ee(e,Ne.right),n=Se.right[t];return this.getCompositeKeys(n)||[n.keyPath]}},{key:"nextIndex",value:function(e){return"number"==typeof e?e+1:void 0}},{key:"initRequest",value:function(e,t){var n=this,r=e.storeName,o=e.id,i=e.item,u=Se.right[Ee(r,Ne.right)];return this.open().then((function(e){return"error"===e.status?Promise.reject(e.error):new Promise((function(e,s){var c,l=rt.stores[r],d=n.getKeys(r),f=(l[l.length-1]||{})[u.keyPath]||0;if(o){var p=Array.isArray(o)?o.slice():[o];c=d.map((function(e,t){return[e,p[t]]})).reduce(R,{})}else c=a({},i);var m=c?j(l,d,c):0;return t(e,s,{keys:d,items:l,index:m,options:u,lastId:f})}))}))}},{key:"sort",value:function(e,t,n){var r=d(e),o=t.slice().reverse();return r.sort((function(e,t){return o.reduce((function(r,o){return r||function(e,t,r){var o=n?n===e[r]:e[r]e[r]:e[r]>t[r];return o?-1:i?1:0}(e,t,o)}),0)}))}},{key:"prepareTarget",value:function(e,t,n){var r=this.getCompositeKeys(e);return r?a(o({},e.keyPath,r.map((function(e){return t[e]})).join("")),t):e.autoIncrement&&n?a(o({},e.keyPath,n),t):a({},t)}},{key:"prepareResult",value:function(e,t){var n=this.getCompositeKeys(e);return n?n.map((function(e){return t[e]})).filter((function(e){return!xe(e)})):t[e.keyPath]}},{key:"getAll",value:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return this.open().then((function(r){return"error"===r.status?Promise.reject(r.error):new Promise((function(r,o){var i=rt.stores[e];i instanceof Array?r(n?[i[0]]:t.sort(i,t.getKeys(e))):o({name:"NotFoundError",message:"No objectStore named ".concat(e," in this database")})}))}))}},{key:"getFirst",value:function(e){return this.getAll(e,!0).then((function(e){return e.length?e[0]:void 0}))}},{key:"getItem",value:function(e,t){var n=this;return this.initRequest({storeName:e,id:t},(function(t,r,o){var i=o.items,a=o.index,u=o.options;-1===a?r({name:"NotRecordFoundError",message:'Requested record not found in "'.concat(e,'" store')}):t(n.prepareTarget(u,i[a]))}))}},{key:"filterBy",value:function(e,t){return this.getAll(e).then((function(n){return n.filter((function(n){var r=Se.right[Ee(e,Ne.right)];return(r.index&&n[r.index])===t}))}))}},{key:"addItem",value:function(e,t){var n=this;return this.initRequest({storeName:e,item:t},(function(r,o,i){var a=i.items,u=i.index,s=i.options,c=i.lastId;-1!==u?o({name:"ConstraintError",message:'Constraint was not satisfied, trying to add existing item into "'.concat(e,'" store')}):(a.push(n.prepareTarget(s,t,n.nextIndex(c))),rt.stores[e]=a,r(n.prepareResult(s,t)))}))}},{key:"addBulk",value:function(e,t,n){var r=this;return this.initRequest({storeName:e},(function(o,i,a){var u=a.keys,s=a.items,c=a.options,l=a.lastId;if(!t||t&&!t.length)i({name:"NoTargetDefined",message:'No array provided to perform add bulk operation into "'.concat(e,'" store')});else{var f=l,p=t.map((function(e){return r.prepareTarget(c,e,f=r.nextIndex(f))})),m=p.filter((function(e){return-1!==j(s,u,e)})).map((function(e){return e[c.keyPath]})),h=n?s.filter((function(e){return-1===m.indexOf(e[c.keyPath])})):d(s);if(m.length&&!n)i({name:"ConstraintError",message:'Constraint was not satisfied, trying to add existing items into "'.concat(e,'" store')});else rt.stores[e]=r.sort([].concat(d(h),d(p)),u),o(t.map((function(e){return r.prepareResult(c,e)})))}}))}},{key:"updateItem",value:function(e,t){var n=this;return this.initRequest({storeName:e,item:t},(function(r,o,i){var a=i.items,u=i.index,s=i.options,c=i.lastId,l=-1===u?n.nextIndex(c):void 0,d=n.prepareTarget(s,t,l);-1===u?a.push(d):a.splice(u,1,d),rt.stores[e]=a,r(n.prepareResult(s,t))}))}},{key:"deleteItem",value:function(e,t){return this.initRequest({storeName:e,id:t},(function(n,r,o){var i=o.items,a=o.index;-1!==a&&(i.splice(a,1),rt.stores[e]=i),n(t)}))}},{key:"findMax",value:function(e,t,n){if(!e.length)return-1;for(var r={index:-1,value:"string"==typeof n?"":0},o=0;o=r.value&&(r={value:e[o][t],index:o})}return r.index}},{key:"deleteBulk",value:function(e,t,n){var r=this;return this.getAll(e).then((function(o){var i=r.getKeys(e),a=Se.right[Ee(e,Ne.right)].index||i[0],u=n?null:t,s=r.sort(o,i,u),c=r.findMax(s,a,t);if(-1===c)return[];var l=n===De.LowerBound?c:0,d=n&&n!==De.UpperBound?s.length:c+1,f=s.splice(l,d).map((function(e){return 1===i.length?e[a]:i.map((function(t){return e[t]}))}));return rt.stores[e]=s,f}))}},{key:"trimItems",value:function(e,t){var n=this,r=Ee(e,Ne.right),o=Se.right[r];return this.getAll(e).then((function(e){return e.length?e[t-1]:null})).then((function(t){return t?n.deleteBulk(e,t[o.keyPath],De.UpperBound):[]}))}},{key:"count",value:function(e){return this.open().then((function(t){if("error"===t.status)return Promise.reject(t.error);var n=rt.stores[e];return Promise.resolve(n instanceof Array?n.length:1)}))}},{key:"clear",value:function(e){return this.open().then((function(t){return"error"===t.status?Promise.reject(t.error):new Promise((function(t){rt.stores[e]=[],t()}))}))}},{key:"destroy",value:function(){}},{key:"deleteDatabase",value:function(){}}],[{key:"isSupported",value:function(){return e.isSupportedPromise||(e.isSupportedPromise=new Promise((function(e){var t=K();t||X.warn("LocalStorage is not supported in this browser"),e(t)}))),e.isSupportedPromise}}])}();o(vt,"isSupportedPromise",null);var gt,yt=function(e){return e[e.noStorage=b.NO_STORAGE]="noStorage",e[e.indexedDB=b.INDEXED_DB]="indexedDB",e[e.localStorage=b.LOCAL_STORAGE]="localStorage",e}(yt||{}),bt={getAll:function(e,t,n){return e.getAll(t,n).then((function(e){return je(t,Ne.right,e)}))},getFirst:function(e,t){return e.getFirst(t).then((function(e){return Oe(t,Ne.right,e)}))},getItem:function(e,t,n){return e.getItem(t,Ae(t,Ne.left,n)).then((function(e){return Oe(t,Ne.right,e)})).catch((function(e){return Promise.reject(Re(t,e))}))},filterBy:function(e,t,n){return e.filterBy(t,Ce(n)).then((function(e){return je(t,Ne.right,e)}))},addItem:function(e,t,n){var r=Oe(t,Ne.left,n);return e.addItem(t,r).then((function(e){return Ae(t,Ne.right,e)})).catch((function(e){return Promise.reject(Re(t,e))}))},addBulk:function(e,t,n,r){var o=je(t,Ne.left,n);return e.addBulk(t,o,r).then((function(e){return e.map((function(e){return Ae(t,Ne.right,e)}))})).catch((function(e){return Promise.reject(Re(t,e))}))},updateItem:function(e,t,n){var r=Oe(t,Ne.left,n);return e.updateItem(t,r).then((function(e){return Ae(t,Ne.right,e)}))},deleteItem:function(e,t,n){return e.deleteItem(t,Ae(t,Ne.left,n)).then((function(e){return Ae(t,Ne.right,e)}))},deleteBulk:function(e,t,n,r){return e.deleteBulk(t,Ce(n),r).then((function(e){return e.map((function(e){return Ae(t,Ne.right,e)}))}))},trimItems:function(e,t,n){return e.trimItems(t,n)},count:function(e,t){return e.count(t)},clear:function(e,t){return e.clear(t)},destroy:function(e){return e.destroy()},deleteDatabase:function(e){return e.deleteDatabase()}};var kt=null;function St(e){var t=null;return null!==kt?kt:kt=Promise.all([ht.isSupported(),vt.isSupported()]).then((function(n){var r=l(n,2),o=r[0],i=r[1];if(rt.setCustomName(e),o){gt=yt.indexedDB;var a=new ht;return a.setCustomName(e).then((function(){return t=a}))}return i?(gt=yt.localStorage,t=new vt,Promise.resolve(t)):(X.error("There is no storage available, app will run with minimum set of features"),gt=yt.noStorage,t=null,Promise.resolve(t))})).then((function(){return{type:gt,storage:t}}))}const wt=a({init:St,getType:function(){return gt}},(Pt=T(bt).map((function(e){var t=l(e,2),n=t[0],r=t[1];return[n,function(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),o=1;o2&&void 0!==arguments[2]&&arguments[2]?"CONTINUE":"RETRY",response:O(e.responseText)?JSON.parse(e.responseText):e.responseText,message:y[t],code:t}}function Nt(e,t){var n=e.slice(0,e.length-t.length-1).split("").reduce((function(e){return e.concat(" ")}),"");return"".concat(t).concat(n,":")}function It(e,t){var n="REQUEST PARAMETERS:",r=function(e){return e.replace(/([A-Z])/g,(function(e){return"_".concat(e.toLowerCase())}))},o=T(a(a(a({},oe.getBaseParams()),t),e)).map((function(e){var t=l(e,2),n=t[0],o=t[1];return[r(n),o]}));return X.log(n),o.filter((function(e){return B(l(e,2)[1])})).map((function(e){var t=l(e,2),r=t[0],o=t[1];return X.log(Nt(n,r),o),function(e){var t=l(e,2),n=t[0],r=t[1],o=encodeURIComponent(n),i=r;return"string"==typeof r&&(i=encodeURIComponent(r)),I(r)&&(i=encodeURIComponent(JSON.stringify(r)||"")),[o,i].join("=")}([r,o])})).join("&")}function Ot(e,t,n){var r=n.xhr,o=n.url;if(4===r.readyState){var i=r.status>=200&&r.status<300,a=O(r.responseText);if(0!==r.status)return a?t(i?function(e,t){var n=JSON.parse(e.responseText),r={status:"success",adid:n.adid,timestamp:n.timestamp,ask_in:n.ask_in,retry_in:n.retry_in,continue_in:n.continue_in,tracking_state:n.tracking_state,attribution:void 0,message:void 0};return E(t,"attribution")&&(r.attribution=n.attribution,r.message=n.message),T(r).filter((function(e){return!!l(e,2)[1]})).reduce(R,{})}(r,o):xt(r,"SERVER_CANNOT_PROCESS",!0)):e(xt(r,i?"SERVER_MALFORMED_RESPONSE":"SERVER_INTERNAL_ERROR"));e(xt(r,"NO_CONNECTION"))}}function jt(e,t){var n=e.endpoint,r=e.url,o=e.method,i=void 0===o?"GET":o,a=e.params,u=function(e,t){var n=e.endpoint,r=e.url,o=e.method,i=It(e.params,t);return{fullUrl:n+r+("GET"===o?"?".concat(i):""),encodedParams:i}}({endpoint:n,url:r,method:i,params:void 0===a?{}:a},t),s=u.fullUrl,c=u.encodedParams;return new Promise((function(e,t){var n=new XMLHttpRequest;n.open(i,s,!0),function(e,t){var n="REQUEST HEADERS:",r=[["Client-SDK","js".concat(L.version)],["Content-Type","POST"===t?"application/x-www-form-urlencoded":"application/json"]];X.log(n),r.forEach((function(t){var r=l(t,2),o=r[0],i=r[1];e.setRequestHeader(o,i),X.log(Nt(n,o),i)}))}(n,i),n.onreadystatechange=function(){return Ot(t,e,{xhr:n,url:r})},n.onerror=function(){return t(xt(n,"TRANSACTION_ERROR"))},n.send("GET"===i?void 0:c)}))}function At(e,t){return"success"===e.status?function(e,t){var n=E(t,"gdpr_forget_device"),r=E(t,"attribution"),o=E(t,"session"),i=E(t,"disable_third_party_sharing"),a="opted_out"===e.tracking_state;if(!n&&a)return tt("sdk:gdpr-forget-me"),e;r||n||a||!e.ask_in||tt("attribution:check",e);o&&tt("session:finished",e);if(i)return tt("sdk:third-party-sharing-opt-out"),e;return e}(e,t):e}var Ct={long:{delay:2*p,maxDelay:h,minRange:.5,maxRange:1},short:{delay:200,maxDelay:m,minRange:.5,maxRange:1},test:{delay:100,maxDelay:300}};function Et(e,t){var n,r,o=Ct[t=t||"long"],i=o.delay*Math.pow(2,e-1);return i=Math.min(i,o.maxDelay),o.minRange&&o.maxRange&&(i*=(n=o.minRange,r=o.maxRange,Math.random()*(r-n)+n)),Math.round(i)}var Rt=navigator.onLine;function Tt(){Rt=!0}function _t(){Rt=!1}function Bt(e,t,n){e.addEventListener&&e.addEventListener(t,n,!1)}function Kt(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)}var Lt=function(e){return e.Default="default",e.India="india",e.China="china",e}(Lt||{}),qt=function(e){return e.EU="EU",e.TR="TR",e.US="US",e}(qt||{});function Ut(e,t){X.warn("Both ".concat(e," and ").concat(t," are set in config, ").concat(t," will be ignored"))}var Mt=o(o(o(o(o(o({},Lt.Default,k),Lt.India,S),Lt.China,w),qt.EU,P),qt.TR,D),qt.US,x);function Ft(e){var t,n,r,o,i=(t=oe.getCustomConfig(),n=t.customUrl,r=t.urlStrategy,o=t.dataResidency,n?((o||r)&&Ut("customUrl",o?"dataResidency":"urlStrategy"),{app:n,gdpr:n}):(o&&r&&Ut("dataResidency","urlStrategy"),o?[o]:r===Lt.India?[Lt.India,Lt.Default]:r===Lt.China?[Lt.China,Lt.Default]:[Lt.Default,Lt.India,Lt.China]));return Array.isArray(i)?i.map((function(t){return e[t]||null})).filter((function(e){return!!e})):[i]}var Gt=150,Vt=2147483647,Wt=60*f;const Ht=function(){var e,t,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=n.url,o=n.method,i=void 0===o?"GET":o,u=n.params,s=void 0===u?{}:u,c=n.continueCb,d=n.strategy,f=n.wait,p={url:r,method:i,params:s,continueCb:c},m=r,h=i,v=a({},s),g=c,b=d,k=function(){e.reset(),t=e.next()},S=function(e,t){return e["/gdpr_forget_device"===t?"gdpr":"app"]},w=null,P={request:0,connection:0},D=I(f),x=null;function I(e){return(e=e||Gt)>Vt?Vt:e}function O(n){var r=n.wait,o=n.retrying;return e||(e=function(){var e=Ft(arguments.length>0&&void 0!==arguments[0]?arguments[0]:Mt),t=0;return{next:function(){return t0&&void 0!==arguments[0]?arguments[0]:{},t=e.url,n=e.method,r=e.params,o=void 0===r?{}:r,i=e.continueCb,u=e.wait;return function(e){var t=e.url,n=e.method,r=e.params,o=e.continueCb;t&&(m=t),n&&(h=n),N(r)||(v=a({},r)),v=a({createdAt:Le()},v),"function"==typeof o&&(g=o)}({url:t,method:n,params:o,continueCb:i}),O({wait:u})},isRunning:function(){return!!w},clear:K}};var Yt=function(e){return e===g?"GDPR disable":"disable"},zt=function(e){return{start:{inProgress:"Adjust SDK ".concat(Yt(e)," process has already started"),done:"Adjust SDK ".concat(Yt(e)," process is now started")},finish:{inProgress:"Adjust SDK ".concat(Yt(e)," process has already finished"),done:"Adjust SDK ".concat(Yt(e)," process is now finished")}}};function Jt(e,t){var n=e.reason,r=e.pending,o=st()||{},i="start"===t&&o.pending?"start":"finish",a="start"===t&&o.reason,u="finish"===t&&o.reason&&!o.pending;return a||u?(X.log(zt(o.reason)[i].inProgress),!1):(X.log(zt(n)[i].done),ct({reason:n||v,pending:r}),!0)}function Qt(e){return Jt({reason:e,pending:arguments.length>1&&void 0!==arguments[1]&&arguments[1]||!1},"start")}function Xt(){var e=st()||{};return e.reason===v||e.reason===g&&!e.pending?"off":e.reason===g&&e.pending?"paused":"on"}var Zt="activityState",$t=!1;function en(e){return e?"unknown"===e.uuid?(Qt({reason:g}),Xe.destroy(),{exists:!0,stored:null}):(Xe.init(e),{exists:!0,stored:e}):{exists:!1}}function tn(){return"off"!==Xt()&&Xe.isStarted()}function nn(){if(!tn())return Promise.resolve(null);var e=a(a({},Xe.current),{},{lastActive:Date.now()});return wt.updateItem(Zt,e).then((function(){return Xe.current=e}))}var rn=Ht({strategy:"long",continueCb:function(e,t){var n=e&&e.continue_in||null;return un.pause=n?{timestamp:Date.now(),wait:n}:null,wt.getFirst(an).then((function(e){return e?wt.deleteItem(an,e.timestamp):null})).then((function(){return t(),un.running=!1,dn({wait:n})}))}}),on=!1,an="queue",un={running:!1,timestamp:null,pause:null};function sn(){var e=Date.now();return un.timestamp&&e<=un.timestamp&&(e=un.timestamp+1),un.timestamp=e,e}function cn(e){var t=e.url,n=e.method,r=e.params,o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=o.auto,u=o.timestamp;Xe.updateParams(t,i);var s=T(r||{}).filter((function(e){return B(l(e,2)[1])})).reduce(R,{}),c={timestamp:sn(),url:t,method:n,params:a(a({},Xe.getParams(t)),s)};return u&&(c.createdAt=u),wt.addItem(an,c).then((function(){return function(e){return E(e,"session")&&Xe.resetSessionOffset(),Xe.updateLastActive(),nn()}(t)})).then((function(){return un.running?{}:dn()}))}function ln(){var e=un.pause||{},t=e.timestamp,n=e.wait,r=Date.now()-(t||0);return r0&&void 0!==arguments[0]?arguments[0]:{},t=e.cleanUp,n=e.wait;if(un.running)return Promise.resolve({});un.running=!0;var r=Promise.resolve({});return t&&(r=r.then(pn)),r.then((function(){return wt.getFirst(an)})).then((function(e){return function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.timestamp,n=e.createdAt,r=e.url,o=e.method,i=e.params,u=arguments.length>1?arguments[1]:void 0,s=Xe.current||{},c="/session"===r&&!s.installed;return on&&!c||!r&&!o&&!i?(un.running=!1,Promise.resolve({})):rn.send({url:r,method:o,params:a(a({},i),{},{createdAt:Le(n||t)}),wait:u||ln()})}(e,n)}))}function fn(e){if(void 0!==e)if(e!==on){var t=on;on=e,!e&&t&&dn(),X.info("The app is now in ".concat(e?"offline":"online"," mode"))}else X.error("The app is already in ".concat(e?"offline":"online"," mode"));else X.error("State not provided, true or false has to be defined")}function pn(){var e=Date.now()-oe.requestValidityWindow;return wt.deleteBulk(an,e,"upperBound")}var mn="globalParams",hn={short:"No type provided",long:"Global parameter type not provided, `callback` or `partner` types are available"};function vn(e){return(e||[]).map((function(e){return{key:e.key,value:e.value}}))}function gn(){return Promise.all([wt.filterBy(mn,"callback"),wt.filterBy(mn,"partner")]).then((function(e){var t=l(e,2),n=t[0],r=t[1];return{callbackParams:vn(n),partnerParams:vn(r)}}))}function yn(e,t){if(void 0===t)return X.error(hn.long),Promise.reject({message:hn.short});var n=A(e),r=Object.keys(n).map((function(e){return{key:e,value:n[e],type:t}}));return Promise.all([wt.filterBy(mn,t),wt.addBulk(mn,r,!0)]).then((function(e){var n=l(e,2),o=n[0],i=n[1],a=C(o.map((function(e){return e.key})),i.map((function(e){return e[0]})));return X.log("Following ".concat(t," parameters have been saved: ").concat(r.map((function(e){return"".concat(e.key,":").concat(e.value)})).join(", "))),a.length&&X.log("Keys: ".concat(a.join(", ")," already existed so their values have been updated")),i}))}function bn(e,t){return void 0===t?(X.error(hn.long),Promise.reject({message:hn.short})):wt.deleteItem(mn,[e,t]).then((function(n){return X.log("".concat(e," ").concat(t," parameter has been deleted")),n}))}function kn(e){return void 0===e?(X.error(hn.long),Promise.reject({message:hn.short})):wt.deleteBulk(mn,e).then((function(t){return X.log("All ".concat(e," parameters have been deleted")),t}))}var Sn,wn,Pn,Dn=!1,xn=document;function Nn(){return Pn=function(){var e=document;if(void 0!==e.hidden)return{hidden:"hidden",visibilityChange:"visibilitychange"};for(var t=T({mozHidden:"mozvisibilitychange",msHidden:"msvisibilitychange",oHidden:"ovisibilitychange",webkitHidden:"webkitvisibilitychange"}),n=0;n0;return!n||n&&t*f>=oe.sessionWindow?gn().then((function(e){var t,n,r;cn({url:"/session",method:"POST",params:(t=e,n=t.callbackParams,r=t.partnerParams,{callbackParams:n.length?A(n):null,partnerParams:r.length?A(r):null})},{auto:!0})})):(tt("attribution:check"),nn())}var Tn=Ht({url:"/attribution",strategy:"short",continueCb:function(e,t,n){if(!e||e&&"error"===e.status)return t(),Promise.resolve({state:"unknown"});if(!e.ask_in)return t(),function(e){if(N(e)||!function(e){var t=e.adid,n=void 0===t?"":t,r=e.attribution,o=void 0===r?{}:r;return!!n&&!!C(_n,Object.keys(o)).length}(e)||function(e){var t=e.adid,n=e.attribution,r=Xe.current.attribution||{},o=n&&_n.some((function(e){return r[e]!==n[e]}));return!o&&t===r.adid}(e))return Promise.resolve({state:"same"});var t=T(e.attribution).filter((function(e){var t=l(e,1)[0];return-1!==_n.indexOf(t)})).reduce(R,{adid:e.adid});return Xe.current=a(a({},Xe.current),{},{attribution:t}),nn().then((function(){return tt("attribution:change",t),X.info("Attribution has been updated"),{state:"changed"}}))}(e);return n(e.ask_in)}}),_n=["tracker_token","tracker_name","network","campaign","adgroup","creative","click_label","state"];var Bn=Ht({url:"/gdpr_forget_device",method:"POST",strategy:"short"}),Kn={running:"Adjust SDK is running pending GDPR Forget Me request",pending:"Adjust SDK will run GDPR Forget Me request after initialisation",paused:"Adjust SDK is already prepared to send GDPR Forget Me request",off:"Adjust SDK is already disabled"};function Ln(e){var t=Xt();return e||"on"===t?oe.isInitialised()?(Bn.send({params:a({},Xe.getParams())}).then((function(){tt("sdk:gdpr-forget-me")})),!0):(X.log(Kn.pending),!0):(X.log(Kn[t]),!1)}function qn(){return Jt({reason:g,pending:!1},"finish")}var Un={running:"Adjust SDK is running pending third-party sharing opt-out request",delayed:"Adjust SDK will run third-party sharing opt-out request after initialisation",pending:"Adjust SDK already queued third-party sharing opt-out request",off:"Third-party sharing opt-out is already done",start:{inProgress:"Third-party sharing opt-out has already started",done:"Third-party sharing opt-out is now started"},finish:{inProgress:"Third-party sharing opt-out has already finished",done:"Third-party sharing opt-out is now finished"}};function Mn(){var e=lt()||{};return e.reason?e.pending?"pending":"off":"on"}function Fn(e){var t=Mn();return e||"on"===t?oe.isInitialised()?(cn({url:"/disable_third_party_sharing",method:"POST"}),!0):(X.log(Un.delayed),!0):(X.log(Un[t]),!1)}function Gn(e,t){var n,r,o=lt()||{},i="start"===t&&e?"start":"finish",u="start"===t&&o.reason,s="finish"===t&&o.reason&&!o.pending;return u||s?(X.log(Un[i].inProgress),!1):(X.log(Un[i].done),r=(n={reason:v,pending:e})?a({},n):null,rt.stores[ot]=a(a({},at()),{},{thirdPartySharingDisabled:r}),ut(),!0)}function Vn(){return Gn(!1,"finish")}function Wn(){"pending"===Mn()&&(X.log(Un.running),Fn(!0))}var Hn=[];function Yn(e,t){Hn.push({method:e,description:t,timestamp:Date.now()})}var zn=10,Jn="eventDeduplication";function Qn(e,t){var n,r,o=t.callbackParams,i=t.partnerParams,u={},s=a({eventToken:e.eventToken,deduplicationId:e.deduplicationId},(n=e.revenue,r=e.currency,isNaN(n)||(n=parseFloat(n))<0||!r?{}:{revenue:n.toFixed(5),currency:r})),c=a(a({},A(o)),A(e.callbackParams)),l=a(a({},A(i)),A(e.partnerParams));return N(c)||(u.callbackParams=c),N(l)||(u.partnerParams=l),a(a({},s),u)}function Xn(e){return e?wt.getAll(Jn).then((function(e){return e.map((function(e){return e.id}))})).then((function(t){return-1===t.indexOf(e)?function(e){var t=oe.getCustomConfig().eventDeduplicationListLimit,n=t>0?t:zn;return wt.count(Jn).then((function(e){var t=Promise.resolve();if(e>=n){var r=e-n+1;X.log("Event deduplication list limit has been reached. Oldest ids are about to be removed (".concat(r," of them)")),t=wt.trimItems(Jn,r)}return t})).then((function(){return X.info("New event deduplication id is added to the list: ".concat(e)),wt.addItem(Jn,{id:e})}))}(e):Promise.reject({message:"Event won't be tracked, since it was previously tracked with the same deduplication id ".concat(e)})})):Promise.resolve()}function Zn(e){return{clickTime:Le(),source:"web_referrer",referrer:decodeURIComponent(e)}}function $n(e,t){var n;(n=e||window.location.search.substring(1).split("&").map((function(e){return e.split("=")})).reduce(R,{}).adjust_referrer)&&cn({url:"/sdk_click",method:"POST",params:Zn(n)},{timestamp:t})}var er=["logLevel","logOutput"],tr=null,nr=!1,rr=!1,or=!1;function ir(){Fn()&&Gn(!0,"start")}function ar(){var e;"paused"===Xt()&&(qn(),Promise.all([(e={uuid:"unknown"},Xe.current=e,wt.clear(Zt).then((function(){return wt.addItem(Zt,e)}))),wt.clear(mn),wt.clear(an)]).then(lr))}function ur(){return nr||oe.isInitialised()}function sr(){nr=!1,rr=!1,Hn=[],rn.clear(),un.running=!1,un.timestamp=null,un.pause=null,Dn=!1,Xe.toBackground(),En(),Pn&&(clearTimeout(wn),Kt(xn,Pn.visibilityChange,jn),Bt(xn,Pn.visibilityChange,An)),Tn.clear()}function cr(e){e&&X.log("Adjust SDK has been shutdown due to asynchronous disable"),sr(),$e.forEach(clearTimeout),$e=[],Ze={},Xe.destroy(),Kt(window,"online",Tt),Kt(window,"offline",_t),wt.destroy(),oe.destroy()}function lr(){or=!1,cr(),Bn.clear(),tr=null,X.log("Adjust SDK instance has been destroyed")}function dr(e){X.log("Adjust SDK is starting with web_uuid set to ".concat(e.uuid));var t=Xe.current.installed;"paused"===Xt()&&(X.log(Kn.running),Ln(!0)),t||Wn();var n=Xt(),r=function(e){return"Adjust SDK start has been interrupted ".concat(e)};return"off"===n?(cr(),Promise.reject({interrupted:!0,message:r("due to complete async disable")})):"paused"===n?(sr(),Promise.reject({interrupted:!0,message:r("due to partial async disable")})):rr?Promise.reject({interrupted:!0,message:r("due to multiple synchronous start attempt")}):(dn({cleanUp:!0}),Nn().then((function(){nr=!1,rr=!0,t&&(fr(),Wn())})))}function fr(){var e;or=!0,Hn.forEach((function(e){"function"==typeof e.method&&(X.log("Delayed ".concat(e.description," task is running now")),e.method(e.timestamp))})),Hn=[],(e="sdk:installed")&&T(Ze).some((function(t){var n=l(t,2)[1];return n.some((function(t,r){if(t.id===e)return n.splice(r,1),!0}))}))}function pr(e){if(e.interrupted)X.log(e.message);else if(cr(),X.error("Adjust SDK start has been canceled due to an error",e),e.stack)throw e}function mr(e){"off"!==Xt()?(oe.set(e),Bt(window,"online",Tt),Bt(window,"offline",_t),et("sdk:installed",fr),et("sdk:shutdown",(function(){return cr(!0)})),et("sdk:gdpr-forget-me",ar),et("sdk:third-party-sharing-opt-out",Vn),et("attribution:check",(function(e,t){return n=t,r=Xe.current,(o=(n||{}).ask_in)||!r.attribution&&r.installed?(Tn.send({params:a({initiatedBy:n?"backend":"sdk"},Xe.getParams()),wait:o}),Xe.updateSessionOffset(),nn()):Promise.resolve(r);var n,r,o})),"function"==typeof e.attributionCallback&&et("attribution:change",e.attributionCallback),($t?Promise.reject({interrupted:!0,message:"Adjust SDK start already in progress"}):($t=!0,wt.getFirst(Zt).then(en).then((function(e){if(e.exists)return $t=!1,e.stored;var t,n=N(Xe.current)?{uuid:(t=Date.now(),"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,(function(e){var n=(t+16*Math.random())%16|0;return t=Math.floor(t/16),("x"===e?n:11&n).toString(16)})))}:Xe.current;return wt.addItem(Zt,n).then((function(){return Xe.init(n),dt(),$t=!1,n}))})))).then(dr).then($n).catch(pr)):X.log("Adjust SDK is disabled, can not start the sdk")}function hr(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=n.schedule,o=n.waitForInitFinished,i=n.optionalInit;if(wt.getType()!==b.NO_STORAGE)if("on"===Xt())if(i||ur()||!o){if("function"==typeof t){if(!r||or&&rr||!i&&!ur())return t();Yn(t,e),X.log("Running ".concat(e," is delayed until Adjust SDK is up"))}}else X.error("Adjust SDK can not ".concat(e,", sdk instance is not initialized"));else X.log("Adjust SDK is disabled, can not ".concat(e));else X.log("Adjust SDK can not ".concat(e,", no storage available"))}const vr={initSdk:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.logLevel,n=e.logOutput,r=u(e,er);X.setLogLevel(t,n),ur()?X.error("You already initiated your instance"):oe.hasMissing(r)||(nr=!0,wt.init(r.namespace).then((function(e){e.type!==b.NO_STORAGE?(X.info("Available storage is ".concat(e.type)),tr=a({},r),mr(r)):X.error("Adjust SDK can not start, there is no storage available")})))},getAttribution:function(){return hr("get attribution",(function(){return Xe.getAttribution()}))},getWebUUID:function(){return hr("get web_uuid",(function(){return Xe.getWebUUID()}))},setReferrer:function(e){e&&"string"==typeof e?hr("setting reftag",(function(t){return $n(e,t)}),{schedule:!0,waitForInitFinished:!0,optionalInit:!0}):X.error("You must provide a string referrer")},trackEvent:function(e){return function(e){if(wt.getType()===b.NO_STORAGE){var t="Adjust SDK can not track event, no storage available";return X.log(t),Promise.reject(t)}if("on"!==Xt()){var n="Adjust SDK is disabled, can not track event";return X.log(n),Promise.reject(n)}if(!ur()){var r="Adjust SDK can not track event, sdk instance is not initialized";return X.error(r),Promise.reject(r)}return new Promise((function(t){var n=function(n){return t(function(e,t){if(!e||e&&(N(e)||!e.eventToken)){var n="You must provide event token in order to track event";return X.error(n),Promise.reject(n)}return Xn(e.deduplicationId).then(gn).then((function(n){return cn({url:"/event",method:"POST",params:Qn(e,n)},{timestamp:t})})).catch((function(e){return e&&e.message&&X.error(e.message),Promise.reject(e)}))}(e,n))};!or||!rr&&ur()?(Yn(n,"track event"),X.log("Running track event is delayed until Adjust SDK is up")):n()}))}(e)},addGlobalCallbackParameters:function(e){hr("add global callback parameters",(function(){return yn(e,"callback")}))},addGlobalPartnerParameters:function(e){hr("add global partner parameters",(function(){return yn(e,"partner")}))},removeGlobalCallbackParameter:function(e){hr("remove global callback parameter",(function(){return bn(e,"callback")}))},removeGlobalPartnerParameter:function(e){hr("remove global partner parameter",(function(){return bn(e,"partner")}))},clearGlobalCallbackParameters:function(){hr("remove all global callback parameters",(function(){return kn("callback")}))},clearGlobalPartnerParameters:function(){hr("remove all global partner parameters",(function(){return kn("partner")}))},switchToOfflineMode:function(){hr("set offline mode",(function(){return fn(!0)}))},switchBackToOnlineMode:function(){hr("set online mode",(function(){return fn(!1)}))},stop:function(){Qt()&&oe.isInitialised()&&cr()},restart:function(){var e;((e=st()||{}).reason===g?(X.log("Adjust SDK is disabled due to GDPR-Forget-Me request and it can not be re-enabled"),!1):e.reason?(X.log("Adjust SDK has been enabled"),ct(null),!0):(X.log("Adjust SDK is already enabled"),!1))&&tr&&mr(tr)},gdprForgetMe:function(){var e=Ln();e&&(e=Qt(g,!0))&&oe.isInitialised()&&sr()},disableThirdPartySharing:function(){hr("disable third-party sharing",ir,{schedule:!0})},initSmartBanner:function(){X.error("function `initSmartBanner` is deprecated")},showSmartBanner:function(){X.error("function `showSmartBanner` is deprecated")},hideSmartBanner:function(){X.error("function `hideSmartBanner` is deprecated")},__testonly__:{destroy:lr,clearDatabase:function(){return wt.deleteDatabase()}},__internal__:{restartAfterAsyncEnable:function(){X.log("Adjust SDK has been restarted due to asynchronous enable"),tr&&mr(tr)}}};return t=t.default})())); \ No newline at end of file diff --git a/dist/sdk.snippet-sri.min.js b/dist/sdk.snippet-sri.min.js index 70b0e11..15e7913 100644 --- a/dist/sdk.snippet-sri.min.js +++ b/dist/sdk.snippet-sri.min.js @@ -1 +1 @@ -!function(e,a,r,t,n,o,l,s,i,c,d){var m=l+"_q";e[l]=e[l]||{},e[m]=e[m]||[];for(var b=0;b Date: Tue, 9 Jul 2024 17:55:58 +0200 Subject: [PATCH 14/70] refactor: rename pub-sub module to .ts --- src/sdk/{pub-sub.js => pub-sub.ts} | 51 +++++++++--------------------- 1 file changed, 15 insertions(+), 36 deletions(-) rename src/sdk/{pub-sub.js => pub-sub.ts} (54%) diff --git a/src/sdk/pub-sub.js b/src/sdk/pub-sub.ts similarity index 54% rename from src/sdk/pub-sub.js rename to src/sdk/pub-sub.ts index fced6af..37d379a 100644 --- a/src/sdk/pub-sub.js +++ b/src/sdk/pub-sub.ts @@ -1,47 +1,33 @@ -// @flow -import {entries} from './utilities' +import { entries } from './utilities' -type CallbackT = {| +type CallbackWithId = { id: string, - cb: (string, T) => mixed -|} + cb: (name: string, arg?: T) => unknown +} /** * List of events with subscribed callbacks - * - * @type {Object} - * @private */ -let _list = {} +let _list: Record> = {} /** * Reference to timeout ids so they can be cleared on destroy - * - * @type {Array} - * @private */ -let _timeoutIds = [] +let _timeoutIds: Array> = [] /** * Get unique id for the callback to use for unsubscribe - * - * @returns {string} - * @private */ -function _getId (): string { - return 'id' + Math.random().toString(36).substr(2, 16) +function _getId(): string { + return 'id' + Math.random().toString(36).substring(2, 16) } /** * Subscribe to a certain event - * - * @param {string} name - * @param {Function} cb - * @returns {string} */ -function subscribe (name: string, cb: $PropertyType, 'cb'>): string { +function subscribe(name: string, cb: (name: string, arg: T) => unknown): string { const id = _getId() - const callback: CallbackT = {id, cb} + const callback: CallbackWithId = { id, cb } if (!_list[name]) { _list[name] = [] @@ -54,38 +40,31 @@ function subscribe (name: string, cb: $PropertyType, 'cb'>): str /** * Unsubscribe particular callback from an event - * - * @param {string} id */ -function unsubscribe (id: string): void { +function unsubscribe(id: string) { if (!id) { return } entries(_list) .some(([, callbacks]) => callbacks - .some((callback: CallbackT, i: number) => { + .some((callback: CallbackWithId, i: number) => { if (callback.id === id) { callbacks.splice(i, 1) - return true } })) } /** * Publish certain event with optional arguments - * - * @param {string} name - * @param {*} args - * @returns {Array} */ -function publish (name: string, args: T): void { +function publish(name: string, args?: T): void { if (!_list[name]) { return } _list[name] - .forEach((item: CallbackT) => { + .forEach((item: CallbackWithId) => { if (typeof item.cb === 'function') { _timeoutIds.push(setTimeout(() => item.cb(name, args))) } @@ -95,7 +74,7 @@ function publish (name: string, args: T): void { /** * Destroy all registered events with their callbacks */ -function destroy (): void { +function destroy(): void { _timeoutIds.forEach(clearTimeout) _timeoutIds = [] _list = {} From 85210d746a089c5c174f3b47064fa4d1ca9cdbea Mon Sep 17 00:00:00 2001 From: Yara Matkova Date: Tue, 9 Jul 2024 17:56:18 +0200 Subject: [PATCH 15/70] refactor: rename identity module to .ts --- src/sdk/{identity.js => identity.ts} | 106 ++++++++++----------------- 1 file changed, 40 insertions(+), 66 deletions(-) rename src/sdk/{identity.js => identity.ts} (59%) diff --git a/src/sdk/identity.js b/src/sdk/identity.ts similarity index 59% rename from src/sdk/identity.js rename to src/sdk/identity.ts index 10e190b..b7f069f 100644 --- a/src/sdk/identity.js +++ b/src/sdk/identity.ts @@ -1,80 +1,57 @@ -// @flow -import {type ActivityStateMapT} from './types' +import { type ActivityStateMapT } from './types' import Storage from './storage/storage' import ActivityState from './activity-state' -import {reload as reloadPreferences} from './preferences' -import {REASON_GDPR} from './constants' -import {isEmpty} from './utilities' -import {disable, status} from './disable' -import {publish} from './pub-sub' - -type InterceptT = {| +import { reload as reloadPreferences } from './preferences' +import { PUB_SUB_EVENTS, REASON_GDPR } from './constants' +import { isEmpty } from './utilities' +import { disable, status } from './disable' +import { publish } from './pub-sub' +import { StoreName } from './storage/scheme' + +type InterceptT = { exists: boolean, - stored?: ?ActivityStateMapT -|} + stored?: ActivityStateMapT +} -/** - * Name of the store used by activityState - * - * @type {string} - * @private - */ -const _storeName = 'activityState' +/** Name of the store used by activityState */ +const _storeName = StoreName.ActivityState -/** - * Boolean used in start in order to avoid duplicated activity state - * - * @type {boolean} - * @private - */ +/** Boolean used in start in order to avoid duplicated activity state */ let _starting: boolean = false -/** - * Generate random uuid v4 - * - * @returns {string} - * @private - */ -function _generateUuid (): string { +/** Generate random uuid v4 */ +function _generateUuid(): string { let seed = Date.now() return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => { const r = (seed + Math.random() * 16) % 16 | 0 seed = Math.floor(seed / 16) - return (c === 'x' ? r : r & (0x3|0x8)).toString(16) + return (c === 'x' ? r : r & (0x3 | 0x8)).toString(16) }) } -/** - * Inspect stored activity state and check if disable needs to be repeated - * - * @param {Object=} stored - * @returns {Object} - * @private - */ -function _intercept (stored: ActivityStateMapT): InterceptT { +/** Inspect stored activity state and check if disable needs to be repeated */ +function _intercept(stored: ActivityStateMapT): InterceptT { if (!stored) { - return {exists: false} + return { exists: false } } if (stored.uuid === 'unknown') { - disable({reason: REASON_GDPR}) + disable({ reason: REASON_GDPR }) ActivityState.destroy() - return {exists: true, stored: null} + return { exists: true, stored: null } } ActivityState.init(stored) - return {exists: true, stored: stored} + return { exists: true, stored: stored } } /** * Cache stored activity state into running memory - * - * @returns {Promise} */ -function start (): Promise { +function start(): Promise { if (_starting) { - return Promise.reject({interrupted: true, message: 'Adjust SDK start already in progress'}) + return Promise.reject({ interrupted: true, message: 'Adjust SDK start already in progress' }) } _starting = true @@ -87,7 +64,7 @@ function start (): Promise { } const activityState = isEmpty(ActivityState.current) - ? {uuid: _generateUuid()} + ? { uuid: _generateUuid() } : ActivityState.current return Storage.addItem(_storeName, activityState) @@ -98,29 +75,28 @@ function start (): Promise { return activityState }) }) + .then((activityState: ActivityStateMapT) => { + if (activityState) { + publish(PUB_SUB_EVENTS.WEB_UUID_CREATED, activityState.uuid) + } + return activityState + }) } -/** - * Check if sdk is running at all (totally disabled or inactive activity state) - * - * @returns {boolean} - * @private - */ -function _isLive () { +/** Check if sdk is running at all (totally disabled or inactive activity state) */ +function _isLive() { return status() !== 'off' && ActivityState.isStarted() } /** * Persist changes made directly in activity state and update lastActive flag - * - * @returns {Promise} */ -function persist (): Promise { +function persist(): Promise { if (!_isLive()) { return Promise.resolve(null) } - const activityState = {...ActivityState.current, lastActive: Date.now()} + const activityState = { ...ActivityState.current, lastActive: Date.now() } return Storage.updateItem(_storeName, activityState) .then(() => ActivityState.current = activityState) } @@ -128,10 +104,8 @@ function persist (): Promise { /** * Sync in-memory activityState with the one from store * - should be used when change from another tab is possible and critical - * - * @returns {Promise} */ -function sync (): Promise { +function sync(): Promise { return Storage.getFirst(_storeName) .then((activityState: ActivityStateMapT) => { const current = ActivityState.current @@ -157,8 +131,8 @@ function sync (): Promise { /** * Clear activity state store - set uuid to be unknown */ -function clear (): void { - const newActivityState = {uuid: 'unknown'} +function clear(): Promise { + const newActivityState = { uuid: 'unknown' } ActivityState.current = newActivityState @@ -169,7 +143,7 @@ function clear (): void { /** * Destroy current activity state */ -function destroy (): void { +function destroy(): void { ActivityState.destroy() } From 230e5645470ef6827e5534f98773e7b3fd33f83d Mon Sep 17 00:00:00 2001 From: Yara Matkova Date: Tue, 9 Jul 2024 17:57:11 +0200 Subject: [PATCH 16/70] feat: add pub-sub events contants --- src/sdk/constants.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/sdk/constants.js b/src/sdk/constants.js index b67b86e..431bd6f 100644 --- a/src/sdk/constants.js +++ b/src/sdk/constants.js @@ -52,3 +52,8 @@ export const ENDPOINTS = { gdpr: 'https://gdpr.us.adjust.com' } } + +export const PUB_SUB_EVENTS = { + WEB_UUID_CREATED: 'activity:web_uuid', + ATTRIBUTION_RECEIVED: 'activity:attribution', +} From 572a1bddd6cc0f3dbac06d7358be0663196d9638 Mon Sep 17 00:00:00 2001 From: Yara Matkova Date: Wed, 10 Jul 2024 12:01:56 +0200 Subject: [PATCH 17/70] feat: implement async getters --- src/sdk/activity-state.js | 98 ++++++++++++++++++++++++--------------- src/sdk/attribution.js | 2 + src/sdk/main.js | 20 ++++++++ 3 files changed, 83 insertions(+), 37 deletions(-) diff --git a/src/sdk/activity-state.js b/src/sdk/activity-state.js index 7e35d2e..c348213 100644 --- a/src/sdk/activity-state.js +++ b/src/sdk/activity-state.js @@ -5,11 +5,13 @@ import { type AttributionMapT, type CommonRequestParams } from './types' -import {SECOND} from './constants' -import {timePassed} from './time' -import {isRequest} from './utilities' +import { SECOND } from './constants' +import { timePassed } from './time' +import { isRequest } from './utilities' import Config from './config' import Logger from './logger' +import { subscribe } from './pub-sub' +import { PUB_SUB_EVENTS } from './constants' /** * Reference to the activity state @@ -41,8 +43,8 @@ let _active: boolean = false * * @returns {Object} */ -function currentGetter (): ActivityStateMapT { - return _started ? {..._activityState} : {} +function currentGetter(): ActivityStateMapT { + return _started ? { ..._activityState } : {} } /** @@ -50,8 +52,8 @@ function currentGetter (): ActivityStateMapT { * * @param {Object} params */ -function currentSetter (params: ActivityStateMapT = {}) { - _activityState = _started ? {...params} : {} +function currentSetter(params: ActivityStateMapT = {}) { + _activityState = _started ? { ...params } : {} } /** @@ -59,7 +61,7 @@ function currentSetter (params: ActivityStateMapT = {}) { * * @param {Object} params */ -function init (params: ActivityStateMapT) { +function init(params: ActivityStateMapT) { _started = true currentSetter(params) } @@ -69,7 +71,7 @@ function init (params: ActivityStateMapT) { * * @returns {boolean} */ -function isStarted () { +function isStarted() { return _started } @@ -78,7 +80,7 @@ function isStarted () { * * @private */ -function updateLastActive (): void { +function updateLastActive(): void { if (!_started) { return } @@ -93,21 +95,21 @@ function updateLastActive (): void { * @param {Object} params * @private */ -function _update (params: ActivityStateMapT): void { - _activityState = {..._activityState, ...params} +function _update(params: ActivityStateMapT): void { + _activityState = { ..._activityState, ...params } } /** * Set active flag to true when going foreground */ -function toForeground (): void { +function toForeground(): void { _active = true } /** * Set active flag to false when going background */ -function toBackground (): void { +function toBackground(): void { _active = false } @@ -117,7 +119,7 @@ function toBackground (): void { * @returns {number} * @private */ -function _getOffset (): number { +function _getOffset(): number { const lastActive = _activityState.lastActive return Math.round(timePassed(lastActive, Date.now()) / SECOND) } @@ -128,7 +130,7 @@ function _getOffset (): number { * @returns {number} * @private */ -function _getTimeSpent (): number { +function _getTimeSpent(): number { return (_activityState.timeSpent || 0) + (_active ? _getOffset() : 0) } @@ -138,7 +140,7 @@ function _getTimeSpent (): number { * @returns {number} * @private */ -function _getSessionLength (): number { +function _getSessionLength(): number { const lastActive = _activityState.lastActive const withinWindow = timePassed(lastActive, Date.now()) < Config.sessionWindow const withOffset = _active || !_active && withinWindow @@ -152,7 +154,7 @@ function _getSessionLength (): number { * @returns {number} * @private */ -function _getSessionCount (): number { +function _getSessionCount(): number { return _activityState.sessionCount || 0 } @@ -162,7 +164,7 @@ function _getSessionCount (): number { * @returns {number} * @private */ -function _getEventCount (): number { +function _getEventCount(): number { return _activityState.eventCount || 0 } @@ -172,7 +174,7 @@ function _getEventCount (): number { * @returns {number} * @private */ -function _getLastInterval (): number { +function _getLastInterval(): number { const lastActive = _activityState.lastActive if (lastActive) { @@ -185,7 +187,7 @@ function _getLastInterval (): number { /** * Initiate session params and go to foreground */ -function initParams (): void { +function initParams(): void { updateSessionOffset() toForeground() } @@ -195,7 +197,7 @@ function initParams (): void { * * @returns {Object} */ -function getParams (url?: UrlT): ?CommonRequestParams { +function getParams(url?: UrlT): ?CommonRequestParams { if (!_started) { return null } @@ -222,7 +224,7 @@ function getParams (url?: UrlT): ?CommonRequestParams { * @param {string} url * @param {boolean=false} auto */ -function updateParams (url: string, auto?: boolean): void { +function updateParams(url: string, auto?: boolean): void { if (!_started) { return } @@ -249,7 +251,7 @@ function updateParams (url: string, auto?: boolean): void { /** * Update installed flag - first session has been finished */ -function updateInstalled (): void { +function updateInstalled(): void { if (!_started) { return } @@ -258,13 +260,13 @@ function updateInstalled (): void { return } - _update({installed: true}) + _update({ installed: true }) } /** * Update session params which depend on the time offset since last measure point */ -function updateSessionOffset (): void { +function updateSessionOffset(): void { if (!_started) { return } @@ -272,45 +274,45 @@ function updateSessionOffset (): void { const timeSpent = _getTimeSpent() const sessionLength = _getSessionLength() - _update({timeSpent, sessionLength}) + _update({ timeSpent, sessionLength }) updateLastActive() } /** * Update session length */ -function updateSessionLength (): void { +function updateSessionLength(): void { if (!_started) { return } const sessionLength = _getSessionLength() - _update({sessionLength}) + _update({ sessionLength }) updateLastActive() } /** * Reset time spent and session length to zero */ -function resetSessionOffset (): void { +function resetSessionOffset(): void { if (!_started) { return } - _update({timeSpent: 0, sessionLength: 0}) + _update({ timeSpent: 0, sessionLength: 0 }) } /** * Destroy current activity state */ -function destroy (): void { +function destroy(): void { _activityState = {} _started = false _active = false } -function getAttribution (): AttributionMapT | null { +function getAttribution(): AttributionMapT | null { if (!_started) { return null } @@ -323,7 +325,17 @@ function getAttribution (): AttributionMapT | null { return _activityState.attribution } -function getWebUUID (): string { +function waitForAttribution(): Promise { + if (_activityState.attribution) { + return Promise.resolve(_activityState.attribution) + } + + return new Promise(resolve => + subscribe(PUB_SUB_EVENTS.ATTRIBUTION_RECEIVED, (_name: string, attribution: AttributionMapT) => resolve(attribution)) + ) +} + +function getWebUUID(): string { if (!_started) { return null } @@ -331,9 +343,19 @@ function getWebUUID (): string { return _activityState.uuid } +function waitForWebUUID(): Promise { + if (_activityState.uuid) { + return Promise.resolve(_activityState.uuid) + } + + return new Promise(resolve => + subscribe(PUB_SUB_EVENTS.WEB_UUID_CREATED, (_name: string, webUuid: string) => resolve(webUuid)) + ) +} + const ActivityState = { - get current () { return currentGetter() }, - set current (value) { currentSetter(value) }, + get current() { return currentGetter() }, + set current(value) { currentSetter(value) }, init, isStarted, toForeground, @@ -348,7 +370,9 @@ const ActivityState = { updateLastActive, destroy, getAttribution, - getWebUUID + getWebUUID, + waitForAttribution, + waitForWebUUID } export default ActivityState diff --git a/src/sdk/attribution.js b/src/sdk/attribution.js index 63d85fa..9ef83d0 100644 --- a/src/sdk/attribution.js +++ b/src/sdk/attribution.js @@ -15,6 +15,7 @@ import {persist} from './identity' import ActivityState from './activity-state' import Logger from './logger' import Request from './request' +import { PUB_SUB_EVENTS } from './constants' /** * Http request instance @@ -92,6 +93,7 @@ function _setAttribution (result: HttpSuccessResponseT): Promise { publish('attribution:change', attribution) + publish(PUB_SUB_EVENTS.ATTRIBUTION_RECEIVED, attribution) Logger.info('Attribution has been updated') return {state: 'changed'} }) diff --git a/src/sdk/main.js b/src/sdk/main.js index 81968f7..2637c9b 100644 --- a/src/sdk/main.js +++ b/src/sdk/main.js @@ -102,20 +102,38 @@ function initSdk({ logLevel, logOutput, ...options }: InitConfigT = {}): void { * Get user's current attribution information * * @returns {AttributionMapT|undefined} current attribution information if available or `undefined` otherwise + * + * @deprecated Use {@link waitForAttribution} instead */ function getAttribution(): ?AttributionMapT { return _preCheck('get attribution', () => ActivityState.getAttribution()) } +/** + * Returns a promise which resolves when current attribution information becomes available + */ +function waitForAttribution(): Promise { + return _preCheck('get attribution', () => ActivityState.waitForAttribution(), {schedule: false}) +} + /** * Get `web_uuid` - a unique ID of user generated per subdomain and per browser * * @returns {string|undefined} `web_uuid` if available or `undefined` otherwise + * + * @deprecated Use {@link waitForWebUUID} instead */ function getWebUUID(): ?string { return _preCheck('get web_uuid', () => ActivityState.getWebUUID()) } +/** + * Returns a promise which resolves when `web_uuid` becomes available + */ +function waitForWebUUID() { + return _preCheck('get web_uuid', () => ActivityState.waitForWebUUID(), {schedule: false}) +} + function setReferrer(referrer: string) { if (!referrer || typeof referrer !== 'string') { Logger.error('You must provide a string referrer') @@ -569,6 +587,8 @@ const Adjust = { initSdk, getAttribution, getWebUUID, + waitForAttribution, + waitForWebUUID, setReferrer, trackEvent, addGlobalCallbackParameters, From 08ab2bcbcd33b15cf5d8fd29c400bdad10816955 Mon Sep 17 00:00:00 2001 From: Yara Matkova Date: Wed, 10 Jul 2024 13:28:20 +0200 Subject: [PATCH 18/70] test: update checks --- src/sdk/__tests__/attribution.spec.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/sdk/__tests__/attribution.spec.js b/src/sdk/__tests__/attribution.spec.js index 3f272e8..d5d4479 100644 --- a/src/sdk/__tests__/attribution.spec.js +++ b/src/sdk/__tests__/attribution.spec.js @@ -6,6 +6,7 @@ import * as Identity from '../identity' import * as ActivityState from '../activity-state' import * as Logger from '../logger' import * as Storage from '../storage/storage' +import { PUB_SUB_EVENTS } from '../constants' jest.mock('../http') jest.mock('../logger') @@ -537,7 +538,7 @@ describe('test attribution functionality', () => { ActivityState.default.current = {installed: 1} http.default.mockResolvedValue(newAttribution) - expect.assertions(8) + expect.assertions(9) Attribution.check({ask_in: 2000}) // initiate another attribution call @@ -555,8 +556,9 @@ describe('test attribution functionality', () => { expect(activityState.attribution).toEqual(formatted) expect(ActivityState.default.current.attribution).toEqual(formatted) expect(Identity.persist).toHaveBeenCalledTimes(3) - expect(PubSub.publish).toHaveBeenCalledTimes(1) + expect(PubSub.publish).toHaveBeenCalledTimes(2) expect(PubSub.publish).toHaveBeenCalledWith('attribution:change', formatted) + expect(PubSub.publish).toHaveBeenCalledWith(PUB_SUB_EVENTS.ATTRIBUTION_RECEIVED, formatted) }) }) From 1e48059d7c00cbc613ae6e1ca1b94c731b93eebf Mon Sep 17 00:00:00 2001 From: Yara Matkova Date: Wed, 10 Jul 2024 13:28:50 +0200 Subject: [PATCH 19/70] feat: update getters usage in demo app --- src/demo/get-attribution/get-attribution.html | 4 ++-- src/demo/get-attribution/get-attribution.js | 13 ++++++------- src/demo/get-web-uuid/get-web-uuid.html | 4 ++-- src/demo/get-web-uuid/get-web-uuid.js | 13 ++++++------- 4 files changed, 16 insertions(+), 18 deletions(-) diff --git a/src/demo/get-attribution/get-attribution.html b/src/demo/get-attribution/get-attribution.html index 4fb0d2d..6b9b85c 100644 --- a/src/demo/get-attribution/get-attribution.html +++ b/src/demo/get-attribution/get-attribution.html @@ -1,10 +1,10 @@
- +
-
Adjust.getAttribution()
+
Adjust.waitForAttribution()
diff --git a/src/demo/get-attribution/get-attribution.js b/src/demo/get-attribution/get-attribution.js index 1f60188..5bf6095 100644 --- a/src/demo/get-attribution/get-attribution.js +++ b/src/demo/get-attribution/get-attribution.js @@ -2,14 +2,13 @@ import Adjust from '../../sdk/main' import SimpleAction from '../simple-action' import { write } from '../log' -function init () { +function init() { SimpleAction('get-attr', () => { - const attr = Adjust.getAttribution() - - if (attr) { - write('Attribution:') - write(JSON.stringify(attr, undefined, 2)) - } + Adjust.waitForAttribution() + .then(attr => { + write('Attribution:') + write(JSON.stringify(attr, undefined, 2)) + }) })() } diff --git a/src/demo/get-web-uuid/get-web-uuid.html b/src/demo/get-web-uuid/get-web-uuid.html index 598c7a8..0159b05 100644 --- a/src/demo/get-web-uuid/get-web-uuid.html +++ b/src/demo/get-web-uuid/get-web-uuid.html @@ -1,10 +1,10 @@
- +
-
Adjust.getWebUUID()
+
Adjust.waitForWebUUID()
diff --git a/src/demo/get-web-uuid/get-web-uuid.js b/src/demo/get-web-uuid/get-web-uuid.js index 6a913ff..8e23797 100644 --- a/src/demo/get-web-uuid/get-web-uuid.js +++ b/src/demo/get-web-uuid/get-web-uuid.js @@ -2,14 +2,13 @@ import Adjust from '../../sdk/main' import SimpleAction from '../simple-action' import { write } from '../log' -function init () { +function init() { SimpleAction('get-web-uuid', () => { - const web_uuid = Adjust.getWebUUID() - - if (web_uuid) { - write('Web UUID:') - write(web_uuid) - } + Adjust.waitForWebUUID() + .then(web_uuid => { + write('Web UUID:') + write(web_uuid) + }) })() } From 62484bed92b58083ff756a675d13b807f2d55cc0 Mon Sep 17 00:00:00 2001 From: Yara Matkova Date: Wed, 10 Jul 2024 14:40:12 +0200 Subject: [PATCH 20/70] chore: update SDK type declarations --- dist/adjust-latest.d.ts | 14 ++++++++++++++ src/sdk/main.js | 2 +- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/dist/adjust-latest.d.ts b/dist/adjust-latest.d.ts index 666e836..b5a9f1b 100644 --- a/dist/adjust-latest.d.ts +++ b/dist/adjust-latest.d.ts @@ -206,9 +206,16 @@ declare namespace Adjust { * * @example * const attribution = Adjust.getAttribution(); + * + * @deprecated Use {@link waitForAttribution} instead */ function getAttribution(): Attribution | undefined + /** + * Returns a promise which resolves when current attribution information becomes available + */ + function waitForAttribution(): Promise + /** * Get web_uuid - a unique ID of user generated per subdomain and per browser * @@ -216,9 +223,16 @@ declare namespace Adjust { * * @example * const webUuid = Adjust.getWebUUID(); + * + * @deprecated Use {@link waitForWebUUID} instead */ function getWebUUID(): string | undefined + /** + * Returns a promise which resolves when `web_uuid` becomes available + */ + function waitForWebUUID(): Promise + /** * Set referrer manually. Please note that `referrer` should be URL-encoded. * diff --git a/src/sdk/main.js b/src/sdk/main.js index 2637c9b..233eea8 100644 --- a/src/sdk/main.js +++ b/src/sdk/main.js @@ -130,7 +130,7 @@ function getWebUUID(): ?string { /** * Returns a promise which resolves when `web_uuid` becomes available */ -function waitForWebUUID() { +function waitForWebUUID(): Promise { return _preCheck('get web_uuid', () => ActivityState.waitForWebUUID(), {schedule: false}) } From f43ed820b62552f1cc41de634b1668557f8bd833 Mon Sep 17 00:00:00 2001 From: Yara Matkova Date: Wed, 10 Jul 2024 14:44:03 +0200 Subject: [PATCH 21/70] build: update production files --- dist/INTEGRITY | 2 +- dist/adjust-latest.js | 308 ++++++++++++++++++------------------ dist/adjust-latest.min.js | 2 +- dist/sdk.snippet-sri.min.js | 2 +- dist/sdk.snippet.min.js | 2 +- src/snippet.js | 2 + 6 files changed, 161 insertions(+), 157 deletions(-) diff --git a/dist/INTEGRITY b/dist/INTEGRITY index 494592a..c130395 100644 --- a/dist/INTEGRITY +++ b/dist/INTEGRITY @@ -1 +1 @@ -sha384-R8+wBSENIf+LVn3v1iqOc68PRp1tW0f/ZI4fw+yR9odK74FLXFighOtkXQNPg2qR \ No newline at end of file +sha384-6ypaiRbayulK9Pc5tI+DbtfndaV381c5P1cjXBG9Z37D4lCW87Oxb/d81aXLKGiK \ No newline at end of file diff --git a/dist/adjust-latest.js b/dist/adjust-latest.js index c4b1e0d..063ead7 100644 --- a/dist/adjust-latest.js +++ b/dist/adjust-latest.js @@ -271,6 +271,10 @@ var ENDPOINTS = { gdpr: 'https://gdpr.us.adjust.com' } }; +var PUB_SUB_EVENTS = { + WEB_UUID_CREATED: 'activity:web_uuid', + ATTRIBUTION_RECEIVED: 'activity:attribution' +}; ;// CONCATENATED MODULE: ./src/sdk/utilities.ts @@ -1393,6 +1397,87 @@ function timePassed(d1 /*: number*/, d2 /*: number*/) /*: number*/{ return Math.abs(d2 - d1); } +;// CONCATENATED MODULE: ./src/sdk/pub-sub.ts + + +/** + * List of events with subscribed callbacks + */ +var _list /*: Record>*/ = {}; + +/** + * Reference to timeout ids so they can be cleared on destroy + */ +var _timeoutIds /*: Array>*/ = []; + +/** + * Get unique id for the callback to use for unsubscribe + */ +function _getId() /*: string*/{ + return 'id' + Math.random().toString(36).substring(2, 16); +} + +/** + * Subscribe to a certain event + */ +function subscribe /*:: */(name /*: string*/, cb /*: (name: string, arg: T) => unknown*/) /*: string*/{ + var id = _getId(); + var callback /*: CallbackWithId*/ = { + id: id, + cb: cb + }; + if (!_list[name]) { + _list[name] = []; + } + _list[name].push(callback); + return id; +} + +/** + * Unsubscribe particular callback from an event + */ +function unsubscribe(id /*: string*/) { + if (!id) { + return; + } + entries(_list).some(function (_ref) { + var _ref2 = _slicedToArray(_ref, 2), + callbacks = _ref2[1]; + return callbacks.some(function + /*:: */ + (callback /*: CallbackWithId*/, i /*: number*/) { + if (callback.id === id) { + callbacks.splice(i, 1); + } + }); + }); +} + +/** + * Publish certain event with optional arguments + */ +function publish /*:: */(name /*: string*/, args /*: T*/) /*: void*/{ + if (!_list[name]) { + return; + } + _list[name].forEach(function (item /*: CallbackWithId*/) { + if (typeof item.cb === 'function') { + _timeoutIds.push(setTimeout(function () { + return item.cb(name, args); + })); + } + }); +} + +/** + * Destroy all registered events with their callbacks + */ +function pub_sub_destroy() /*: void*/{ + _timeoutIds.forEach(clearTimeout); + _timeoutIds = []; + _list = {}; +} + ;// CONCATENATED MODULE: ./src/sdk/activity-state.js /*:: // @@ -1403,6 +1488,8 @@ import { type UrlT, type ActivityStateMapT, type AttributionMapT, type CommonReq + + /** * Reference to the activity state * @@ -1701,12 +1788,32 @@ function getAttribution() /*: AttributionMapT | null*/{ } return _activityState.attribution; } +function waitForAttribution() /*: Promise*/{ + if (_activityState.attribution) { + return Promise.resolve(_activityState.attribution); + } + return new Promise(function (resolve) { + return subscribe(PUB_SUB_EVENTS.ATTRIBUTION_RECEIVED, function (_name /*: string*/, attribution /*: AttributionMapT*/) { + return resolve(attribution); + }); + }); +} function getWebUUID() /*: string*/{ if (!_started) { return null; } return _activityState.uuid; } +function waitForWebUUID() /*: Promise*/{ + if (_activityState.uuid) { + return Promise.resolve(_activityState.uuid); + } + return new Promise(function (resolve) { + return subscribe(PUB_SUB_EVENTS.WEB_UUID_CREATED, function (_name /*: string*/, webUuid /*: string*/) { + return resolve(webUuid); + }); + }); +} var ActivityState = { get current() { return currentGetter(); @@ -1728,114 +1835,11 @@ var ActivityState = { updateLastActive: updateLastActive, destroy: activity_state_destroy, getAttribution: getAttribution, - getWebUUID: getWebUUID + getWebUUID: getWebUUID, + waitForAttribution: waitForAttribution, + waitForWebUUID: waitForWebUUID }; /* harmony default export */ const activity_state = (ActivityState); -;// CONCATENATED MODULE: ./src/sdk/pub-sub.js - - -/*:: type CallbackT = {| - id: string, - cb: (string, T) => mixed -|}*/ -/** - * List of events with subscribed callbacks - * - * @type {Object} - * @private - */ -var _list = {}; - -/** - * Reference to timeout ids so they can be cleared on destroy - * - * @type {Array} - * @private - */ -var _timeoutIds = []; - -/** - * Get unique id for the callback to use for unsubscribe - * - * @returns {string} - * @private - */ -function _getId() /*: string*/{ - return 'id' + Math.random().toString(36).substr(2, 16); -} - -/** - * Subscribe to a certain event - * - * @param {string} name - * @param {Function} cb - * @returns {string} - */ -function subscribe /*:: */(name /*: string*/, cb /*: $PropertyType, 'cb'>*/) /*: string*/{ - var id = _getId(); - var callback /*: CallbackT*/ = { - id: id, - cb: cb - }; - if (!_list[name]) { - _list[name] = []; - } - _list[name].push(callback); - return id; -} - -/** - * Unsubscribe particular callback from an event - * - * @param {string} id - */ -function unsubscribe(id /*: string*/) /*: void*/{ - if (!id) { - return; - } - entries(_list).some(function (_ref) { - var _ref2 = _slicedToArray(_ref, 2), - callbacks = _ref2[1]; - return callbacks.some(function - /*:: */ - (callback /*: CallbackT*/, i /*: number*/) { - if (callback.id === id) { - callbacks.splice(i, 1); - return true; - } - }); - }); -} - -/** - * Publish certain event with optional arguments - * - * @param {string} name - * @param {*} args - * @returns {Array} - */ -function publish /*:: */(name /*: string*/, args /*: T*/) /*: void*/{ - if (!_list[name]) { - return; - } - _list[name].forEach(function (item /*: CallbackT*/) { - if (typeof item.cb === 'function') { - _timeoutIds.push(setTimeout(function () { - return item.cb(name, args); - })); - } - }); -} - -/** - * Destroy all registered events with their callbacks - */ -function pub_sub_destroy() /*: void*/{ - _timeoutIds.forEach(clearTimeout); - _timeoutIds = []; - _list = {}; -} - ;// CONCATENATED MODULE: ./src/sdk/storage/quick-storage.ts @@ -5050,10 +5054,8 @@ function disable_status() /*: StatusT*/{ return 'on'; } -;// CONCATENATED MODULE: ./src/sdk/identity.js +;// CONCATENATED MODULE: ./src/sdk/identity.ts -/*:: // -import { type ActivityStateMapT } from './types';*/ @@ -5061,32 +5063,14 @@ import { type ActivityStateMapT } from './types';*/ -/*:: type InterceptT = {| - exists: boolean, - stored?: ?ActivityStateMapT -|}*/ -/** - * Name of the store used by activityState - * - * @type {string} - * @private - */ -var identity_storeName = 'activityState'; -/** - * Boolean used in start in order to avoid duplicated activity state - * - * @type {boolean} - * @private - */ +/** Name of the store used by activityState */ +var identity_storeName = StoreName.ActivityState; + +/** Boolean used in start in order to avoid duplicated activity state */ var _starting /*: boolean*/ = false; -/** - * Generate random uuid v4 - * - * @returns {string} - * @private - */ +/** Generate random uuid v4 */ function _generateUuid() /*: string*/{ var seed = Date.now(); return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) { @@ -5096,13 +5080,7 @@ function _generateUuid() /*: string*/{ }); } -/** - * Inspect stored activity state and check if disable needs to be repeated - * - * @param {Object=} stored - * @returns {Object} - * @private - */ +/** Inspect stored activity state and check if disable needs to be repeated */ function _intercept(stored /*: ActivityStateMapT*/) /*: InterceptT*/{ if (!stored) { return { @@ -5128,8 +5106,6 @@ function _intercept(stored /*: ActivityStateMapT*/) /*: InterceptT*/{ /** * Cache stored activity state into running memory - * - * @returns {Promise} */ function start() /*: Promise*/{ if (_starting) { @@ -5153,25 +5129,23 @@ function start() /*: Promise*/{ _starting = false; return activityState; }); + }).then(function (activityState /*: ActivityStateMapT*/) { + if (activityState) { + publish(PUB_SUB_EVENTS.WEB_UUID_CREATED, activityState.uuid); + } + return activityState; }); } -/** - * Check if sdk is running at all (totally disabled or inactive activity state) - * - * @returns {boolean} - * @private - */ +/** Check if sdk is running at all (totally disabled or inactive activity state) */ function _isLive() { return disable_status() !== 'off' && activity_state.isStarted(); } /** * Persist changes made directly in activity state and update lastActive flag - * - * @returns {Promise} */ -function persist() /*: Promise*/{ +function persist() /*: Promise*/{ if (!_isLive()) { return Promise.resolve(null); } @@ -5186,8 +5160,6 @@ function persist() /*: Promise*/{ /** * Sync in-memory activityState with the one from store * - should be used when change from another tab is possible and critical - * - * @returns {Promise} */ function sync() /*: Promise*/{ return storage.getFirst(identity_storeName).then(function (activityState /*: ActivityStateMapT*/) { @@ -5210,7 +5182,7 @@ function sync() /*: Promise*/{ /** * Clear activity state store - set uuid to be unknown */ -function clear() /*: void*/{ +function clear() /*: Promise*/{ var newActivityState = { uuid: 'unknown' }; @@ -5949,6 +5921,7 @@ import { type HttpSuccessResponseT, type HttpErrorResponseT, type HttpFinishCbT, + /** * Http request instance * @@ -6027,6 +6000,7 @@ function _setAttribution(result /*: HttpSuccessResponseT*/) /*: Promise*/{ + return _preCheck('get attribution', function () { + return activity_state.waitForAttribution(); + }, { + schedule: false + }); +} + /** * Get `web_uuid` - a unique ID of user generated per subdomain and per browser * * @returns {string|undefined} `web_uuid` if available or `undefined` otherwise + * + * @deprecated Use {@link waitForWebUUID} instead */ function main_getWebUUID() /*: ?string*/{ return _preCheck('get web_uuid', function () { return activity_state.getWebUUID(); }); } + +/** + * Returns a promise which resolves when `web_uuid` becomes available + */ +function main_waitForWebUUID() /*: Promise*/{ + return _preCheck('get web_uuid', function () { + return activity_state.waitForWebUUID(); + }, { + schedule: false + }); +} function setReferrer(referrer /*: string*/) { if (!referrer || typeof referrer !== 'string') { logger.error('You must provide a string referrer'); @@ -7118,6 +7118,8 @@ var Adjust = { initSdk: initSdk, getAttribution: main_getAttribution, getWebUUID: main_getWebUUID, + waitForAttribution: main_waitForAttribution, + waitForWebUUID: main_waitForWebUUID, setReferrer: setReferrer, trackEvent: trackEvent, addGlobalCallbackParameters: addGlobalCallbackParameters, diff --git a/dist/adjust-latest.min.js b/dist/adjust-latest.min.js index f352a6b..6b38953 100644 --- a/dist/adjust-latest.min.js +++ b/dist/adjust-latest.min.js @@ -1 +1 @@ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.Adjust=t():e.Adjust=t()}(self,(()=>(()=>{"use strict";var e={d:(t,n)=>{for(var r in n)e.o(n,r)&&!e.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:n[r]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t)},t={};function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}function r(e){var t=function(e,t){if("object"!=n(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var o=r.call(e,t||"default");if("object"!=n(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==n(t)?t:t+""}function o(e,t,n){return(t=r(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function s(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);nvr});var f=1e3,p=60*f,m=60*p,h=24*m,v="general",g="gdpr",y={TRANSACTION_ERROR:"XHR transaction failed due to an error",SERVER_MALFORMED_RESPONSE:"Response from server is malformed",SERVER_INTERNAL_ERROR:"Internal error occurred on the server",SERVER_CANNOT_PROCESS:"Server was not able to process the request, probably due to error coming from the client",NO_CONNECTION:"No internet connectivity",SKIP:"Skipping slower attempt",MISSING_URL:"Url is not provided"},b={NO_STORAGE:"noStorage",INDEXED_DB:"indexedDB",LOCAL_STORAGE:"localStorage"},k={endpointName:"Default",app:"https://app.adjust.com",gdpr:"https://gdpr.adjust.com"},S={endpointName:"Indian",app:"https://app.adjust.net.in",gdpr:"https://gdpr.adjust.net.in"},w={endpointName:"Chinese",app:"https://app.adjust.world",gdpr:"https://gdpr.adjust.world"},P={endpointName:"EU",app:"https://app.eu.adjust.com",gdpr:"https://gdpr.eu.adjust.com"},D={endpointName:"TR",app:"https://app.tr.adjust.com",gdpr:"https://gdpr.tr.adjust.com"},x={endpointName:"US",app:"https://app.us.adjust.com",gdpr:"https://gdpr.us.adjust.com"};function N(e){return!Object.keys(e).length&&e.constructor===Object}function I(e){return"object"===n(e)&&null!==e&&!(e instanceof Array)}function O(e){try{return I(JSON.parse(e))}catch(e){return!1}}function j(e,t,n){function r(e){return Array.isArray(t)?t.every((function(t){return e[t]===n[t]})):e[t]===n}for(var o=0;o0&&void 0!==arguments[0]?arguments[0]:[]).reduce((function(e,t){return a(a({},e),{},o({},t.key,t.value))}),{})}function C(){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:[]).filter((function(t){return-1!==e.indexOf(t)}))}function E(e,t){return new RegExp("\\/".concat(t,"(\\/.*|\\?.*){0,1}$")).test(e)}function R(e,t){var n=l(t,2),r=n[0],i=n[1];return a(a({},e),{},o({},r,i))}function T(e){return Object.keys(e).map((function(t){return[t,e[t]]}))}function _(e){return Object.keys(e).map((function(t){return e[t]}))}function B(e){return I(e)?!N(e):!!e||0===e}function K(){try{var e=(new Date).toString(),t=window.localStorage;t.setItem(e,e);var n=t.getItem(e)===e;return t.removeItem(e),!(!n||!t)}catch(e){return!1}}const L={namespace:"adjust-sdk",version:"5.6.0",env:"production"};var q="error",U="warning",M="info",F="verbose",G=o(o(o(o(o({},"none",-1),q,0),U,1),M,2),F,3),V={log:" ",info:" ",warn:" ",error:""},W={development:F,production:q,test:F},H=z(),Y="";function z(){return W[L.env]||q}function J(e,t){var n;if(!(G[H]2?u-2:0),c=2;c2&&void 0!==arguments[2]?arguments[2]:[]).map((function(n){return Oe(e,t,n)}))}function Ae(e,t,n){var r=Se[t][Ee(e,Ne.right)],o=r.fields[r.keyPath],i=n instanceof Array?n.slice():[n],a=(le(o)?o.composite:[r.keyPath]).map((function(e,t){var n=r.fields[e];return Ie(se(n)?n.values:null,i[t])}));return 1===a.length?a[0]:a}function Ce(e){return Se.values[e]||e}function Ee(e,t){return(Se.storeNames[t][e]||{}).name||e}function Re(e,t){return{name:t.name,message:t.message.replace('"'.concat(e,'"'),Ee(e,Ne.right))}}function Te(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function _e(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:1,n=e+"",r=1;r<=t;r+=1)e0?"-":"+")+Ke(Math.floor(Math.abs(t)/60))+Ke(Math.abs(t)%60)}(t);return"".concat(n,"T").concat(r,"Z").concat(o)}function qe(e,t){return isNaN(e)||isNaN(t)?0:Math.abs(t-e)}var Ue={},Me=!1,Fe=!1;function Ge(){Ue=Me?a({},arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}):{}}function Ve(){Me&&(Ue.lastInterval=function(){var e=Ue.lastActive;if(e)return Math.round(qe(e,Date.now())/f);return-1}(),Ue.lastActive=Date.now())}function We(e){Ue=a(a({},Ue),e)}function He(){Fe=!0}function Ye(){var e=Ue.lastActive;return Math.round(qe(e,Date.now())/f)}function ze(){return(Ue.timeSpent||0)+(Fe?Ye():0)}function Je(){var e=qe(Ue.lastActive,Date.now())=0?Ue.lastInterval:0,n={timeSpent:Ue.timeSpent||0,sessionLength:Ue.sessionLength||0,sessionCount:Ue.sessionCount||1,lastInterval:t||0};return e&&E(e,"event")&&(n.eventCount=Ue.eventCount),n},updateParams:function(e,t){if(Me){var n={};n.timeSpent=ze(),n.sessionLength=Je(),E(e,"session")&&(n.sessionCount=(Ue.sessionCount||0)+1),E(e,"event")&&(n.eventCount=(Ue.eventCount||0)+1),We(n),t||Ve()}},updateInstalled:function(){Me&&(Ue.installed||We({installed:!0}))},updateSessionOffset:Qe,updateSessionLength:function(){Me&&(We({sessionLength:Je()}),Ve())},resetSessionOffset:function(){Me&&We({timeSpent:0,sessionLength:0})},updateLastActive:Ve,destroy:function(){Ue={},Me=!1,Fe=!1},getAttribution:function(){return Me?Ue.attribution?Ue.attribution:(X.log("No attribution data yet"),null):null},getWebUUID:function(){return Me?Ue.uuid:null}};var Ze={},$e=[];function et(e,t){var n="id"+Math.random().toString(36).substr(2,16),r={id:n,cb:t};return Ze[e]||(Ze[e]=[]),Ze[e].push(r),n}function tt(e,t){Ze[e]&&Ze[e].forEach((function(n){"function"==typeof n.cb&&$e.push(setTimeout((function(){return n.cb(e,t)})))}))}var nt=function(){return Be((function e(){Te(this,e),o(this,"items",{})}),[{key:"getItem",value:function(e){return Object.prototype.hasOwnProperty.call(this.items,e)?this.items[e]:null}},{key:"removeItem",value:function(e){delete this.items[e]}},{key:"setItem",value:function(e,t){this.items[e]=t}}])}();const rt=new(function(){return Be((function e(){var t=this;Te(this,e),o(this,"defaultName",L.namespace),o(this,"storageName",this.defaultName),o(this,"storeNames",Se.storeNames.left),this.storesMap={},K()?this.storage=window.localStorage:this.storage=new nt;var n=this.read.bind(this),r=this.write.bind(this);_(this.storeNames).forEach((function(e){var o=e.name;Object.defineProperty(t.storesMap,o,{get:function(){return n(o)},set:function(e){r(o,e)}})})),Object.freeze(this.storesMap)}),[{key:"read",value:function(e){var t=this.storage.getItem("".concat(this.storageName,".").concat(e)),n=t?JSON.parse(t):null;return e===ae.Preferences&&n?Oe(ae.Preferences,Ne.right,n):n}},{key:"write",value:function(e,t){t?this.storage.setItem("".concat(this.storageName,".").concat(e),JSON.stringify(t instanceof Array?t:Oe(ae.Preferences,Ne.left,t))):this.storage.removeItem("".concat(this.storageName,".").concat(e))}},{key:"clear",value:function(){this.deleteData()}},{key:"deleteData",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];_(this.storeNames).forEach((function(n){!t&&n.permanent||e.storage.removeItem("".concat(e.storageName,".").concat(n.name))}))}},{key:"setCustomName",value:function(e){var t=this;if(e&&e.length){var n="".concat(L.namespace,"-").concat(e);_(this.storeNames).forEach((function(e){var r=e.name,o=t.storage.getItem("".concat(t.storageName,".").concat(r));o&&t.storage.setItem("".concat(n,".").concat(r),o)})),this.deleteData(!0),this.storageName=n}}},{key:"stores",get:function(){return this.storesMap}}])}());var ot=fe.preferences.name,it=at();function at(){return it||ut(),it?a({},it):null}function ut(){it=rt.stores[ot]}function st(){var e=at();return e?e.sdkDisabled:null}function ct(e){var t=e?a({},e):null;rt.stores[ot]=a(a({},at()),{},{sdkDisabled:t}),ut()}function lt(){var e=at();return e?e.thirdPartySharingDisabled:null}function dt(){var e=rt.stores[ot]||{},t=(it||{}).sdkDisabled||null;e.sdkDisabled&&!t&&tt("sdk:shutdown"),ut()}function ft(){rt.stores[ot]||(rt.stores[ot]=a({},it))}var pt=function(e){return e.add="add",e.put="put",e.get="get",e.list="list",e.clear="clear",e.delete="delete",e}(pt||{}),mt=function(e){return e.readonly="readonly",e.readwrite="readwrite",e}(mt||{}),ht=function(){function e(){Te(this,e),o(this,"dbDefaultName",L.namespace),o(this,"dbName",this.dbDefaultName),o(this,"dbVersion",1),o(this,"indexedDbConnection",null),o(this,"notSupportedError",{name:"IDBNotSupported",message:"IndexedDB is not supported"}),o(this,"databaseOpenError",{name:"CannotOpenDatabaseError",message:"Cannot open a database"}),o(this,"noConnectionError",{name:"NoDatabaseConnection",message:"Cannot open a transaction"});var t=e.getIndexedDB();if(!t)throw this.notSupportedError;this.idbFactory=t}return Be(e,[{key:"setCustomName",value:function(e){return e&&e.length>0?(this.dbName="".concat(L.namespace,"-").concat(e),this.migrateDb(this.dbDefaultName,this.dbName)):Promise.resolve()}},{key:"openDatabase",value:function(t,n,r){var o=this;return e.isSupported().then((function(e){return e?new Promise((function(e,i){var a=o.idbFactory.open(t,r);n&&(a.onupgradeneeded=function(e){return n(e,i)}),a.onsuccess=function(t){var n=t.target.result;n?e(n):i(o.databaseOpenError)},a.onerror=i})):Promise.reject(o.notSupportedError)}))}},{key:"databaseExists",value:function(e){var t=this;return new Promise((function(n){var r=!0;t.openDatabase(e,(function(){r=!1})).then((function(n){if(n.close(),!r)return t.deleteDatabaseByName(e)})).then((function(){return n(r)}))}))}},{key:"cloneData",value:function(e,t){var n=this;return _(Se.storeNames.left).map((function(e){return e.name})).filter((function(e){return"p"!==e})).map((function(r){return function(){return o=r,i=n.indexedDbConnection,n.indexedDbConnection=e,n.getAll(o).then((function(e){if(n.indexedDbConnection=t,!(e.length<1))return n.addBulk(o,e,!0)})).then((function(){n.indexedDbConnection=i}));var o,i}})).reduce((function(e,t){return e.then(t)}),Promise.resolve())}},{key:"migrateDb",value:function(e,t){var n=this;return this.databaseExists(e).then((function(r){return r?Promise.all([n.openDatabase(e,n.handleUpgradeNeeded,n.dbVersion),n.openDatabase(t,n.handleUpgradeNeeded,n.dbVersion)]).then((function(t){var r=l(t,2),o=r[0],i=r[1];return n.cloneData(o,i).then((function(){return n.indexedDbConnection=i,o.close(),n.deleteDatabaseByName(e)}))})).then((function(){return X.info("Database migration finished")})):n.openDatabase(t,n.handleUpgradeNeeded,n.dbVersion).then((function(e){n.indexedDbConnection=e}))}))}},{key:"handleUpgradeNeeded",value:function(e,t){var n=e.target.result;e.target.transaction.onerror=t,e.target.transaction.onabort=t;var r=Se.storeNames.left,o=Xe.current||{},i=o&&!N(o);T(r).filter((function(e){return!l(e,2)[1].permanent})).forEach((function(e){var t=l(e,2),r=t[0],a=t[1].name,u=Se.right[r],s=n.createObjectStore(a,{keyPath:u.keyPath,autoIncrement:u.autoIncrement||!1});if(u.index&&s.createIndex("".concat(u.index,"Index"),u.index),a===ie.ActivityState&&i)return s.add(Oe(r,Ne.left,o)),void X.info("Activity state has been recovered");var c=rt.stores[a];c&&(c.forEach((function(e){return s.add(e)})),X.info("Migration from localStorage done for ".concat(r," store")))})),ft(),rt.clear()}},{key:"open",value:function(){var e=this;return this.indexedDbConnection?Promise.resolve({success:!0}):this.openDatabase(this.dbName,this.handleUpgradeNeeded,this.dbVersion).then((function(t){return e.indexedDbConnection=t,e.indexedDbConnection.onclose=function(){return e.destroy},{success:!0}}))}},{key:"getTransactionStore",value:function(e,t,n){var r,o=e.storeName,i=e.mode,a=n.transaction([o],i),u=a.objectStore(o),s=Se.right[Ee(o,Ne.right)];return s.index&&(r=u.index("".concat(s.index,"Index"))),a.onerror=t,a.onabort=t,{transaction:a,store:u,index:r,options:s}}},{key:"overrideError",value:function(e,t){var n=t.target.error;return e({name:n.name,message:n.message})}},{key:"getCompositeKeys",value:function(e){var t=e.fields[e.keyPath];return le(t)?t.composite:null}},{key:"targetIsObject",value:function(e){return I(e)}},{key:"prepareTarget",value:function(e,t,n){if(n===pt.clear||!t)return null;var r=this.getCompositeKeys(e);return-1!==[pt.add,pt.put].indexOf(n)?this.targetIsObject(t)?r?a(o({},e.keyPath,r.map((function(e){return t[e]})).join("")),t):t:null:t instanceof Array?t.join(""):t}},{key:"prepareResult",value:function(e,t){var n=this.getCompositeKeys(e);return n&&this.targetIsObject(t)?n.map((function(e){return t[e]})):null}},{key:"initRequest",value:function(e){var t=this,n=e.storeName,r=e.target,o=void 0===r?null:r,i=e.action,a=e.mode,u=void 0===a?mt.readonly:a;return this.open().then((function(){return new Promise((function(e,r){if(t.indexedDbConnection){var a=t.getTransactionStore({storeName:n,mode:u},r,t.indexedDbConnection),s=a.store,c=a.options,l=s[i](t.prepareTarget(c,o,i)),d=t.prepareResult(c,o);l.onsuccess=function(){i!==pt.get||l.result?e(d||l.result||o):r({name:"NotRecordFoundError",message:'Requested record not found in "'.concat(n,'" store')})},l.onerror=function(e){return t.overrideError(r,e)}}else r(t.noConnectionError)}))}))}},{key:"initBulkRequest",value:function(e){var t=this,n=e.storeName,r=e.target,o=e.action,i=e.mode,a=void 0===i?mt.readwrite:i;return!r||r&&!r.length?Promise.reject({name:"NoTargetDefined",message:"No array provided to perform ".concat(o,' bulk operation into "').concat(n,'" store')}):this.open().then((function(){return new Promise((function(e,i){if(t.indexedDbConnection){var u=t.getTransactionStore({storeName:n,mode:a},i,t.indexedDbConnection),s=u.transaction,c=u.store,l=u.options,d=new Array,f=r[0];s.oncomplete=function(){return e(d)};!function e(n){n.onerror=function(e){return t.overrideError(i,e)},n.onsuccess=function(){d.push(t.prepareResult(l,f)||n.result),f=r[d.length],d.length1&&void 0!==arguments[1]&&arguments[1];return this.openCursor({storeName:e,action:pt.list,firstOnly:t})}},{key:"getFirst",value:function(e){return this.getAll(e,!0).then((function(e){return e.length?e[0]:void 0}))}},{key:"getItem",value:function(e,t){return this.initRequest({storeName:e,target:t,action:pt.get})}},{key:"filterBy",value:function(e,t){var n=IDBKeyRange.only(t);return this.openCursor({storeName:e,action:pt.list,range:n})}},{key:"addItem",value:function(e,t){return this.initRequest({storeName:e,target:t,action:pt.add,mode:mt.readwrite})}},{key:"addBulk",value:function(e,t,n){return this.initBulkRequest({storeName:e,target:t,action:n?pt.put:pt.add,mode:mt.readwrite})}},{key:"updateItem",value:function(e,t){return this.initRequest({storeName:e,target:t,action:pt.put,mode:mt.readwrite})}},{key:"deleteItem",value:function(e,t){return this.initRequest({storeName:e,target:t,action:pt.delete,mode:mt.readwrite})}},{key:"deleteBulk",value:function(e,t,n){var r=n?IDBKeyRange[n](t):IDBKeyRange.only(t);return this.openCursor({storeName:e,action:pt.delete,range:r,mode:mt.readwrite})}},{key:"trimItems",value:function(e,t){var n=this,r=Se.right[Ee(e,Ne.right)];return this.getAll(e).then((function(e){return e.length?e[t-1]:null})).then((function(t){return t?n.deleteBulk(e,t[r.keyPath],De.UpperBound):[]}))}},{key:"count",value:function(e){var t=this;return this.open().then((function(){return new Promise((function(n,r){if(t.indexedDbConnection){var o=t.getTransactionStore({storeName:e,mode:mt.readonly},r,t.indexedDbConnection).store.count();o.onsuccess=function(){return n(o.result)},o.onerror=function(e){return t.overrideError(r,e)}}else r(t.noConnectionError)}))}))}},{key:"clear",value:function(e){return this.initRequest({storeName:e,action:pt.clear,mode:mt.readwrite})}},{key:"destroy",value:function(){this.indexedDbConnection&&this.indexedDbConnection.close(),this.indexedDbConnection=null}},{key:"deleteDatabase",value:function(){return this.destroy(),this.deleteDatabaseByName(this.dbName)}}],[{key:"tryOpen",value:function(t){return new Promise((function(n){try{var r=t.open(e.dbValidationName);r.onsuccess=function(){r.result.close(),t.deleteDatabase(e.dbValidationName),n(!0)},r.onerror=function(){return n(!1)}}catch(e){n(!1)}}))}},{key:"isSupported",value:function(){if(e.isSupportedPromise)return e.isSupportedPromise;var t="IndexedDB is not supported in this browser";return e.isSupportedPromise=new Promise((function(n){var r=e.getIndexedDB(),o=!!navigator.platform&&/iPad|iPhone|iPod/.test(navigator.platform);!r||o?(X.warn(t),n(!1)):n(e.tryOpen(r).then((function(e){return e||X.warn(t),e})))})),e.isSupportedPromise}},{key:"getIndexedDB",value:function(){return window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB}}])}();o(ht,"dbValidationName","validate-db-openable"),o(ht,"isSupportedPromise",null);var vt=function(){function e(){Te(this,e)}return Be(e,[{key:"open",value:function(){return e.isSupported().then((function(e){if(!e)return{status:"error",error:{name:"LSNotSupported",message:"LocalStorage is not supported"}};var t=Se.storeNames.left,n=Xe.current||{},r=n&&!N(n);return T(t).filter((function(e){return!l(e,2)[1].permanent})).forEach((function(e){var t=l(e,2),o=t[0],i=t[1].name;i!==ie.ActivityState||rt.stores[i]?rt.stores[i]||(rt.stores[i]=[]):rt.stores[i]=r?[Oe(o,Ne.left,n)]:[]})),ft(),{status:"success"}}))}},{key:"getCompositeKeys",value:function(e){var t=e.fields[e.keyPath];return le(t)?t.composite:null}},{key:"getKeys",value:function(e){var t=Ee(e,Ne.right),n=Se.right[t];return this.getCompositeKeys(n)||[n.keyPath]}},{key:"nextIndex",value:function(e){return"number"==typeof e?e+1:void 0}},{key:"initRequest",value:function(e,t){var n=this,r=e.storeName,o=e.id,i=e.item,u=Se.right[Ee(r,Ne.right)];return this.open().then((function(e){return"error"===e.status?Promise.reject(e.error):new Promise((function(e,s){var c,l=rt.stores[r],d=n.getKeys(r),f=(l[l.length-1]||{})[u.keyPath]||0;if(o){var p=Array.isArray(o)?o.slice():[o];c=d.map((function(e,t){return[e,p[t]]})).reduce(R,{})}else c=a({},i);var m=c?j(l,d,c):0;return t(e,s,{keys:d,items:l,index:m,options:u,lastId:f})}))}))}},{key:"sort",value:function(e,t,n){var r=d(e),o=t.slice().reverse();return r.sort((function(e,t){return o.reduce((function(r,o){return r||function(e,t,r){var o=n?n===e[r]:e[r]e[r]:e[r]>t[r];return o?-1:i?1:0}(e,t,o)}),0)}))}},{key:"prepareTarget",value:function(e,t,n){var r=this.getCompositeKeys(e);return r?a(o({},e.keyPath,r.map((function(e){return t[e]})).join("")),t):e.autoIncrement&&n?a(o({},e.keyPath,n),t):a({},t)}},{key:"prepareResult",value:function(e,t){var n=this.getCompositeKeys(e);return n?n.map((function(e){return t[e]})).filter((function(e){return!xe(e)})):t[e.keyPath]}},{key:"getAll",value:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return this.open().then((function(r){return"error"===r.status?Promise.reject(r.error):new Promise((function(r,o){var i=rt.stores[e];i instanceof Array?r(n?[i[0]]:t.sort(i,t.getKeys(e))):o({name:"NotFoundError",message:"No objectStore named ".concat(e," in this database")})}))}))}},{key:"getFirst",value:function(e){return this.getAll(e,!0).then((function(e){return e.length?e[0]:void 0}))}},{key:"getItem",value:function(e,t){var n=this;return this.initRequest({storeName:e,id:t},(function(t,r,o){var i=o.items,a=o.index,u=o.options;-1===a?r({name:"NotRecordFoundError",message:'Requested record not found in "'.concat(e,'" store')}):t(n.prepareTarget(u,i[a]))}))}},{key:"filterBy",value:function(e,t){return this.getAll(e).then((function(n){return n.filter((function(n){var r=Se.right[Ee(e,Ne.right)];return(r.index&&n[r.index])===t}))}))}},{key:"addItem",value:function(e,t){var n=this;return this.initRequest({storeName:e,item:t},(function(r,o,i){var a=i.items,u=i.index,s=i.options,c=i.lastId;-1!==u?o({name:"ConstraintError",message:'Constraint was not satisfied, trying to add existing item into "'.concat(e,'" store')}):(a.push(n.prepareTarget(s,t,n.nextIndex(c))),rt.stores[e]=a,r(n.prepareResult(s,t)))}))}},{key:"addBulk",value:function(e,t,n){var r=this;return this.initRequest({storeName:e},(function(o,i,a){var u=a.keys,s=a.items,c=a.options,l=a.lastId;if(!t||t&&!t.length)i({name:"NoTargetDefined",message:'No array provided to perform add bulk operation into "'.concat(e,'" store')});else{var f=l,p=t.map((function(e){return r.prepareTarget(c,e,f=r.nextIndex(f))})),m=p.filter((function(e){return-1!==j(s,u,e)})).map((function(e){return e[c.keyPath]})),h=n?s.filter((function(e){return-1===m.indexOf(e[c.keyPath])})):d(s);if(m.length&&!n)i({name:"ConstraintError",message:'Constraint was not satisfied, trying to add existing items into "'.concat(e,'" store')});else rt.stores[e]=r.sort([].concat(d(h),d(p)),u),o(t.map((function(e){return r.prepareResult(c,e)})))}}))}},{key:"updateItem",value:function(e,t){var n=this;return this.initRequest({storeName:e,item:t},(function(r,o,i){var a=i.items,u=i.index,s=i.options,c=i.lastId,l=-1===u?n.nextIndex(c):void 0,d=n.prepareTarget(s,t,l);-1===u?a.push(d):a.splice(u,1,d),rt.stores[e]=a,r(n.prepareResult(s,t))}))}},{key:"deleteItem",value:function(e,t){return this.initRequest({storeName:e,id:t},(function(n,r,o){var i=o.items,a=o.index;-1!==a&&(i.splice(a,1),rt.stores[e]=i),n(t)}))}},{key:"findMax",value:function(e,t,n){if(!e.length)return-1;for(var r={index:-1,value:"string"==typeof n?"":0},o=0;o=r.value&&(r={value:e[o][t],index:o})}return r.index}},{key:"deleteBulk",value:function(e,t,n){var r=this;return this.getAll(e).then((function(o){var i=r.getKeys(e),a=Se.right[Ee(e,Ne.right)].index||i[0],u=n?null:t,s=r.sort(o,i,u),c=r.findMax(s,a,t);if(-1===c)return[];var l=n===De.LowerBound?c:0,d=n&&n!==De.UpperBound?s.length:c+1,f=s.splice(l,d).map((function(e){return 1===i.length?e[a]:i.map((function(t){return e[t]}))}));return rt.stores[e]=s,f}))}},{key:"trimItems",value:function(e,t){var n=this,r=Ee(e,Ne.right),o=Se.right[r];return this.getAll(e).then((function(e){return e.length?e[t-1]:null})).then((function(t){return t?n.deleteBulk(e,t[o.keyPath],De.UpperBound):[]}))}},{key:"count",value:function(e){return this.open().then((function(t){if("error"===t.status)return Promise.reject(t.error);var n=rt.stores[e];return Promise.resolve(n instanceof Array?n.length:1)}))}},{key:"clear",value:function(e){return this.open().then((function(t){return"error"===t.status?Promise.reject(t.error):new Promise((function(t){rt.stores[e]=[],t()}))}))}},{key:"destroy",value:function(){}},{key:"deleteDatabase",value:function(){}}],[{key:"isSupported",value:function(){return e.isSupportedPromise||(e.isSupportedPromise=new Promise((function(e){var t=K();t||X.warn("LocalStorage is not supported in this browser"),e(t)}))),e.isSupportedPromise}}])}();o(vt,"isSupportedPromise",null);var gt,yt=function(e){return e[e.noStorage=b.NO_STORAGE]="noStorage",e[e.indexedDB=b.INDEXED_DB]="indexedDB",e[e.localStorage=b.LOCAL_STORAGE]="localStorage",e}(yt||{}),bt={getAll:function(e,t,n){return e.getAll(t,n).then((function(e){return je(t,Ne.right,e)}))},getFirst:function(e,t){return e.getFirst(t).then((function(e){return Oe(t,Ne.right,e)}))},getItem:function(e,t,n){return e.getItem(t,Ae(t,Ne.left,n)).then((function(e){return Oe(t,Ne.right,e)})).catch((function(e){return Promise.reject(Re(t,e))}))},filterBy:function(e,t,n){return e.filterBy(t,Ce(n)).then((function(e){return je(t,Ne.right,e)}))},addItem:function(e,t,n){var r=Oe(t,Ne.left,n);return e.addItem(t,r).then((function(e){return Ae(t,Ne.right,e)})).catch((function(e){return Promise.reject(Re(t,e))}))},addBulk:function(e,t,n,r){var o=je(t,Ne.left,n);return e.addBulk(t,o,r).then((function(e){return e.map((function(e){return Ae(t,Ne.right,e)}))})).catch((function(e){return Promise.reject(Re(t,e))}))},updateItem:function(e,t,n){var r=Oe(t,Ne.left,n);return e.updateItem(t,r).then((function(e){return Ae(t,Ne.right,e)}))},deleteItem:function(e,t,n){return e.deleteItem(t,Ae(t,Ne.left,n)).then((function(e){return Ae(t,Ne.right,e)}))},deleteBulk:function(e,t,n,r){return e.deleteBulk(t,Ce(n),r).then((function(e){return e.map((function(e){return Ae(t,Ne.right,e)}))}))},trimItems:function(e,t,n){return e.trimItems(t,n)},count:function(e,t){return e.count(t)},clear:function(e,t){return e.clear(t)},destroy:function(e){return e.destroy()},deleteDatabase:function(e){return e.deleteDatabase()}};var kt=null;function St(e){var t=null;return null!==kt?kt:kt=Promise.all([ht.isSupported(),vt.isSupported()]).then((function(n){var r=l(n,2),o=r[0],i=r[1];if(rt.setCustomName(e),o){gt=yt.indexedDB;var a=new ht;return a.setCustomName(e).then((function(){return t=a}))}return i?(gt=yt.localStorage,t=new vt,Promise.resolve(t)):(X.error("There is no storage available, app will run with minimum set of features"),gt=yt.noStorage,t=null,Promise.resolve(t))})).then((function(){return{type:gt,storage:t}}))}const wt=a({init:St,getType:function(){return gt}},(Pt=T(bt).map((function(e){var t=l(e,2),n=t[0],r=t[1];return[n,function(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),o=1;o2&&void 0!==arguments[2]&&arguments[2]?"CONTINUE":"RETRY",response:O(e.responseText)?JSON.parse(e.responseText):e.responseText,message:y[t],code:t}}function Nt(e,t){var n=e.slice(0,e.length-t.length-1).split("").reduce((function(e){return e.concat(" ")}),"");return"".concat(t).concat(n,":")}function It(e,t){var n="REQUEST PARAMETERS:",r=function(e){return e.replace(/([A-Z])/g,(function(e){return"_".concat(e.toLowerCase())}))},o=T(a(a(a({},oe.getBaseParams()),t),e)).map((function(e){var t=l(e,2),n=t[0],o=t[1];return[r(n),o]}));return X.log(n),o.filter((function(e){return B(l(e,2)[1])})).map((function(e){var t=l(e,2),r=t[0],o=t[1];return X.log(Nt(n,r),o),function(e){var t=l(e,2),n=t[0],r=t[1],o=encodeURIComponent(n),i=r;return"string"==typeof r&&(i=encodeURIComponent(r)),I(r)&&(i=encodeURIComponent(JSON.stringify(r)||"")),[o,i].join("=")}([r,o])})).join("&")}function Ot(e,t,n){var r=n.xhr,o=n.url;if(4===r.readyState){var i=r.status>=200&&r.status<300,a=O(r.responseText);if(0!==r.status)return a?t(i?function(e,t){var n=JSON.parse(e.responseText),r={status:"success",adid:n.adid,timestamp:n.timestamp,ask_in:n.ask_in,retry_in:n.retry_in,continue_in:n.continue_in,tracking_state:n.tracking_state,attribution:void 0,message:void 0};return E(t,"attribution")&&(r.attribution=n.attribution,r.message=n.message),T(r).filter((function(e){return!!l(e,2)[1]})).reduce(R,{})}(r,o):xt(r,"SERVER_CANNOT_PROCESS",!0)):e(xt(r,i?"SERVER_MALFORMED_RESPONSE":"SERVER_INTERNAL_ERROR"));e(xt(r,"NO_CONNECTION"))}}function jt(e,t){var n=e.endpoint,r=e.url,o=e.method,i=void 0===o?"GET":o,a=e.params,u=function(e,t){var n=e.endpoint,r=e.url,o=e.method,i=It(e.params,t);return{fullUrl:n+r+("GET"===o?"?".concat(i):""),encodedParams:i}}({endpoint:n,url:r,method:i,params:void 0===a?{}:a},t),s=u.fullUrl,c=u.encodedParams;return new Promise((function(e,t){var n=new XMLHttpRequest;n.open(i,s,!0),function(e,t){var n="REQUEST HEADERS:",r=[["Client-SDK","js".concat(L.version)],["Content-Type","POST"===t?"application/x-www-form-urlencoded":"application/json"]];X.log(n),r.forEach((function(t){var r=l(t,2),o=r[0],i=r[1];e.setRequestHeader(o,i),X.log(Nt(n,o),i)}))}(n,i),n.onreadystatechange=function(){return Ot(t,e,{xhr:n,url:r})},n.onerror=function(){return t(xt(n,"TRANSACTION_ERROR"))},n.send("GET"===i?void 0:c)}))}function At(e,t){return"success"===e.status?function(e,t){var n=E(t,"gdpr_forget_device"),r=E(t,"attribution"),o=E(t,"session"),i=E(t,"disable_third_party_sharing"),a="opted_out"===e.tracking_state;if(!n&&a)return tt("sdk:gdpr-forget-me"),e;r||n||a||!e.ask_in||tt("attribution:check",e);o&&tt("session:finished",e);if(i)return tt("sdk:third-party-sharing-opt-out"),e;return e}(e,t):e}var Ct={long:{delay:2*p,maxDelay:h,minRange:.5,maxRange:1},short:{delay:200,maxDelay:m,minRange:.5,maxRange:1},test:{delay:100,maxDelay:300}};function Et(e,t){var n,r,o=Ct[t=t||"long"],i=o.delay*Math.pow(2,e-1);return i=Math.min(i,o.maxDelay),o.minRange&&o.maxRange&&(i*=(n=o.minRange,r=o.maxRange,Math.random()*(r-n)+n)),Math.round(i)}var Rt=navigator.onLine;function Tt(){Rt=!0}function _t(){Rt=!1}function Bt(e,t,n){e.addEventListener&&e.addEventListener(t,n,!1)}function Kt(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)}var Lt=function(e){return e.Default="default",e.India="india",e.China="china",e}(Lt||{}),qt=function(e){return e.EU="EU",e.TR="TR",e.US="US",e}(qt||{});function Ut(e,t){X.warn("Both ".concat(e," and ").concat(t," are set in config, ").concat(t," will be ignored"))}var Mt=o(o(o(o(o(o({},Lt.Default,k),Lt.India,S),Lt.China,w),qt.EU,P),qt.TR,D),qt.US,x);function Ft(e){var t,n,r,o,i=(t=oe.getCustomConfig(),n=t.customUrl,r=t.urlStrategy,o=t.dataResidency,n?((o||r)&&Ut("customUrl",o?"dataResidency":"urlStrategy"),{app:n,gdpr:n}):(o&&r&&Ut("dataResidency","urlStrategy"),o?[o]:r===Lt.India?[Lt.India,Lt.Default]:r===Lt.China?[Lt.China,Lt.Default]:[Lt.Default,Lt.India,Lt.China]));return Array.isArray(i)?i.map((function(t){return e[t]||null})).filter((function(e){return!!e})):[i]}var Gt=150,Vt=2147483647,Wt=60*f;const Ht=function(){var e,t,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=n.url,o=n.method,i=void 0===o?"GET":o,u=n.params,s=void 0===u?{}:u,c=n.continueCb,d=n.strategy,f=n.wait,p={url:r,method:i,params:s,continueCb:c},m=r,h=i,v=a({},s),g=c,b=d,k=function(){e.reset(),t=e.next()},S=function(e,t){return e["/gdpr_forget_device"===t?"gdpr":"app"]},w=null,P={request:0,connection:0},D=I(f),x=null;function I(e){return(e=e||Gt)>Vt?Vt:e}function O(n){var r=n.wait,o=n.retrying;return e||(e=function(){var e=Ft(arguments.length>0&&void 0!==arguments[0]?arguments[0]:Mt),t=0;return{next:function(){return t0&&void 0!==arguments[0]?arguments[0]:{},t=e.url,n=e.method,r=e.params,o=void 0===r?{}:r,i=e.continueCb,u=e.wait;return function(e){var t=e.url,n=e.method,r=e.params,o=e.continueCb;t&&(m=t),n&&(h=n),N(r)||(v=a({},r)),v=a({createdAt:Le()},v),"function"==typeof o&&(g=o)}({url:t,method:n,params:o,continueCb:i}),O({wait:u})},isRunning:function(){return!!w},clear:K}};var Yt=function(e){return e===g?"GDPR disable":"disable"},zt=function(e){return{start:{inProgress:"Adjust SDK ".concat(Yt(e)," process has already started"),done:"Adjust SDK ".concat(Yt(e)," process is now started")},finish:{inProgress:"Adjust SDK ".concat(Yt(e)," process has already finished"),done:"Adjust SDK ".concat(Yt(e)," process is now finished")}}};function Jt(e,t){var n=e.reason,r=e.pending,o=st()||{},i="start"===t&&o.pending?"start":"finish",a="start"===t&&o.reason,u="finish"===t&&o.reason&&!o.pending;return a||u?(X.log(zt(o.reason)[i].inProgress),!1):(X.log(zt(n)[i].done),ct({reason:n||v,pending:r}),!0)}function Qt(e){return Jt({reason:e,pending:arguments.length>1&&void 0!==arguments[1]&&arguments[1]||!1},"start")}function Xt(){var e=st()||{};return e.reason===v||e.reason===g&&!e.pending?"off":e.reason===g&&e.pending?"paused":"on"}var Zt="activityState",$t=!1;function en(e){return e?"unknown"===e.uuid?(Qt({reason:g}),Xe.destroy(),{exists:!0,stored:null}):(Xe.init(e),{exists:!0,stored:e}):{exists:!1}}function tn(){return"off"!==Xt()&&Xe.isStarted()}function nn(){if(!tn())return Promise.resolve(null);var e=a(a({},Xe.current),{},{lastActive:Date.now()});return wt.updateItem(Zt,e).then((function(){return Xe.current=e}))}var rn=Ht({strategy:"long",continueCb:function(e,t){var n=e&&e.continue_in||null;return un.pause=n?{timestamp:Date.now(),wait:n}:null,wt.getFirst(an).then((function(e){return e?wt.deleteItem(an,e.timestamp):null})).then((function(){return t(),un.running=!1,dn({wait:n})}))}}),on=!1,an="queue",un={running:!1,timestamp:null,pause:null};function sn(){var e=Date.now();return un.timestamp&&e<=un.timestamp&&(e=un.timestamp+1),un.timestamp=e,e}function cn(e){var t=e.url,n=e.method,r=e.params,o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=o.auto,u=o.timestamp;Xe.updateParams(t,i);var s=T(r||{}).filter((function(e){return B(l(e,2)[1])})).reduce(R,{}),c={timestamp:sn(),url:t,method:n,params:a(a({},Xe.getParams(t)),s)};return u&&(c.createdAt=u),wt.addItem(an,c).then((function(){return function(e){return E(e,"session")&&Xe.resetSessionOffset(),Xe.updateLastActive(),nn()}(t)})).then((function(){return un.running?{}:dn()}))}function ln(){var e=un.pause||{},t=e.timestamp,n=e.wait,r=Date.now()-(t||0);return r0&&void 0!==arguments[0]?arguments[0]:{},t=e.cleanUp,n=e.wait;if(un.running)return Promise.resolve({});un.running=!0;var r=Promise.resolve({});return t&&(r=r.then(pn)),r.then((function(){return wt.getFirst(an)})).then((function(e){return function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.timestamp,n=e.createdAt,r=e.url,o=e.method,i=e.params,u=arguments.length>1?arguments[1]:void 0,s=Xe.current||{},c="/session"===r&&!s.installed;return on&&!c||!r&&!o&&!i?(un.running=!1,Promise.resolve({})):rn.send({url:r,method:o,params:a(a({},i),{},{createdAt:Le(n||t)}),wait:u||ln()})}(e,n)}))}function fn(e){if(void 0!==e)if(e!==on){var t=on;on=e,!e&&t&&dn(),X.info("The app is now in ".concat(e?"offline":"online"," mode"))}else X.error("The app is already in ".concat(e?"offline":"online"," mode"));else X.error("State not provided, true or false has to be defined")}function pn(){var e=Date.now()-oe.requestValidityWindow;return wt.deleteBulk(an,e,"upperBound")}var mn="globalParams",hn={short:"No type provided",long:"Global parameter type not provided, `callback` or `partner` types are available"};function vn(e){return(e||[]).map((function(e){return{key:e.key,value:e.value}}))}function gn(){return Promise.all([wt.filterBy(mn,"callback"),wt.filterBy(mn,"partner")]).then((function(e){var t=l(e,2),n=t[0],r=t[1];return{callbackParams:vn(n),partnerParams:vn(r)}}))}function yn(e,t){if(void 0===t)return X.error(hn.long),Promise.reject({message:hn.short});var n=A(e),r=Object.keys(n).map((function(e){return{key:e,value:n[e],type:t}}));return Promise.all([wt.filterBy(mn,t),wt.addBulk(mn,r,!0)]).then((function(e){var n=l(e,2),o=n[0],i=n[1],a=C(o.map((function(e){return e.key})),i.map((function(e){return e[0]})));return X.log("Following ".concat(t," parameters have been saved: ").concat(r.map((function(e){return"".concat(e.key,":").concat(e.value)})).join(", "))),a.length&&X.log("Keys: ".concat(a.join(", ")," already existed so their values have been updated")),i}))}function bn(e,t){return void 0===t?(X.error(hn.long),Promise.reject({message:hn.short})):wt.deleteItem(mn,[e,t]).then((function(n){return X.log("".concat(e," ").concat(t," parameter has been deleted")),n}))}function kn(e){return void 0===e?(X.error(hn.long),Promise.reject({message:hn.short})):wt.deleteBulk(mn,e).then((function(t){return X.log("All ".concat(e," parameters have been deleted")),t}))}var Sn,wn,Pn,Dn=!1,xn=document;function Nn(){return Pn=function(){var e=document;if(void 0!==e.hidden)return{hidden:"hidden",visibilityChange:"visibilitychange"};for(var t=T({mozHidden:"mozvisibilitychange",msHidden:"msvisibilitychange",oHidden:"ovisibilitychange",webkitHidden:"webkitvisibilitychange"}),n=0;n0;return!n||n&&t*f>=oe.sessionWindow?gn().then((function(e){var t,n,r;cn({url:"/session",method:"POST",params:(t=e,n=t.callbackParams,r=t.partnerParams,{callbackParams:n.length?A(n):null,partnerParams:r.length?A(r):null})},{auto:!0})})):(tt("attribution:check"),nn())}var Tn=Ht({url:"/attribution",strategy:"short",continueCb:function(e,t,n){if(!e||e&&"error"===e.status)return t(),Promise.resolve({state:"unknown"});if(!e.ask_in)return t(),function(e){if(N(e)||!function(e){var t=e.adid,n=void 0===t?"":t,r=e.attribution,o=void 0===r?{}:r;return!!n&&!!C(_n,Object.keys(o)).length}(e)||function(e){var t=e.adid,n=e.attribution,r=Xe.current.attribution||{},o=n&&_n.some((function(e){return r[e]!==n[e]}));return!o&&t===r.adid}(e))return Promise.resolve({state:"same"});var t=T(e.attribution).filter((function(e){var t=l(e,1)[0];return-1!==_n.indexOf(t)})).reduce(R,{adid:e.adid});return Xe.current=a(a({},Xe.current),{},{attribution:t}),nn().then((function(){return tt("attribution:change",t),X.info("Attribution has been updated"),{state:"changed"}}))}(e);return n(e.ask_in)}}),_n=["tracker_token","tracker_name","network","campaign","adgroup","creative","click_label","state"];var Bn=Ht({url:"/gdpr_forget_device",method:"POST",strategy:"short"}),Kn={running:"Adjust SDK is running pending GDPR Forget Me request",pending:"Adjust SDK will run GDPR Forget Me request after initialisation",paused:"Adjust SDK is already prepared to send GDPR Forget Me request",off:"Adjust SDK is already disabled"};function Ln(e){var t=Xt();return e||"on"===t?oe.isInitialised()?(Bn.send({params:a({},Xe.getParams())}).then((function(){tt("sdk:gdpr-forget-me")})),!0):(X.log(Kn.pending),!0):(X.log(Kn[t]),!1)}function qn(){return Jt({reason:g,pending:!1},"finish")}var Un={running:"Adjust SDK is running pending third-party sharing opt-out request",delayed:"Adjust SDK will run third-party sharing opt-out request after initialisation",pending:"Adjust SDK already queued third-party sharing opt-out request",off:"Third-party sharing opt-out is already done",start:{inProgress:"Third-party sharing opt-out has already started",done:"Third-party sharing opt-out is now started"},finish:{inProgress:"Third-party sharing opt-out has already finished",done:"Third-party sharing opt-out is now finished"}};function Mn(){var e=lt()||{};return e.reason?e.pending?"pending":"off":"on"}function Fn(e){var t=Mn();return e||"on"===t?oe.isInitialised()?(cn({url:"/disable_third_party_sharing",method:"POST"}),!0):(X.log(Un.delayed),!0):(X.log(Un[t]),!1)}function Gn(e,t){var n,r,o=lt()||{},i="start"===t&&e?"start":"finish",u="start"===t&&o.reason,s="finish"===t&&o.reason&&!o.pending;return u||s?(X.log(Un[i].inProgress),!1):(X.log(Un[i].done),r=(n={reason:v,pending:e})?a({},n):null,rt.stores[ot]=a(a({},at()),{},{thirdPartySharingDisabled:r}),ut(),!0)}function Vn(){return Gn(!1,"finish")}function Wn(){"pending"===Mn()&&(X.log(Un.running),Fn(!0))}var Hn=[];function Yn(e,t){Hn.push({method:e,description:t,timestamp:Date.now()})}var zn=10,Jn="eventDeduplication";function Qn(e,t){var n,r,o=t.callbackParams,i=t.partnerParams,u={},s=a({eventToken:e.eventToken,deduplicationId:e.deduplicationId},(n=e.revenue,r=e.currency,isNaN(n)||(n=parseFloat(n))<0||!r?{}:{revenue:n.toFixed(5),currency:r})),c=a(a({},A(o)),A(e.callbackParams)),l=a(a({},A(i)),A(e.partnerParams));return N(c)||(u.callbackParams=c),N(l)||(u.partnerParams=l),a(a({},s),u)}function Xn(e){return e?wt.getAll(Jn).then((function(e){return e.map((function(e){return e.id}))})).then((function(t){return-1===t.indexOf(e)?function(e){var t=oe.getCustomConfig().eventDeduplicationListLimit,n=t>0?t:zn;return wt.count(Jn).then((function(e){var t=Promise.resolve();if(e>=n){var r=e-n+1;X.log("Event deduplication list limit has been reached. Oldest ids are about to be removed (".concat(r," of them)")),t=wt.trimItems(Jn,r)}return t})).then((function(){return X.info("New event deduplication id is added to the list: ".concat(e)),wt.addItem(Jn,{id:e})}))}(e):Promise.reject({message:"Event won't be tracked, since it was previously tracked with the same deduplication id ".concat(e)})})):Promise.resolve()}function Zn(e){return{clickTime:Le(),source:"web_referrer",referrer:decodeURIComponent(e)}}function $n(e,t){var n;(n=e||window.location.search.substring(1).split("&").map((function(e){return e.split("=")})).reduce(R,{}).adjust_referrer)&&cn({url:"/sdk_click",method:"POST",params:Zn(n)},{timestamp:t})}var er=["logLevel","logOutput"],tr=null,nr=!1,rr=!1,or=!1;function ir(){Fn()&&Gn(!0,"start")}function ar(){var e;"paused"===Xt()&&(qn(),Promise.all([(e={uuid:"unknown"},Xe.current=e,wt.clear(Zt).then((function(){return wt.addItem(Zt,e)}))),wt.clear(mn),wt.clear(an)]).then(lr))}function ur(){return nr||oe.isInitialised()}function sr(){nr=!1,rr=!1,Hn=[],rn.clear(),un.running=!1,un.timestamp=null,un.pause=null,Dn=!1,Xe.toBackground(),En(),Pn&&(clearTimeout(wn),Kt(xn,Pn.visibilityChange,jn),Bt(xn,Pn.visibilityChange,An)),Tn.clear()}function cr(e){e&&X.log("Adjust SDK has been shutdown due to asynchronous disable"),sr(),$e.forEach(clearTimeout),$e=[],Ze={},Xe.destroy(),Kt(window,"online",Tt),Kt(window,"offline",_t),wt.destroy(),oe.destroy()}function lr(){or=!1,cr(),Bn.clear(),tr=null,X.log("Adjust SDK instance has been destroyed")}function dr(e){X.log("Adjust SDK is starting with web_uuid set to ".concat(e.uuid));var t=Xe.current.installed;"paused"===Xt()&&(X.log(Kn.running),Ln(!0)),t||Wn();var n=Xt(),r=function(e){return"Adjust SDK start has been interrupted ".concat(e)};return"off"===n?(cr(),Promise.reject({interrupted:!0,message:r("due to complete async disable")})):"paused"===n?(sr(),Promise.reject({interrupted:!0,message:r("due to partial async disable")})):rr?Promise.reject({interrupted:!0,message:r("due to multiple synchronous start attempt")}):(dn({cleanUp:!0}),Nn().then((function(){nr=!1,rr=!0,t&&(fr(),Wn())})))}function fr(){var e;or=!0,Hn.forEach((function(e){"function"==typeof e.method&&(X.log("Delayed ".concat(e.description," task is running now")),e.method(e.timestamp))})),Hn=[],(e="sdk:installed")&&T(Ze).some((function(t){var n=l(t,2)[1];return n.some((function(t,r){if(t.id===e)return n.splice(r,1),!0}))}))}function pr(e){if(e.interrupted)X.log(e.message);else if(cr(),X.error("Adjust SDK start has been canceled due to an error",e),e.stack)throw e}function mr(e){"off"!==Xt()?(oe.set(e),Bt(window,"online",Tt),Bt(window,"offline",_t),et("sdk:installed",fr),et("sdk:shutdown",(function(){return cr(!0)})),et("sdk:gdpr-forget-me",ar),et("sdk:third-party-sharing-opt-out",Vn),et("attribution:check",(function(e,t){return n=t,r=Xe.current,(o=(n||{}).ask_in)||!r.attribution&&r.installed?(Tn.send({params:a({initiatedBy:n?"backend":"sdk"},Xe.getParams()),wait:o}),Xe.updateSessionOffset(),nn()):Promise.resolve(r);var n,r,o})),"function"==typeof e.attributionCallback&&et("attribution:change",e.attributionCallback),($t?Promise.reject({interrupted:!0,message:"Adjust SDK start already in progress"}):($t=!0,wt.getFirst(Zt).then(en).then((function(e){if(e.exists)return $t=!1,e.stored;var t,n=N(Xe.current)?{uuid:(t=Date.now(),"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,(function(e){var n=(t+16*Math.random())%16|0;return t=Math.floor(t/16),("x"===e?n:11&n).toString(16)})))}:Xe.current;return wt.addItem(Zt,n).then((function(){return Xe.init(n),dt(),$t=!1,n}))})))).then(dr).then($n).catch(pr)):X.log("Adjust SDK is disabled, can not start the sdk")}function hr(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=n.schedule,o=n.waitForInitFinished,i=n.optionalInit;if(wt.getType()!==b.NO_STORAGE)if("on"===Xt())if(i||ur()||!o){if("function"==typeof t){if(!r||or&&rr||!i&&!ur())return t();Yn(t,e),X.log("Running ".concat(e," is delayed until Adjust SDK is up"))}}else X.error("Adjust SDK can not ".concat(e,", sdk instance is not initialized"));else X.log("Adjust SDK is disabled, can not ".concat(e));else X.log("Adjust SDK can not ".concat(e,", no storage available"))}const vr={initSdk:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.logLevel,n=e.logOutput,r=u(e,er);X.setLogLevel(t,n),ur()?X.error("You already initiated your instance"):oe.hasMissing(r)||(nr=!0,wt.init(r.namespace).then((function(e){e.type!==b.NO_STORAGE?(X.info("Available storage is ".concat(e.type)),tr=a({},r),mr(r)):X.error("Adjust SDK can not start, there is no storage available")})))},getAttribution:function(){return hr("get attribution",(function(){return Xe.getAttribution()}))},getWebUUID:function(){return hr("get web_uuid",(function(){return Xe.getWebUUID()}))},setReferrer:function(e){e&&"string"==typeof e?hr("setting reftag",(function(t){return $n(e,t)}),{schedule:!0,waitForInitFinished:!0,optionalInit:!0}):X.error("You must provide a string referrer")},trackEvent:function(e){return function(e){if(wt.getType()===b.NO_STORAGE){var t="Adjust SDK can not track event, no storage available";return X.log(t),Promise.reject(t)}if("on"!==Xt()){var n="Adjust SDK is disabled, can not track event";return X.log(n),Promise.reject(n)}if(!ur()){var r="Adjust SDK can not track event, sdk instance is not initialized";return X.error(r),Promise.reject(r)}return new Promise((function(t){var n=function(n){return t(function(e,t){if(!e||e&&(N(e)||!e.eventToken)){var n="You must provide event token in order to track event";return X.error(n),Promise.reject(n)}return Xn(e.deduplicationId).then(gn).then((function(n){return cn({url:"/event",method:"POST",params:Qn(e,n)},{timestamp:t})})).catch((function(e){return e&&e.message&&X.error(e.message),Promise.reject(e)}))}(e,n))};!or||!rr&&ur()?(Yn(n,"track event"),X.log("Running track event is delayed until Adjust SDK is up")):n()}))}(e)},addGlobalCallbackParameters:function(e){hr("add global callback parameters",(function(){return yn(e,"callback")}))},addGlobalPartnerParameters:function(e){hr("add global partner parameters",(function(){return yn(e,"partner")}))},removeGlobalCallbackParameter:function(e){hr("remove global callback parameter",(function(){return bn(e,"callback")}))},removeGlobalPartnerParameter:function(e){hr("remove global partner parameter",(function(){return bn(e,"partner")}))},clearGlobalCallbackParameters:function(){hr("remove all global callback parameters",(function(){return kn("callback")}))},clearGlobalPartnerParameters:function(){hr("remove all global partner parameters",(function(){return kn("partner")}))},switchToOfflineMode:function(){hr("set offline mode",(function(){return fn(!0)}))},switchBackToOnlineMode:function(){hr("set online mode",(function(){return fn(!1)}))},stop:function(){Qt()&&oe.isInitialised()&&cr()},restart:function(){var e;((e=st()||{}).reason===g?(X.log("Adjust SDK is disabled due to GDPR-Forget-Me request and it can not be re-enabled"),!1):e.reason?(X.log("Adjust SDK has been enabled"),ct(null),!0):(X.log("Adjust SDK is already enabled"),!1))&&tr&&mr(tr)},gdprForgetMe:function(){var e=Ln();e&&(e=Qt(g,!0))&&oe.isInitialised()&&sr()},disableThirdPartySharing:function(){hr("disable third-party sharing",ir,{schedule:!0})},initSmartBanner:function(){X.error("function `initSmartBanner` is deprecated")},showSmartBanner:function(){X.error("function `showSmartBanner` is deprecated")},hideSmartBanner:function(){X.error("function `hideSmartBanner` is deprecated")},__testonly__:{destroy:lr,clearDatabase:function(){return wt.deleteDatabase()}},__internal__:{restartAfterAsyncEnable:function(){X.log("Adjust SDK has been restarted due to asynchronous enable"),tr&&mr(tr)}}};return t=t.default})())); \ No newline at end of file +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.Adjust=t():e.Adjust=t()}(self,(()=>(()=>{"use strict";var e={d:(t,n)=>{for(var r in n)e.o(n,r)&&!e.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:n[r]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t)},t={};function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}function r(e){var t=function(e,t){if("object"!=n(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var o=r.call(e,t||"default");if("object"!=n(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==n(t)?t:t+""}function o(e,t,n){return(t=r(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function s(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);nyr});var f=1e3,m=60*f,p=60*m,h=24*p,v="general",g="gdpr",y={TRANSACTION_ERROR:"XHR transaction failed due to an error",SERVER_MALFORMED_RESPONSE:"Response from server is malformed",SERVER_INTERNAL_ERROR:"Internal error occurred on the server",SERVER_CANNOT_PROCESS:"Server was not able to process the request, probably due to error coming from the client",NO_CONNECTION:"No internet connectivity",SKIP:"Skipping slower attempt",MISSING_URL:"Url is not provided"},b={NO_STORAGE:"noStorage",INDEXED_DB:"indexedDB",LOCAL_STORAGE:"localStorage"},k={endpointName:"Default",app:"https://app.adjust.com",gdpr:"https://gdpr.adjust.com"},w={endpointName:"Indian",app:"https://app.adjust.net.in",gdpr:"https://gdpr.adjust.net.in"},P={endpointName:"Chinese",app:"https://app.adjust.world",gdpr:"https://gdpr.adjust.world"},S={endpointName:"EU",app:"https://app.eu.adjust.com",gdpr:"https://gdpr.eu.adjust.com"},D={endpointName:"TR",app:"https://app.tr.adjust.com",gdpr:"https://gdpr.tr.adjust.com"},I={endpointName:"US",app:"https://app.us.adjust.com",gdpr:"https://gdpr.us.adjust.com"},x={WEB_UUID_CREATED:"activity:web_uuid",ATTRIBUTION_RECEIVED:"activity:attribution"};function N(e){return!Object.keys(e).length&&e.constructor===Object}function O(e){return"object"===n(e)&&null!==e&&!(e instanceof Array)}function A(e){try{return O(JSON.parse(e))}catch(e){return!1}}function E(e,t,n){function r(e){return Array.isArray(t)?t.every((function(t){return e[t]===n[t]})):e[t]===n}for(var o=0;o0&&void 0!==arguments[0]?arguments[0]:[]).reduce((function(e,t){return a(a({},e),{},o({},t.key,t.value))}),{})}function C(){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:[]).filter((function(t){return-1!==e.indexOf(t)}))}function R(e,t){return new RegExp("\\/".concat(t,"(\\/.*|\\?.*){0,1}$")).test(e)}function T(e,t){var n=l(t,2),r=n[0],i=n[1];return a(a({},e),{},o({},r,i))}function _(e){return Object.keys(e).map((function(t){return[t,e[t]]}))}function B(e){return Object.keys(e).map((function(t){return e[t]}))}function U(e){return O(e)?!N(e):!!e||0===e}function K(){try{var e=(new Date).toString(),t=window.localStorage;t.setItem(e,e);var n=t.getItem(e)===e;return t.removeItem(e),!(!n||!t)}catch(e){return!1}}const L={namespace:"adjust-sdk",version:"5.6.0",env:"production"};var q="error",M="warning",F="info",G="verbose",W=o(o(o(o(o({},"none",-1),q,0),M,1),F,2),G,3),V={log:" ",info:" ",warn:" ",error:""},H={development:G,production:q,test:G},Y=J(),z="";function J(){return H[L.env]||q}function Q(e,t){var n;if(!(W[Y]2?u-2:0),c=2;c2&&void 0!==arguments[2]?arguments[2]:[]).map((function(n){return Ee(e,t,n)}))}function Ce(e,t,n){var r=Se[t][Te(e,Oe.right)],o=r.fields[r.keyPath],i=n instanceof Array?n.slice():[n],a=(fe(o)?o.composite:[r.keyPath]).map((function(e,t){var n=r.fields[e];return Ae(le(n)?n.values:null,i[t])}));return 1===a.length?a[0]:a}function Re(e){return Se.values[e]||e}function Te(e,t){return(Se.storeNames[t][e]||{}).name||e}function _e(e,t){return{name:t.name,message:t.message.replace('"'.concat(e,'"'),Te(e,Oe.right))}}function Be(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Ue(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:1,n=e+"",r=1;r<=t;r+=1)e0?"-":"+")+Le(Math.floor(Math.abs(t)/60))+Le(Math.abs(t)%60)}(t);return"".concat(n,"T").concat(r,"Z").concat(o)}function Me(e,t){return isNaN(e)||isNaN(t)?0:Math.abs(t-e)}var Fe={},Ge=[];function We(e,t){var n="id"+Math.random().toString(36).substring(2,16),r={id:n,cb:t};return Fe[e]||(Fe[e]=[]),Fe[e].push(r),n}function Ve(e,t){Fe[e]&&Fe[e].forEach((function(n){"function"==typeof n.cb&&Ge.push(setTimeout((function(){return n.cb(e,t)})))}))}var He={},Ye=!1,ze=!1;function Je(){He=Ye?a({},arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}):{}}function Qe(){Ye&&(He.lastInterval=function(){var e=He.lastActive;if(e)return Math.round(Me(e,Date.now())/f);return-1}(),He.lastActive=Date.now())}function Xe(e){He=a(a({},He),e)}function Ze(){ze=!0}function $e(){var e=He.lastActive;return Math.round(Me(e,Date.now())/f)}function et(){return(He.timeSpent||0)+(ze?$e():0)}function tt(){var e=Me(He.lastActive,Date.now())=0?He.lastInterval:0,n={timeSpent:He.timeSpent||0,sessionLength:He.sessionLength||0,sessionCount:He.sessionCount||1,lastInterval:t||0};return e&&R(e,"event")&&(n.eventCount=He.eventCount),n},updateParams:function(e,t){if(Ye){var n={};n.timeSpent=et(),n.sessionLength=tt(),R(e,"session")&&(n.sessionCount=(He.sessionCount||0)+1),R(e,"event")&&(n.eventCount=(He.eventCount||0)+1),Xe(n),t||Qe()}},updateInstalled:function(){Ye&&(He.installed||Xe({installed:!0}))},updateSessionOffset:nt,updateSessionLength:function(){Ye&&(Xe({sessionLength:tt()}),Qe())},resetSessionOffset:function(){Ye&&Xe({timeSpent:0,sessionLength:0})},updateLastActive:Qe,destroy:function(){He={},Ye=!1,ze=!1},getAttribution:function(){return Ye?He.attribution?He.attribution:(Z.log("No attribution data yet"),null):null},getWebUUID:function(){return Ye?He.uuid:null},waitForAttribution:function(){return He.attribution?Promise.resolve(He.attribution):new Promise((function(e){return We(x.ATTRIBUTION_RECEIVED,(function(t,n){return e(n)}))}))},waitForWebUUID:function(){return He.uuid?Promise.resolve(He.uuid):new Promise((function(e){return We(x.WEB_UUID_CREATED,(function(t,n){return e(n)}))}))}};var ot=function(){return Ke((function e(){Be(this,e),o(this,"items",{})}),[{key:"getItem",value:function(e){return Object.prototype.hasOwnProperty.call(this.items,e)?this.items[e]:null}},{key:"removeItem",value:function(e){delete this.items[e]}},{key:"setItem",value:function(e,t){this.items[e]=t}}])}();const it=new(function(){return Ke((function e(){var t=this;Be(this,e),o(this,"defaultName",L.namespace),o(this,"storageName",this.defaultName),o(this,"storeNames",Se.storeNames.left),this.storesMap={},K()?this.storage=window.localStorage:this.storage=new ot;var n=this.read.bind(this),r=this.write.bind(this);B(this.storeNames).forEach((function(e){var o=e.name;Object.defineProperty(t.storesMap,o,{get:function(){return n(o)},set:function(e){r(o,e)}})})),Object.freeze(this.storesMap)}),[{key:"read",value:function(e){var t=this.storage.getItem("".concat(this.storageName,".").concat(e)),n=t?JSON.parse(t):null;return e===se.Preferences&&n?Ee(se.Preferences,Oe.right,n):n}},{key:"write",value:function(e,t){t?this.storage.setItem("".concat(this.storageName,".").concat(e),JSON.stringify(t instanceof Array?t:Ee(se.Preferences,Oe.left,t))):this.storage.removeItem("".concat(this.storageName,".").concat(e))}},{key:"clear",value:function(){this.deleteData()}},{key:"deleteData",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];B(this.storeNames).forEach((function(n){!t&&n.permanent||e.storage.removeItem("".concat(e.storageName,".").concat(n.name))}))}},{key:"setCustomName",value:function(e){var t=this;if(e&&e.length){var n="".concat(L.namespace,"-").concat(e);B(this.storeNames).forEach((function(e){var r=e.name,o=t.storage.getItem("".concat(t.storageName,".").concat(r));o&&t.storage.setItem("".concat(n,".").concat(r),o)})),this.deleteData(!0),this.storageName=n}}},{key:"stores",get:function(){return this.storesMap}}])}());var at=pe.preferences.name,ut=st();function st(){return ut||ct(),ut?a({},ut):null}function ct(){ut=it.stores[at]}function lt(){var e=st();return e?e.sdkDisabled:null}function dt(e){var t=e?a({},e):null;it.stores[at]=a(a({},st()),{},{sdkDisabled:t}),ct()}function ft(){var e=st();return e?e.thirdPartySharingDisabled:null}function mt(){var e=it.stores[at]||{},t=(ut||{}).sdkDisabled||null;e.sdkDisabled&&!t&&Ve("sdk:shutdown"),ct()}function pt(){it.stores[at]||(it.stores[at]=a({},ut))}var ht=function(e){return e.add="add",e.put="put",e.get="get",e.list="list",e.clear="clear",e.delete="delete",e}(ht||{}),vt=function(e){return e.readonly="readonly",e.readwrite="readwrite",e}(vt||{}),gt=function(){function e(){Be(this,e),o(this,"dbDefaultName",L.namespace),o(this,"dbName",this.dbDefaultName),o(this,"dbVersion",1),o(this,"indexedDbConnection",null),o(this,"notSupportedError",{name:"IDBNotSupported",message:"IndexedDB is not supported"}),o(this,"databaseOpenError",{name:"CannotOpenDatabaseError",message:"Cannot open a database"}),o(this,"noConnectionError",{name:"NoDatabaseConnection",message:"Cannot open a transaction"});var t=e.getIndexedDB();if(!t)throw this.notSupportedError;this.idbFactory=t}return Ke(e,[{key:"setCustomName",value:function(e){return e&&e.length>0?(this.dbName="".concat(L.namespace,"-").concat(e),this.migrateDb(this.dbDefaultName,this.dbName)):Promise.resolve()}},{key:"openDatabase",value:function(t,n,r){var o=this;return e.isSupported().then((function(e){return e?new Promise((function(e,i){var a=o.idbFactory.open(t,r);n&&(a.onupgradeneeded=function(e){return n(e,i)}),a.onsuccess=function(t){var n=t.target.result;n?e(n):i(o.databaseOpenError)},a.onerror=i})):Promise.reject(o.notSupportedError)}))}},{key:"databaseExists",value:function(e){var t=this;return new Promise((function(n){var r=!0;t.openDatabase(e,(function(){r=!1})).then((function(n){if(n.close(),!r)return t.deleteDatabaseByName(e)})).then((function(){return n(r)}))}))}},{key:"cloneData",value:function(e,t){var n=this;return B(Se.storeNames.left).map((function(e){return e.name})).filter((function(e){return"p"!==e})).map((function(r){return function(){return o=r,i=n.indexedDbConnection,n.indexedDbConnection=e,n.getAll(o).then((function(e){if(n.indexedDbConnection=t,!(e.length<1))return n.addBulk(o,e,!0)})).then((function(){n.indexedDbConnection=i}));var o,i}})).reduce((function(e,t){return e.then(t)}),Promise.resolve())}},{key:"migrateDb",value:function(e,t){var n=this;return this.databaseExists(e).then((function(r){return r?Promise.all([n.openDatabase(e,n.handleUpgradeNeeded,n.dbVersion),n.openDatabase(t,n.handleUpgradeNeeded,n.dbVersion)]).then((function(t){var r=l(t,2),o=r[0],i=r[1];return n.cloneData(o,i).then((function(){return n.indexedDbConnection=i,o.close(),n.deleteDatabaseByName(e)}))})).then((function(){return Z.info("Database migration finished")})):n.openDatabase(t,n.handleUpgradeNeeded,n.dbVersion).then((function(e){n.indexedDbConnection=e}))}))}},{key:"handleUpgradeNeeded",value:function(e,t){var n=e.target.result;e.target.transaction.onerror=t,e.target.transaction.onabort=t;var r=Se.storeNames.left,o=rt.current||{},i=o&&!N(o);_(r).filter((function(e){return!l(e,2)[1].permanent})).forEach((function(e){var t=l(e,2),r=t[0],a=t[1].name,u=Se.right[r],s=n.createObjectStore(a,{keyPath:u.keyPath,autoIncrement:u.autoIncrement||!1});if(u.index&&s.createIndex("".concat(u.index,"Index"),u.index),a===ue.ActivityState&&i)return s.add(Ee(r,Oe.left,o)),void Z.info("Activity state has been recovered");var c=it.stores[a];c&&(c.forEach((function(e){return s.add(e)})),Z.info("Migration from localStorage done for ".concat(r," store")))})),pt(),it.clear()}},{key:"open",value:function(){var e=this;return this.indexedDbConnection?Promise.resolve({success:!0}):this.openDatabase(this.dbName,this.handleUpgradeNeeded,this.dbVersion).then((function(t){return e.indexedDbConnection=t,e.indexedDbConnection.onclose=function(){return e.destroy},{success:!0}}))}},{key:"getTransactionStore",value:function(e,t,n){var r,o=e.storeName,i=e.mode,a=n.transaction([o],i),u=a.objectStore(o),s=Se.right[Te(o,Oe.right)];return s.index&&(r=u.index("".concat(s.index,"Index"))),a.onerror=t,a.onabort=t,{transaction:a,store:u,index:r,options:s}}},{key:"overrideError",value:function(e,t){var n=t.target.error;return e({name:n.name,message:n.message})}},{key:"getCompositeKeys",value:function(e){var t=e.fields[e.keyPath];return fe(t)?t.composite:null}},{key:"targetIsObject",value:function(e){return O(e)}},{key:"prepareTarget",value:function(e,t,n){if(n===ht.clear||!t)return null;var r=this.getCompositeKeys(e);return-1!==[ht.add,ht.put].indexOf(n)?this.targetIsObject(t)?r?a(o({},e.keyPath,r.map((function(e){return t[e]})).join("")),t):t:null:t instanceof Array?t.join(""):t}},{key:"prepareResult",value:function(e,t){var n=this.getCompositeKeys(e);return n&&this.targetIsObject(t)?n.map((function(e){return t[e]})):null}},{key:"initRequest",value:function(e){var t=this,n=e.storeName,r=e.target,o=void 0===r?null:r,i=e.action,a=e.mode,u=void 0===a?vt.readonly:a;return this.open().then((function(){return new Promise((function(e,r){if(t.indexedDbConnection){var a=t.getTransactionStore({storeName:n,mode:u},r,t.indexedDbConnection),s=a.store,c=a.options,l=s[i](t.prepareTarget(c,o,i)),d=t.prepareResult(c,o);l.onsuccess=function(){i!==ht.get||l.result?e(d||l.result||o):r({name:"NotRecordFoundError",message:'Requested record not found in "'.concat(n,'" store')})},l.onerror=function(e){return t.overrideError(r,e)}}else r(t.noConnectionError)}))}))}},{key:"initBulkRequest",value:function(e){var t=this,n=e.storeName,r=e.target,o=e.action,i=e.mode,a=void 0===i?vt.readwrite:i;return!r||r&&!r.length?Promise.reject({name:"NoTargetDefined",message:"No array provided to perform ".concat(o,' bulk operation into "').concat(n,'" store')}):this.open().then((function(){return new Promise((function(e,i){if(t.indexedDbConnection){var u=t.getTransactionStore({storeName:n,mode:a},i,t.indexedDbConnection),s=u.transaction,c=u.store,l=u.options,d=new Array,f=r[0];s.oncomplete=function(){return e(d)};!function e(n){n.onerror=function(e){return t.overrideError(i,e)},n.onsuccess=function(){d.push(t.prepareResult(l,f)||n.result),f=r[d.length],d.length1&&void 0!==arguments[1]&&arguments[1];return this.openCursor({storeName:e,action:ht.list,firstOnly:t})}},{key:"getFirst",value:function(e){return this.getAll(e,!0).then((function(e){return e.length?e[0]:void 0}))}},{key:"getItem",value:function(e,t){return this.initRequest({storeName:e,target:t,action:ht.get})}},{key:"filterBy",value:function(e,t){var n=IDBKeyRange.only(t);return this.openCursor({storeName:e,action:ht.list,range:n})}},{key:"addItem",value:function(e,t){return this.initRequest({storeName:e,target:t,action:ht.add,mode:vt.readwrite})}},{key:"addBulk",value:function(e,t,n){return this.initBulkRequest({storeName:e,target:t,action:n?ht.put:ht.add,mode:vt.readwrite})}},{key:"updateItem",value:function(e,t){return this.initRequest({storeName:e,target:t,action:ht.put,mode:vt.readwrite})}},{key:"deleteItem",value:function(e,t){return this.initRequest({storeName:e,target:t,action:ht.delete,mode:vt.readwrite})}},{key:"deleteBulk",value:function(e,t,n){var r=n?IDBKeyRange[n](t):IDBKeyRange.only(t);return this.openCursor({storeName:e,action:ht.delete,range:r,mode:vt.readwrite})}},{key:"trimItems",value:function(e,t){var n=this,r=Se.right[Te(e,Oe.right)];return this.getAll(e).then((function(e){return e.length?e[t-1]:null})).then((function(t){return t?n.deleteBulk(e,t[r.keyPath],xe.UpperBound):[]}))}},{key:"count",value:function(e){var t=this;return this.open().then((function(){return new Promise((function(n,r){if(t.indexedDbConnection){var o=t.getTransactionStore({storeName:e,mode:vt.readonly},r,t.indexedDbConnection).store.count();o.onsuccess=function(){return n(o.result)},o.onerror=function(e){return t.overrideError(r,e)}}else r(t.noConnectionError)}))}))}},{key:"clear",value:function(e){return this.initRequest({storeName:e,action:ht.clear,mode:vt.readwrite})}},{key:"destroy",value:function(){this.indexedDbConnection&&this.indexedDbConnection.close(),this.indexedDbConnection=null}},{key:"deleteDatabase",value:function(){return this.destroy(),this.deleteDatabaseByName(this.dbName)}}],[{key:"tryOpen",value:function(t){return new Promise((function(n){try{var r=t.open(e.dbValidationName);r.onsuccess=function(){r.result.close(),t.deleteDatabase(e.dbValidationName),n(!0)},r.onerror=function(){return n(!1)}}catch(e){n(!1)}}))}},{key:"isSupported",value:function(){if(e.isSupportedPromise)return e.isSupportedPromise;var t="IndexedDB is not supported in this browser";return e.isSupportedPromise=new Promise((function(n){var r=e.getIndexedDB(),o=!!navigator.platform&&/iPad|iPhone|iPod/.test(navigator.platform);!r||o?(Z.warn(t),n(!1)):n(e.tryOpen(r).then((function(e){return e||Z.warn(t),e})))})),e.isSupportedPromise}},{key:"getIndexedDB",value:function(){return window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB}}])}();o(gt,"dbValidationName","validate-db-openable"),o(gt,"isSupportedPromise",null);var yt=function(){function e(){Be(this,e)}return Ke(e,[{key:"open",value:function(){return e.isSupported().then((function(e){if(!e)return{status:"error",error:{name:"LSNotSupported",message:"LocalStorage is not supported"}};var t=Se.storeNames.left,n=rt.current||{},r=n&&!N(n);return _(t).filter((function(e){return!l(e,2)[1].permanent})).forEach((function(e){var t=l(e,2),o=t[0],i=t[1].name;i!==ue.ActivityState||it.stores[i]?it.stores[i]||(it.stores[i]=[]):it.stores[i]=r?[Ee(o,Oe.left,n)]:[]})),pt(),{status:"success"}}))}},{key:"getCompositeKeys",value:function(e){var t=e.fields[e.keyPath];return fe(t)?t.composite:null}},{key:"getKeys",value:function(e){var t=Te(e,Oe.right),n=Se.right[t];return this.getCompositeKeys(n)||[n.keyPath]}},{key:"nextIndex",value:function(e){return"number"==typeof e?e+1:void 0}},{key:"initRequest",value:function(e,t){var n=this,r=e.storeName,o=e.id,i=e.item,u=Se.right[Te(r,Oe.right)];return this.open().then((function(e){return"error"===e.status?Promise.reject(e.error):new Promise((function(e,s){var c,l=it.stores[r],d=n.getKeys(r),f=(l[l.length-1]||{})[u.keyPath]||0;if(o){var m=Array.isArray(o)?o.slice():[o];c=d.map((function(e,t){return[e,m[t]]})).reduce(T,{})}else c=a({},i);var p=c?E(l,d,c):0;return t(e,s,{keys:d,items:l,index:p,options:u,lastId:f})}))}))}},{key:"sort",value:function(e,t,n){var r=d(e),o=t.slice().reverse();return r.sort((function(e,t){return o.reduce((function(r,o){return r||function(e,t,r){var o=n?n===e[r]:e[r]e[r]:e[r]>t[r];return o?-1:i?1:0}(e,t,o)}),0)}))}},{key:"prepareTarget",value:function(e,t,n){var r=this.getCompositeKeys(e);return r?a(o({},e.keyPath,r.map((function(e){return t[e]})).join("")),t):e.autoIncrement&&n?a(o({},e.keyPath,n),t):a({},t)}},{key:"prepareResult",value:function(e,t){var n=this.getCompositeKeys(e);return n?n.map((function(e){return t[e]})).filter((function(e){return!Ne(e)})):t[e.keyPath]}},{key:"getAll",value:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return this.open().then((function(r){return"error"===r.status?Promise.reject(r.error):new Promise((function(r,o){var i=it.stores[e];i instanceof Array?r(n?[i[0]]:t.sort(i,t.getKeys(e))):o({name:"NotFoundError",message:"No objectStore named ".concat(e," in this database")})}))}))}},{key:"getFirst",value:function(e){return this.getAll(e,!0).then((function(e){return e.length?e[0]:void 0}))}},{key:"getItem",value:function(e,t){var n=this;return this.initRequest({storeName:e,id:t},(function(t,r,o){var i=o.items,a=o.index,u=o.options;-1===a?r({name:"NotRecordFoundError",message:'Requested record not found in "'.concat(e,'" store')}):t(n.prepareTarget(u,i[a]))}))}},{key:"filterBy",value:function(e,t){return this.getAll(e).then((function(n){return n.filter((function(n){var r=Se.right[Te(e,Oe.right)];return(r.index&&n[r.index])===t}))}))}},{key:"addItem",value:function(e,t){var n=this;return this.initRequest({storeName:e,item:t},(function(r,o,i){var a=i.items,u=i.index,s=i.options,c=i.lastId;-1!==u?o({name:"ConstraintError",message:'Constraint was not satisfied, trying to add existing item into "'.concat(e,'" store')}):(a.push(n.prepareTarget(s,t,n.nextIndex(c))),it.stores[e]=a,r(n.prepareResult(s,t)))}))}},{key:"addBulk",value:function(e,t,n){var r=this;return this.initRequest({storeName:e},(function(o,i,a){var u=a.keys,s=a.items,c=a.options,l=a.lastId;if(!t||t&&!t.length)i({name:"NoTargetDefined",message:'No array provided to perform add bulk operation into "'.concat(e,'" store')});else{var f=l,m=t.map((function(e){return r.prepareTarget(c,e,f=r.nextIndex(f))})),p=m.filter((function(e){return-1!==E(s,u,e)})).map((function(e){return e[c.keyPath]})),h=n?s.filter((function(e){return-1===p.indexOf(e[c.keyPath])})):d(s);if(p.length&&!n)i({name:"ConstraintError",message:'Constraint was not satisfied, trying to add existing items into "'.concat(e,'" store')});else it.stores[e]=r.sort([].concat(d(h),d(m)),u),o(t.map((function(e){return r.prepareResult(c,e)})))}}))}},{key:"updateItem",value:function(e,t){var n=this;return this.initRequest({storeName:e,item:t},(function(r,o,i){var a=i.items,u=i.index,s=i.options,c=i.lastId,l=-1===u?n.nextIndex(c):void 0,d=n.prepareTarget(s,t,l);-1===u?a.push(d):a.splice(u,1,d),it.stores[e]=a,r(n.prepareResult(s,t))}))}},{key:"deleteItem",value:function(e,t){return this.initRequest({storeName:e,id:t},(function(n,r,o){var i=o.items,a=o.index;-1!==a&&(i.splice(a,1),it.stores[e]=i),n(t)}))}},{key:"findMax",value:function(e,t,n){if(!e.length)return-1;for(var r={index:-1,value:"string"==typeof n?"":0},o=0;o=r.value&&(r={value:e[o][t],index:o})}return r.index}},{key:"deleteBulk",value:function(e,t,n){var r=this;return this.getAll(e).then((function(o){var i=r.getKeys(e),a=Se.right[Te(e,Oe.right)].index||i[0],u=n?null:t,s=r.sort(o,i,u),c=r.findMax(s,a,t);if(-1===c)return[];var l=n===xe.LowerBound?c:0,d=n&&n!==xe.UpperBound?s.length:c+1,f=s.splice(l,d).map((function(e){return 1===i.length?e[a]:i.map((function(t){return e[t]}))}));return it.stores[e]=s,f}))}},{key:"trimItems",value:function(e,t){var n=this,r=Te(e,Oe.right),o=Se.right[r];return this.getAll(e).then((function(e){return e.length?e[t-1]:null})).then((function(t){return t?n.deleteBulk(e,t[o.keyPath],xe.UpperBound):[]}))}},{key:"count",value:function(e){return this.open().then((function(t){if("error"===t.status)return Promise.reject(t.error);var n=it.stores[e];return Promise.resolve(n instanceof Array?n.length:1)}))}},{key:"clear",value:function(e){return this.open().then((function(t){return"error"===t.status?Promise.reject(t.error):new Promise((function(t){it.stores[e]=[],t()}))}))}},{key:"destroy",value:function(){}},{key:"deleteDatabase",value:function(){}}],[{key:"isSupported",value:function(){return e.isSupportedPromise||(e.isSupportedPromise=new Promise((function(e){var t=K();t||Z.warn("LocalStorage is not supported in this browser"),e(t)}))),e.isSupportedPromise}}])}();o(yt,"isSupportedPromise",null);var bt,kt=function(e){return e[e.noStorage=b.NO_STORAGE]="noStorage",e[e.indexedDB=b.INDEXED_DB]="indexedDB",e[e.localStorage=b.LOCAL_STORAGE]="localStorage",e}(kt||{}),wt={getAll:function(e,t,n){return e.getAll(t,n).then((function(e){return je(t,Oe.right,e)}))},getFirst:function(e,t){return e.getFirst(t).then((function(e){return Ee(t,Oe.right,e)}))},getItem:function(e,t,n){return e.getItem(t,Ce(t,Oe.left,n)).then((function(e){return Ee(t,Oe.right,e)})).catch((function(e){return Promise.reject(_e(t,e))}))},filterBy:function(e,t,n){return e.filterBy(t,Re(n)).then((function(e){return je(t,Oe.right,e)}))},addItem:function(e,t,n){var r=Ee(t,Oe.left,n);return e.addItem(t,r).then((function(e){return Ce(t,Oe.right,e)})).catch((function(e){return Promise.reject(_e(t,e))}))},addBulk:function(e,t,n,r){var o=je(t,Oe.left,n);return e.addBulk(t,o,r).then((function(e){return e.map((function(e){return Ce(t,Oe.right,e)}))})).catch((function(e){return Promise.reject(_e(t,e))}))},updateItem:function(e,t,n){var r=Ee(t,Oe.left,n);return e.updateItem(t,r).then((function(e){return Ce(t,Oe.right,e)}))},deleteItem:function(e,t,n){return e.deleteItem(t,Ce(t,Oe.left,n)).then((function(e){return Ce(t,Oe.right,e)}))},deleteBulk:function(e,t,n,r){return e.deleteBulk(t,Re(n),r).then((function(e){return e.map((function(e){return Ce(t,Oe.right,e)}))}))},trimItems:function(e,t,n){return e.trimItems(t,n)},count:function(e,t){return e.count(t)},clear:function(e,t){return e.clear(t)},destroy:function(e){return e.destroy()},deleteDatabase:function(e){return e.deleteDatabase()}};var Pt=null;function St(e){var t=null;return null!==Pt?Pt:Pt=Promise.all([gt.isSupported(),yt.isSupported()]).then((function(n){var r=l(n,2),o=r[0],i=r[1];if(it.setCustomName(e),o){bt=kt.indexedDB;var a=new gt;return a.setCustomName(e).then((function(){return t=a}))}return i?(bt=kt.localStorage,t=new yt,Promise.resolve(t)):(Z.error("There is no storage available, app will run with minimum set of features"),bt=kt.noStorage,t=null,Promise.resolve(t))})).then((function(){return{type:bt,storage:t}}))}const Dt=a({init:St,getType:function(){return bt}},(It=_(wt).map((function(e){var t=l(e,2),n=t[0],r=t[1];return[n,function(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),o=1;o2&&void 0!==arguments[2]&&arguments[2]?"CONTINUE":"RETRY",response:A(e.responseText)?JSON.parse(e.responseText):e.responseText,message:y[t],code:t}}function Ot(e,t){var n=e.slice(0,e.length-t.length-1).split("").reduce((function(e){return e.concat(" ")}),"");return"".concat(t).concat(n,":")}function At(e,t){var n="REQUEST PARAMETERS:",r=function(e){return e.replace(/([A-Z])/g,(function(e){return"_".concat(e.toLowerCase())}))},o=_(a(a(a({},ie.getBaseParams()),t),e)).map((function(e){var t=l(e,2),n=t[0],o=t[1];return[r(n),o]}));return Z.log(n),o.filter((function(e){return U(l(e,2)[1])})).map((function(e){var t=l(e,2),r=t[0],o=t[1];return Z.log(Ot(n,r),o),function(e){var t=l(e,2),n=t[0],r=t[1],o=encodeURIComponent(n),i=r;return"string"==typeof r&&(i=encodeURIComponent(r)),O(r)&&(i=encodeURIComponent(JSON.stringify(r)||"")),[o,i].join("=")}([r,o])})).join("&")}function Et(e,t,n){var r=n.xhr,o=n.url;if(4===r.readyState){var i=r.status>=200&&r.status<300,a=A(r.responseText);if(0!==r.status)return a?t(i?function(e,t){var n=JSON.parse(e.responseText),r={status:"success",adid:n.adid,timestamp:n.timestamp,ask_in:n.ask_in,retry_in:n.retry_in,continue_in:n.continue_in,tracking_state:n.tracking_state,attribution:void 0,message:void 0};return R(t,"attribution")&&(r.attribution=n.attribution,r.message=n.message),_(r).filter((function(e){return!!l(e,2)[1]})).reduce(T,{})}(r,o):Nt(r,"SERVER_CANNOT_PROCESS",!0)):e(Nt(r,i?"SERVER_MALFORMED_RESPONSE":"SERVER_INTERNAL_ERROR"));e(Nt(r,"NO_CONNECTION"))}}function jt(e,t){var n=e.endpoint,r=e.url,o=e.method,i=void 0===o?"GET":o,a=e.params,u=function(e,t){var n=e.endpoint,r=e.url,o=e.method,i=At(e.params,t);return{fullUrl:n+r+("GET"===o?"?".concat(i):""),encodedParams:i}}({endpoint:n,url:r,method:i,params:void 0===a?{}:a},t),s=u.fullUrl,c=u.encodedParams;return new Promise((function(e,t){var n=new XMLHttpRequest;n.open(i,s,!0),function(e,t){var n="REQUEST HEADERS:",r=[["Client-SDK","js".concat(L.version)],["Content-Type","POST"===t?"application/x-www-form-urlencoded":"application/json"]];Z.log(n),r.forEach((function(t){var r=l(t,2),o=r[0],i=r[1];e.setRequestHeader(o,i),Z.log(Ot(n,o),i)}))}(n,i),n.onreadystatechange=function(){return Et(t,e,{xhr:n,url:r})},n.onerror=function(){return t(Nt(n,"TRANSACTION_ERROR"))},n.send("GET"===i?void 0:c)}))}function Ct(e,t){return"success"===e.status?function(e,t){var n=R(t,"gdpr_forget_device"),r=R(t,"attribution"),o=R(t,"session"),i=R(t,"disable_third_party_sharing"),a="opted_out"===e.tracking_state;if(!n&&a)return Ve("sdk:gdpr-forget-me"),e;r||n||a||!e.ask_in||Ve("attribution:check",e);o&&Ve("session:finished",e);if(i)return Ve("sdk:third-party-sharing-opt-out"),e;return e}(e,t):e}var Rt={long:{delay:2*m,maxDelay:h,minRange:.5,maxRange:1},short:{delay:200,maxDelay:p,minRange:.5,maxRange:1},test:{delay:100,maxDelay:300}};function Tt(e,t){var n,r,o=Rt[t=t||"long"],i=o.delay*Math.pow(2,e-1);return i=Math.min(i,o.maxDelay),o.minRange&&o.maxRange&&(i*=(n=o.minRange,r=o.maxRange,Math.random()*(r-n)+n)),Math.round(i)}var _t=navigator.onLine;function Bt(){_t=!0}function Ut(){_t=!1}function Kt(e,t,n){e.addEventListener&&e.addEventListener(t,n,!1)}function Lt(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)}var qt=function(e){return e.Default="default",e.India="india",e.China="china",e}(qt||{}),Mt=function(e){return e.EU="EU",e.TR="TR",e.US="US",e}(Mt||{});function Ft(e,t){Z.warn("Both ".concat(e," and ").concat(t," are set in config, ").concat(t," will be ignored"))}var Gt=o(o(o(o(o(o({},qt.Default,k),qt.India,w),qt.China,P),Mt.EU,S),Mt.TR,D),Mt.US,I);function Wt(e){var t,n,r,o,i=(t=ie.getCustomConfig(),n=t.customUrl,r=t.urlStrategy,o=t.dataResidency,n?((o||r)&&Ft("customUrl",o?"dataResidency":"urlStrategy"),{app:n,gdpr:n}):(o&&r&&Ft("dataResidency","urlStrategy"),o?[o]:r===qt.India?[qt.India,qt.Default]:r===qt.China?[qt.China,qt.Default]:[qt.Default,qt.India,qt.China]));return Array.isArray(i)?i.map((function(t){return e[t]||null})).filter((function(e){return!!e})):[i]}var Vt=150,Ht=2147483647,Yt=60*f;const zt=function(){var e,t,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=n.url,o=n.method,i=void 0===o?"GET":o,u=n.params,s=void 0===u?{}:u,c=n.continueCb,d=n.strategy,f=n.wait,m={url:r,method:i,params:s,continueCb:c},p=r,h=i,v=a({},s),g=c,b=d,k=function(){e.reset(),t=e.next()},w=function(e,t){return e["/gdpr_forget_device"===t?"gdpr":"app"]},P=null,S={request:0,connection:0},D=x(f),I=null;function x(e){return(e=e||Vt)>Ht?Ht:e}function O(n){var r=n.wait,o=n.retrying;return e||(e=function(){var e=Wt(arguments.length>0&&void 0!==arguments[0]?arguments[0]:Gt),t=0;return{next:function(){return t0&&void 0!==arguments[0]?arguments[0]:{},t=e.url,n=e.method,r=e.params,o=void 0===r?{}:r,i=e.continueCb,u=e.wait;return function(e){var t=e.url,n=e.method,r=e.params,o=e.continueCb;t&&(p=t),n&&(h=n),N(r)||(v=a({},r)),v=a({createdAt:qe()},v),"function"==typeof o&&(g=o)}({url:t,method:n,params:o,continueCb:i}),O({wait:u})},isRunning:function(){return!!P},clear:B}};var Jt=function(e){return e===g?"GDPR disable":"disable"},Qt=function(e){return{start:{inProgress:"Adjust SDK ".concat(Jt(e)," process has already started"),done:"Adjust SDK ".concat(Jt(e)," process is now started")},finish:{inProgress:"Adjust SDK ".concat(Jt(e)," process has already finished"),done:"Adjust SDK ".concat(Jt(e)," process is now finished")}}};function Xt(e,t){var n=e.reason,r=e.pending,o=lt()||{},i="start"===t&&o.pending?"start":"finish",a="start"===t&&o.reason,u="finish"===t&&o.reason&&!o.pending;return a||u?(Z.log(Qt(o.reason)[i].inProgress),!1):(Z.log(Qt(n)[i].done),dt({reason:n||v,pending:r}),!0)}function Zt(e){return Xt({reason:e,pending:arguments.length>1&&void 0!==arguments[1]&&arguments[1]||!1},"start")}function $t(){var e=lt()||{};return e.reason===v||e.reason===g&&!e.pending?"off":e.reason===g&&e.pending?"paused":"on"}var en=ae.ActivityState,tn=!1;function nn(e){return e?"unknown"===e.uuid?(Zt({reason:g}),rt.destroy(),{exists:!0,stored:null}):(rt.init(e),{exists:!0,stored:e}):{exists:!1}}function rn(){return"off"!==$t()&&rt.isStarted()}function on(){if(!rn())return Promise.resolve(null);var e=a(a({},rt.current),{},{lastActive:Date.now()});return Dt.updateItem(en,e).then((function(){return rt.current=e}))}var an=zt({strategy:"long",continueCb:function(e,t){var n=e&&e.continue_in||null;return cn.pause=n?{timestamp:Date.now(),wait:n}:null,Dt.getFirst(sn).then((function(e){return e?Dt.deleteItem(sn,e.timestamp):null})).then((function(){return t(),cn.running=!1,mn({wait:n})}))}}),un=!1,sn="queue",cn={running:!1,timestamp:null,pause:null};function ln(){var e=Date.now();return cn.timestamp&&e<=cn.timestamp&&(e=cn.timestamp+1),cn.timestamp=e,e}function dn(e){var t=e.url,n=e.method,r=e.params,o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=o.auto,u=o.timestamp;rt.updateParams(t,i);var s=_(r||{}).filter((function(e){return U(l(e,2)[1])})).reduce(T,{}),c={timestamp:ln(),url:t,method:n,params:a(a({},rt.getParams(t)),s)};return u&&(c.createdAt=u),Dt.addItem(sn,c).then((function(){return function(e){return R(e,"session")&&rt.resetSessionOffset(),rt.updateLastActive(),on()}(t)})).then((function(){return cn.running?{}:mn()}))}function fn(){var e=cn.pause||{},t=e.timestamp,n=e.wait,r=Date.now()-(t||0);return r0&&void 0!==arguments[0]?arguments[0]:{},t=e.cleanUp,n=e.wait;if(cn.running)return Promise.resolve({});cn.running=!0;var r=Promise.resolve({});return t&&(r=r.then(hn)),r.then((function(){return Dt.getFirst(sn)})).then((function(e){return function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.timestamp,n=e.createdAt,r=e.url,o=e.method,i=e.params,u=arguments.length>1?arguments[1]:void 0,s=rt.current||{},c="/session"===r&&!s.installed;return un&&!c||!r&&!o&&!i?(cn.running=!1,Promise.resolve({})):an.send({url:r,method:o,params:a(a({},i),{},{createdAt:qe(n||t)}),wait:u||fn()})}(e,n)}))}function pn(e){if(void 0!==e)if(e!==un){var t=un;un=e,!e&&t&&mn(),Z.info("The app is now in ".concat(e?"offline":"online"," mode"))}else Z.error("The app is already in ".concat(e?"offline":"online"," mode"));else Z.error("State not provided, true or false has to be defined")}function hn(){var e=Date.now()-ie.requestValidityWindow;return Dt.deleteBulk(sn,e,"upperBound")}var vn="globalParams",gn={short:"No type provided",long:"Global parameter type not provided, `callback` or `partner` types are available"};function yn(e){return(e||[]).map((function(e){return{key:e.key,value:e.value}}))}function bn(){return Promise.all([Dt.filterBy(vn,"callback"),Dt.filterBy(vn,"partner")]).then((function(e){var t=l(e,2),n=t[0],r=t[1];return{callbackParams:yn(n),partnerParams:yn(r)}}))}function kn(e,t){if(void 0===t)return Z.error(gn.long),Promise.reject({message:gn.short});var n=j(e),r=Object.keys(n).map((function(e){return{key:e,value:n[e],type:t}}));return Promise.all([Dt.filterBy(vn,t),Dt.addBulk(vn,r,!0)]).then((function(e){var n=l(e,2),o=n[0],i=n[1],a=C(o.map((function(e){return e.key})),i.map((function(e){return e[0]})));return Z.log("Following ".concat(t," parameters have been saved: ").concat(r.map((function(e){return"".concat(e.key,":").concat(e.value)})).join(", "))),a.length&&Z.log("Keys: ".concat(a.join(", ")," already existed so their values have been updated")),i}))}function wn(e,t){return void 0===t?(Z.error(gn.long),Promise.reject({message:gn.short})):Dt.deleteItem(vn,[e,t]).then((function(n){return Z.log("".concat(e," ").concat(t," parameter has been deleted")),n}))}function Pn(e){return void 0===e?(Z.error(gn.long),Promise.reject({message:gn.short})):Dt.deleteBulk(vn,e).then((function(t){return Z.log("All ".concat(e," parameters have been deleted")),t}))}var Sn,Dn,In,xn=!1,Nn=document;function On(){return In=function(){var e=document;if(void 0!==e.hidden)return{hidden:"hidden",visibilityChange:"visibilitychange"};for(var t=_({mozHidden:"mozvisibilitychange",msHidden:"msvisibilitychange",oHidden:"ovisibilitychange",webkitHidden:"webkitvisibilitychange"}),n=0;n0;return!n||n&&t*f>=ie.sessionWindow?bn().then((function(e){var t,n,r;dn({url:"/session",method:"POST",params:(t=e,n=t.callbackParams,r=t.partnerParams,{callbackParams:n.length?j(n):null,partnerParams:r.length?j(r):null})},{auto:!0})})):(Ve("attribution:check"),on())}var Bn=zt({url:"/attribution",strategy:"short",continueCb:function(e,t,n){if(!e||e&&"error"===e.status)return t(),Promise.resolve({state:"unknown"});if(!e.ask_in)return t(),function(e){if(N(e)||!function(e){var t=e.adid,n=void 0===t?"":t,r=e.attribution,o=void 0===r?{}:r;return!!n&&!!C(Un,Object.keys(o)).length}(e)||function(e){var t=e.adid,n=e.attribution,r=rt.current.attribution||{},o=n&&Un.some((function(e){return r[e]!==n[e]}));return!o&&t===r.adid}(e))return Promise.resolve({state:"same"});var t=_(e.attribution).filter((function(e){var t=l(e,1)[0];return-1!==Un.indexOf(t)})).reduce(T,{adid:e.adid});return rt.current=a(a({},rt.current),{},{attribution:t}),on().then((function(){return Ve("attribution:change",t),Ve(x.ATTRIBUTION_RECEIVED,t),Z.info("Attribution has been updated"),{state:"changed"}}))}(e);return n(e.ask_in)}}),Un=["tracker_token","tracker_name","network","campaign","adgroup","creative","click_label","state"];var Kn=zt({url:"/gdpr_forget_device",method:"POST",strategy:"short"}),Ln={running:"Adjust SDK is running pending GDPR Forget Me request",pending:"Adjust SDK will run GDPR Forget Me request after initialisation",paused:"Adjust SDK is already prepared to send GDPR Forget Me request",off:"Adjust SDK is already disabled"};function qn(e){var t=$t();return e||"on"===t?ie.isInitialised()?(Kn.send({params:a({},rt.getParams())}).then((function(){Ve("sdk:gdpr-forget-me")})),!0):(Z.log(Ln.pending),!0):(Z.log(Ln[t]),!1)}function Mn(){return Xt({reason:g,pending:!1},"finish")}var Fn={running:"Adjust SDK is running pending third-party sharing opt-out request",delayed:"Adjust SDK will run third-party sharing opt-out request after initialisation",pending:"Adjust SDK already queued third-party sharing opt-out request",off:"Third-party sharing opt-out is already done",start:{inProgress:"Third-party sharing opt-out has already started",done:"Third-party sharing opt-out is now started"},finish:{inProgress:"Third-party sharing opt-out has already finished",done:"Third-party sharing opt-out is now finished"}};function Gn(){var e=ft()||{};return e.reason?e.pending?"pending":"off":"on"}function Wn(e){var t=Gn();return e||"on"===t?ie.isInitialised()?(dn({url:"/disable_third_party_sharing",method:"POST"}),!0):(Z.log(Fn.delayed),!0):(Z.log(Fn[t]),!1)}function Vn(e,t){var n,r,o=ft()||{},i="start"===t&&e?"start":"finish",u="start"===t&&o.reason,s="finish"===t&&o.reason&&!o.pending;return u||s?(Z.log(Fn[i].inProgress),!1):(Z.log(Fn[i].done),r=(n={reason:v,pending:e})?a({},n):null,it.stores[at]=a(a({},st()),{},{thirdPartySharingDisabled:r}),ct(),!0)}function Hn(){return Vn(!1,"finish")}function Yn(){"pending"===Gn()&&(Z.log(Fn.running),Wn(!0))}var zn=[];function Jn(e,t){zn.push({method:e,description:t,timestamp:Date.now()})}var Qn=10,Xn="eventDeduplication";function Zn(e,t){var n,r,o=t.callbackParams,i=t.partnerParams,u={},s=a({eventToken:e.eventToken,deduplicationId:e.deduplicationId},(n=e.revenue,r=e.currency,isNaN(n)||(n=parseFloat(n))<0||!r?{}:{revenue:n.toFixed(5),currency:r})),c=a(a({},j(o)),j(e.callbackParams)),l=a(a({},j(i)),j(e.partnerParams));return N(c)||(u.callbackParams=c),N(l)||(u.partnerParams=l),a(a({},s),u)}function $n(e){return e?Dt.getAll(Xn).then((function(e){return e.map((function(e){return e.id}))})).then((function(t){return-1===t.indexOf(e)?function(e){var t=ie.getCustomConfig().eventDeduplicationListLimit,n=t>0?t:Qn;return Dt.count(Xn).then((function(e){var t=Promise.resolve();if(e>=n){var r=e-n+1;Z.log("Event deduplication list limit has been reached. Oldest ids are about to be removed (".concat(r," of them)")),t=Dt.trimItems(Xn,r)}return t})).then((function(){return Z.info("New event deduplication id is added to the list: ".concat(e)),Dt.addItem(Xn,{id:e})}))}(e):Promise.reject({message:"Event won't be tracked, since it was previously tracked with the same deduplication id ".concat(e)})})):Promise.resolve()}function er(e){return{clickTime:qe(),source:"web_referrer",referrer:decodeURIComponent(e)}}function tr(e,t){var n;(n=e||window.location.search.substring(1).split("&").map((function(e){return e.split("=")})).reduce(T,{}).adjust_referrer)&&dn({url:"/sdk_click",method:"POST",params:er(n)},{timestamp:t})}var nr=["logLevel","logOutput"],rr=null,or=!1,ir=!1,ar=!1;function ur(){Wn()&&Vn(!0,"start")}function sr(){var e;"paused"===$t()&&(Mn(),Promise.all([(e={uuid:"unknown"},rt.current=e,Dt.clear(en).then((function(){return Dt.addItem(en,e)}))),Dt.clear(vn),Dt.clear(sn)]).then(fr))}function cr(){return or||ie.isInitialised()}function lr(){or=!1,ir=!1,zn=[],an.clear(),cn.running=!1,cn.timestamp=null,cn.pause=null,xn=!1,rt.toBackground(),Tn(),In&&(clearTimeout(Dn),Lt(Nn,In.visibilityChange,jn),Kt(Nn,In.visibilityChange,Cn)),Bn.clear()}function dr(e){e&&Z.log("Adjust SDK has been shutdown due to asynchronous disable"),lr(),Ge.forEach(clearTimeout),Ge=[],Fe={},rt.destroy(),Lt(window,"online",Bt),Lt(window,"offline",Ut),Dt.destroy(),ie.destroy()}function fr(){ar=!1,dr(),Kn.clear(),rr=null,Z.log("Adjust SDK instance has been destroyed")}function mr(e){Z.log("Adjust SDK is starting with web_uuid set to ".concat(e.uuid));var t=rt.current.installed;"paused"===$t()&&(Z.log(Ln.running),qn(!0)),t||Yn();var n=$t(),r=function(e){return"Adjust SDK start has been interrupted ".concat(e)};return"off"===n?(dr(),Promise.reject({interrupted:!0,message:r("due to complete async disable")})):"paused"===n?(lr(),Promise.reject({interrupted:!0,message:r("due to partial async disable")})):ir?Promise.reject({interrupted:!0,message:r("due to multiple synchronous start attempt")}):(mn({cleanUp:!0}),On().then((function(){or=!1,ir=!0,t&&(pr(),Yn())})))}function pr(){var e;ar=!0,zn.forEach((function(e){"function"==typeof e.method&&(Z.log("Delayed ".concat(e.description," task is running now")),e.method(e.timestamp))})),zn=[],(e="sdk:installed")&&_(Fe).some((function(t){var n=l(t,2)[1];return n.some((function(t,r){t.id===e&&n.splice(r,1)}))}))}function hr(e){if(e.interrupted)Z.log(e.message);else if(dr(),Z.error("Adjust SDK start has been canceled due to an error",e),e.stack)throw e}function vr(e){"off"!==$t()?(ie.set(e),Kt(window,"online",Bt),Kt(window,"offline",Ut),We("sdk:installed",pr),We("sdk:shutdown",(function(){return dr(!0)})),We("sdk:gdpr-forget-me",sr),We("sdk:third-party-sharing-opt-out",Hn),We("attribution:check",(function(e,t){return n=t,r=rt.current,(o=(n||{}).ask_in)||!r.attribution&&r.installed?(Bn.send({params:a({initiatedBy:n?"backend":"sdk"},rt.getParams()),wait:o}),rt.updateSessionOffset(),on()):Promise.resolve(r);var n,r,o})),"function"==typeof e.attributionCallback&&We("attribution:change",e.attributionCallback),(tn?Promise.reject({interrupted:!0,message:"Adjust SDK start already in progress"}):(tn=!0,Dt.getFirst(en).then(nn).then((function(e){if(e.exists)return tn=!1,e.stored;var t,n=N(rt.current)?{uuid:(t=Date.now(),"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,(function(e){var n=(t+16*Math.random())%16|0;return t=Math.floor(t/16),("x"===e?n:11&n).toString(16)})))}:rt.current;return Dt.addItem(en,n).then((function(){return rt.init(n),mt(),tn=!1,n}))})).then((function(e){return e&&Ve(x.WEB_UUID_CREATED,e.uuid),e})))).then(mr).then(tr).catch(hr)):Z.log("Adjust SDK is disabled, can not start the sdk")}function gr(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=n.schedule,o=n.waitForInitFinished,i=n.optionalInit;if(Dt.getType()!==b.NO_STORAGE)if("on"===$t())if(i||cr()||!o){if("function"==typeof t){if(!r||ar&&ir||!i&&!cr())return t();Jn(t,e),Z.log("Running ".concat(e," is delayed until Adjust SDK is up"))}}else Z.error("Adjust SDK can not ".concat(e,", sdk instance is not initialized"));else Z.log("Adjust SDK is disabled, can not ".concat(e));else Z.log("Adjust SDK can not ".concat(e,", no storage available"))}const yr={initSdk:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.logLevel,n=e.logOutput,r=u(e,nr);Z.setLogLevel(t,n),cr()?Z.error("You already initiated your instance"):ie.hasMissing(r)||(or=!0,Dt.init(r.namespace).then((function(e){e.type!==b.NO_STORAGE?(Z.info("Available storage is ".concat(e.type)),rr=a({},r),vr(r)):Z.error("Adjust SDK can not start, there is no storage available")})))},getAttribution:function(){return gr("get attribution",(function(){return rt.getAttribution()}))},getWebUUID:function(){return gr("get web_uuid",(function(){return rt.getWebUUID()}))},waitForAttribution:function(){return gr("get attribution",(function(){return rt.waitForAttribution()}),{schedule:!1})},waitForWebUUID:function(){return gr("get web_uuid",(function(){return rt.waitForWebUUID()}),{schedule:!1})},setReferrer:function(e){e&&"string"==typeof e?gr("setting reftag",(function(t){return tr(e,t)}),{schedule:!0,waitForInitFinished:!0,optionalInit:!0}):Z.error("You must provide a string referrer")},trackEvent:function(e){return function(e){if(Dt.getType()===b.NO_STORAGE){var t="Adjust SDK can not track event, no storage available";return Z.log(t),Promise.reject(t)}if("on"!==$t()){var n="Adjust SDK is disabled, can not track event";return Z.log(n),Promise.reject(n)}if(!cr()){var r="Adjust SDK can not track event, sdk instance is not initialized";return Z.error(r),Promise.reject(r)}return new Promise((function(t){var n=function(n){return t(function(e,t){if(!e||e&&(N(e)||!e.eventToken)){var n="You must provide event token in order to track event";return Z.error(n),Promise.reject(n)}return $n(e.deduplicationId).then(bn).then((function(n){return dn({url:"/event",method:"POST",params:Zn(e,n)},{timestamp:t})})).catch((function(e){return e&&e.message&&Z.error(e.message),Promise.reject(e)}))}(e,n))};!ar||!ir&&cr()?(Jn(n,"track event"),Z.log("Running track event is delayed until Adjust SDK is up")):n()}))}(e)},addGlobalCallbackParameters:function(e){gr("add global callback parameters",(function(){return kn(e,"callback")}))},addGlobalPartnerParameters:function(e){gr("add global partner parameters",(function(){return kn(e,"partner")}))},removeGlobalCallbackParameter:function(e){gr("remove global callback parameter",(function(){return wn(e,"callback")}))},removeGlobalPartnerParameter:function(e){gr("remove global partner parameter",(function(){return wn(e,"partner")}))},clearGlobalCallbackParameters:function(){gr("remove all global callback parameters",(function(){return Pn("callback")}))},clearGlobalPartnerParameters:function(){gr("remove all global partner parameters",(function(){return Pn("partner")}))},switchToOfflineMode:function(){gr("set offline mode",(function(){return pn(!0)}))},switchBackToOnlineMode:function(){gr("set online mode",(function(){return pn(!1)}))},stop:function(){Zt()&&ie.isInitialised()&&dr()},restart:function(){var e;((e=lt()||{}).reason===g?(Z.log("Adjust SDK is disabled due to GDPR-Forget-Me request and it can not be re-enabled"),!1):e.reason?(Z.log("Adjust SDK has been enabled"),dt(null),!0):(Z.log("Adjust SDK is already enabled"),!1))&&rr&&vr(rr)},gdprForgetMe:function(){var e=qn();e&&(e=Zt(g,!0))&&ie.isInitialised()&&lr()},disableThirdPartySharing:function(){gr("disable third-party sharing",ur,{schedule:!0})},initSmartBanner:function(){Z.error("function `initSmartBanner` is deprecated")},showSmartBanner:function(){Z.error("function `showSmartBanner` is deprecated")},hideSmartBanner:function(){Z.error("function `hideSmartBanner` is deprecated")},__testonly__:{destroy:fr,clearDatabase:function(){return Dt.deleteDatabase()}},__internal__:{restartAfterAsyncEnable:function(){Z.log("Adjust SDK has been restarted due to asynchronous enable"),rr&&vr(rr)}}};return t=t.default})())); \ No newline at end of file diff --git a/dist/sdk.snippet-sri.min.js b/dist/sdk.snippet-sri.min.js index 15e7913..22dc7a2 100644 --- a/dist/sdk.snippet-sri.min.js +++ b/dist/sdk.snippet-sri.min.js @@ -1 +1 @@ -!function(e,a,r,t,n,o,l,i,s,c,d){var m=l+"_q";e[l]=e[l]||{},e[m]=e[m]||[];for(var f=0;f Date: Wed, 10 Jul 2024 19:13:47 +0200 Subject: [PATCH 22/70] fix: return `gdpr_forgotten` when web_uuid was removed because of GDPR --- src/sdk/identity.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/sdk/identity.ts b/src/sdk/identity.ts index b7f069f..9bb4833 100644 --- a/src/sdk/identity.ts +++ b/src/sdk/identity.ts @@ -75,9 +75,11 @@ function start(): Promise { return activityState }) }) - .then((activityState: ActivityStateMapT) => { + .then((activityState: ActivityStateMapT | null) => { if (activityState) { publish(PUB_SUB_EVENTS.WEB_UUID_CREATED, activityState.uuid) + } else { + publish(PUB_SUB_EVENTS.WEB_UUID_CREATED, 'gdpr_forgotten') } return activityState }) From 199ae3172c5d6a59dd639d2f12aabdafcddd849a Mon Sep 17 00:00:00 2001 From: Yara Matkova Date: Wed, 10 Jul 2024 19:14:27 +0200 Subject: [PATCH 23/70] test: add async getters tests --- src/sdk/__tests__/activity-state.spec.js | 88 +++++++++++++++++------- 1 file changed, 64 insertions(+), 24 deletions(-) diff --git a/src/sdk/__tests__/activity-state.spec.js b/src/sdk/__tests__/activity-state.spec.js index 355f345..b40a863 100644 --- a/src/sdk/__tests__/activity-state.spec.js +++ b/src/sdk/__tests__/activity-state.spec.js @@ -1,5 +1,9 @@ import * as ActivityState from '../activity-state' -import {MINUTE, SECOND} from '../constants' +import { + MINUTE, SECOND, + PUB_SUB_EVENTS +} from '../constants' +import { publish } from '../pub-sub' jest.mock('../logger') @@ -16,7 +20,7 @@ describe('activity state functionality', () => { beforeEach(() => { currentTime = now dateNowSpy.mockReturnValue(currentTime) - ActivityState.default.init({uuid: 'some-uuid'}) + ActivityState.default.init({ uuid: 'some-uuid' }) ActivityState.default.initParams() }) @@ -32,7 +36,7 @@ describe('activity state functionality', () => { it('ensures that only copy is returned', () => { - const currentActivityState = {uuid: '123'} + const currentActivityState = { uuid: '123' } ActivityState.default.current = currentActivityState @@ -41,16 +45,16 @@ describe('activity state functionality', () => { currentActivityState.bla = 'truc' - expect(currentActivityState).toEqual({uuid: '123', bla: 'truc'}) - expect(ActivityState.default.current).toEqual({uuid: '123'}) + expect(currentActivityState).toEqual({ uuid: '123', bla: 'truc' }) + expect(ActivityState.default.current).toEqual({ uuid: '123' }) }) it('destroys activity state', () => { - ActivityState.default.current = {uuid: '123'} + ActivityState.default.current = { uuid: '123' } - expect(ActivityState.default.current).toEqual({uuid: '123'}) + expect(ActivityState.default.current).toEqual({ uuid: '123' }) ActivityState.default.destroy() @@ -319,36 +323,72 @@ describe('activity state functionality', () => { describe('getting web-uuid', () => { - it('returns actual uuid', () => { - expect(ActivityState.default.getWebUUID()).toBe('some-uuid') - }) + describe('sync getter', () => { + it('returns actual uuid', () => { + expect(ActivityState.default.getWebUUID()).toBe('some-uuid') + }) - it('returns null when ActivityState is not initialised', () => { - ActivityState.default.destroy() - localStorage.clear() + it('returns null when ActivityState is not initialised', () => { + ActivityState.default.destroy() + localStorage.clear() - expect(ActivityState.default.getWebUUID()).toBeNull() + expect(ActivityState.default.getWebUUID()).toBeNull() + }) }) + describe('async waitForWebUUID function', () => { + it('resolves when web_uuid cached', async () => { + await expect(ActivityState.default.waitForWebUUID()).resolves.toEqual('some-uuid'); + }) + + it('resolves when receives attribution with pub-sub', async () => { + ActivityState.default.destroy() + localStorage.clear() + + const webUuidPromise = ActivityState.default.waitForWebUUID(); + + publish(PUB_SUB_EVENTS.WEB_UUID_CREATED, 'new_web_uuid'); + + await expect(webUuidPromise).resolves.toEqual('new_web_uuid'); + }) + }) }) describe('getting attribution', () => { - it('returns null when ActivityState is not initialised', () => { - ActivityState.default.destroy() - localStorage.clear() + describe('sync getter', () => { + it('returns null when ActivityState is not initialised', () => { + ActivityState.default.destroy() + localStorage.clear() - expect(ActivityState.default.getAttribution()).toBeNull() - }) + expect(ActivityState.default.getAttribution()).toBeNull() + }) + + it('returns null when not attributed', () => { + expect(ActivityState.default.getAttribution()).toBeNull() + }) + + it('returns actual attribution', () => { + ActivityState.default.current = { ...ActivityState.default.current, attribution: { adid: 'dummy-adid' } } - it('returns null when not attributed', () => { - expect(ActivityState.default.getAttribution()).toBeNull() + expect(ActivityState.default.getAttribution()).toEqual({ adid: 'dummy-adid' }) + }) }) - it('returns actual attribution', () => { - ActivityState.default.current = { ...ActivityState.default.current, attribution: { adid: 'dummy-adid' } } + describe('async waitForAttribution function', () => { + it('resolves when attribution cached', async () => { + ActivityState.default.current = { ...ActivityState.default.current, attribution: { adid: 'dummy-adid' } } + + await expect(ActivityState.default.waitForAttribution()).resolves.toEqual({ adid: 'dummy-adid' }); + }) + + it('resolves when receives attribution with pub-sub', async () => { + const attrPromise = ActivityState.default.waitForAttribution(); + + publish(PUB_SUB_EVENTS.ATTRIBUTION_RECEIVED, { adid: 'new-adid' }) - expect(ActivityState.default.getAttribution()).toEqual({ adid: 'dummy-adid' }) + await expect(attrPromise).resolves.toEqual({ adid: 'new-adid' }); + }) }) }) From 6b87c4fc5d49279fa13adf2f440da268a2c79e97 Mon Sep 17 00:00:00 2001 From: Yara Matkova Date: Mon, 15 Jul 2024 12:40:55 +0200 Subject: [PATCH 24/70] chore: update caniuse --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index c3ee203..f251d4f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4859,9 +4859,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001614", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001614.tgz", - "integrity": "sha512-jmZQ1VpmlRwHgdP1/uiKzgiAuGOfLEJsYFP4+GBou/QQ4U6IOJCB4NP1c+1p9RGLpwObcT94jA5/uO+F1vBbog==", + "version": "1.0.30001640", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001640.tgz", + "integrity": "sha512-lA4VMpW0PSUrFnkmVuEKBUovSWKhj7puyCg8StBChgu298N1AtuF1sKWEvfDuimSEDbhlb/KqPKC3fs1HbuQUA==", "dev": true, "funding": [ { From fe969e02b6e82c9a1abe5c501b841df4a89fa3ed Mon Sep 17 00:00:00 2001 From: Yara Matkova Date: Tue, 16 Jul 2024 10:12:36 +0200 Subject: [PATCH 25/70] refactor: rename config module to .ts --- src/sdk/{config.js => config.ts} | 111 +++++++++++-------------------- 1 file changed, 38 insertions(+), 73 deletions(-) rename src/sdk/{config.js => config.ts} (55%) diff --git a/src/sdk/config.js b/src/sdk/config.ts similarity index 55% rename from src/sdk/config.js rename to src/sdk/config.ts index 1c0f610..8c28879 100644 --- a/src/sdk/config.js +++ b/src/sdk/config.ts @@ -1,4 +1,3 @@ -// @flow import { type BaseParamsT, type CustomConfigT, @@ -7,37 +6,34 @@ import { type BaseParamsMandatoryListT, type CustomConfigListT } from './types' -import {MINUTE, SECOND, DAY} from './constants' -import {buildList, reducer} from './utilities' +import { MINUTE, SECOND, DAY } from './constants' +import { buildList, reducer } from './utilities' import Logger from './logger' -/** - * Base parameters set by client - * - app token - * - environment - * - default tracker - * - external device ID - * - * @type {Object} - * @private - */ -let _baseParams: BaseParamsT = {} -/** - * Custom config set by client - * - url override - * - event deduplication list limit - * - * @type {Object} - * @private - */ -let _customConfig: CustomConfigT = {} +/** Base parameters set by client */ +interface BaseParams { + appToken: string, + environment: 'production' | 'sandbox', + defaultTracker: string, + externalDeviceId: string +} + +/** Custom config set by client */ +interface CustomConfig { + customUrl: string, + urlStrategy: 'india' | 'china', + dataResidency: 'EU' | 'TR' | 'US', + eventDeduplicationListLimit: number, + namespace: string +} + +let _baseParams: BaseParams | null = null + +let _customConfig: CustomConfig | null = null /** * Mandatory fields to set for sdk initialization - * - * @type {string[]} - * @private */ const _mandatory: BaseParamsMandatoryListT = [ 'appToken', @@ -46,9 +42,6 @@ const _mandatory: BaseParamsMandatoryListT = [ /** * Allowed params to be sent with each request - * - * @type {string[]} - * @private */ const _allowedParams: BaseParamsListT = [ ..._mandatory, @@ -58,9 +51,6 @@ const _allowedParams: BaseParamsListT = [ /** * Allowed configuration overrides - * - * @type {string[]} - * @private */ const _allowedConfig: CustomConfigListT = [ 'customUrl', @@ -70,47 +60,24 @@ const _allowedConfig: CustomConfigListT = [ 'namespace' ] -/** - * Global configuration object used across the sdk - * - * @type {{ - * namespace: string, - * version: string, - * sessionWindow: number, - * sessionTimerWindow: number, - * requestValidityWindow: number - * }} - */ -const _baseConfig = { - sessionWindow: 30 * MINUTE, - sessionTimerWindow: 60 * SECOND, - requestValidityWindow: 28 * DAY -} - /** * Check of configuration has been initialized - * - * @returns {boolean} */ -function isInitialised (): boolean { - return _mandatory.reduce((acc, key) => acc && !!_baseParams[key], true) +function isInitialised(): boolean { + return _mandatory.reduce((acc, key) => acc && (_baseParams && !!_baseParams[key]), true) } /** * Get base params set by client - * - * @returns {Object} */ -function getBaseParams (): BaseParamsT { - return {..._baseParams} +function getBaseParams(): BaseParamsT { + return { ..._baseParams } } /** * Set base params and custom config for the sdk to run - * - * @param {Object} options */ -function set (options: InitOptionsT): void { +function set(options: InitOptionsT): void { if (hasMissing(options)) { return } @@ -119,10 +86,12 @@ function set (options: InitOptionsT): void { .filter(key => !!options[key]) .map(key => [key, options[key]]) + // @ts-expect-error inferring wrong type _baseParams = filteredParams .filter(([key]) => _allowedParams.indexOf(key) !== -1) .reduce(reducer, {}) + // @ts-expect-error inferring wrong type _customConfig = filteredParams .filter(([key]) => _allowedConfig.indexOf(key) !== -1) .reduce(reducer, {}) @@ -130,21 +99,15 @@ function set (options: InitOptionsT): void { /** * Get custom config set by client - * - * @returns {Object} */ -function getCustomConfig (): CustomConfigT { - return {..._customConfig} +function getCustomConfig(): CustomConfigT { + return { ..._customConfig } } /** * Check if there are missing mandatory parameters - * - * @param {Object} params - * @returns {boolean} - * @private */ -function hasMissing (params: BaseParamsT): boolean { +function hasMissing(params: BaseParamsT): boolean { const missing = _mandatory.filter(value => !params[value]) if (missing.length) { @@ -158,13 +121,15 @@ function hasMissing (params: BaseParamsT): boolean { /** * Restore config to its default state */ -function destroy (): void { - _baseParams = {} - _customConfig = {} +function destroy(): void { + _baseParams = null + _customConfig = null } const Config = { - ..._baseConfig, + sessionWindow: 30 * MINUTE, + sessionTimerWindow: 60 * SECOND, + requestValidityWindow: 28 * DAY, set, getBaseParams, getCustomConfig, From 4ded2d17ac78c98e88750907f11e91e498322b22 Mon Sep 17 00:00:00 2001 From: Yara Matkova Date: Tue, 16 Jul 2024 13:13:33 +0200 Subject: [PATCH 26/70] refactor: update types of config --- src/sdk/config.ts | 99 +++++++++++++++++++---------------------- src/sdk/ts-types.ts | 34 ++++++++++++++ src/sdk/types.js | 6 --- src/sdk/url-strategy.ts | 2 +- 4 files changed, 81 insertions(+), 60 deletions(-) create mode 100644 src/sdk/ts-types.ts diff --git a/src/sdk/config.ts b/src/sdk/config.ts index 8c28879..b6dc410 100644 --- a/src/sdk/config.ts +++ b/src/sdk/config.ts @@ -1,58 +1,51 @@ -import { - type BaseParamsT, - type CustomConfigT, - type InitOptionsT, - type BaseParamsListT, - type BaseParamsMandatoryListT, - type CustomConfigListT -} from './types' +import { type Attribution } from './ts-types' import { MINUTE, SECOND, DAY } from './constants' import { buildList, reducer } from './utilities' import Logger from './logger' - -/** Base parameters set by client */ -interface BaseParams { +type MandatoryParams = { appToken: string, environment: 'production' | 'sandbox', - defaultTracker: string, - externalDeviceId: string +} + +/** Base parameters set by client */ +type BaseParams = MandatoryParams & { + defaultTracker?: string, + externalDeviceId?: string } /** Custom config set by client */ -interface CustomConfig { - customUrl: string, - urlStrategy: 'india' | 'china', - dataResidency: 'EU' | 'TR' | 'US', - eventDeduplicationListLimit: number, - namespace: string +type CustomConfig = { + customUrl?: string, + urlStrategy?: 'india' | 'china', + dataResidency?: 'EU' | 'TR' | 'US', + eventDeduplicationListLimit?: number, + namespace?: string +} + +export type InitOptions = BaseParams & CustomConfig & { + attributionCallback: (eventName: string, attribution: Attribution) => unknown } let _baseParams: BaseParams | null = null let _customConfig: CustomConfig | null = null -/** - * Mandatory fields to set for sdk initialization - */ -const _mandatory: BaseParamsMandatoryListT = [ +/** Mandatory fields to set for sdk initialization */ +const _mandatory: Array<(keyof MandatoryParams)> = [ 'appToken', 'environment' ] -/** - * Allowed params to be sent with each request - */ -const _allowedParams: BaseParamsListT = [ +/** Allowed params to be sent with each request */ +const _allowedParams: Array<(keyof BaseParams)> = [ ..._mandatory, 'defaultTracker', 'externalDeviceId' ] -/** - * Allowed configuration overrides - */ -const _allowedConfig: CustomConfigListT = [ +/** Allowed configuration overrides */ +const _allowedConfig: Array<(keyof CustomConfig)> = [ 'customUrl', 'dataResidency', 'urlStrategy', @@ -64,50 +57,50 @@ const _allowedConfig: CustomConfigListT = [ * Check of configuration has been initialized */ function isInitialised(): boolean { - return _mandatory.reduce((acc, key) => acc && (_baseParams && !!_baseParams[key]), true) -} - -/** - * Get base params set by client - */ -function getBaseParams(): BaseParamsT { - return { ..._baseParams } + return _mandatory.reduce((acc, key) => acc && (!!_baseParams && !!_baseParams[key]), true) } /** * Set base params and custom config for the sdk to run */ -function set(options: InitOptionsT): void { +function set(options: InitOptions): void { if (hasMissing(options)) { return } - const filteredParams = [..._allowedParams, ..._allowedConfig] + _baseParams = _allowedParams .filter(key => !!options[key]) - .map(key => [key, options[key]]) + .map(key => [key, options[key]] as [keyof MandatoryParams, string]) + .reduce((acc, item) => reducer(acc, item) as BaseParams, {} as BaseParams) - // @ts-expect-error inferring wrong type - _baseParams = filteredParams - .filter(([key]) => _allowedParams.indexOf(key) !== -1) - .reduce(reducer, {}) + _customConfig = _allowedConfig + .filter(key => !!options[key]) + .map(key => [key, options[key]] as [string, string]) + .reduce(reducer, {} as CustomConfig) +} - // @ts-expect-error inferring wrong type - _customConfig = filteredParams - .filter(([key]) => _allowedConfig.indexOf(key) !== -1) - .reduce(reducer, {}) +/** + * Get base params set by client + */ +function getBaseParams(): Partial { + return _baseParams + ? { ..._baseParams } // intentionally returns a copy + : {} } /** * Get custom config set by client */ -function getCustomConfig(): CustomConfigT { - return { ..._customConfig } +function getCustomConfig(): CustomConfig { + return _customConfig + ? { ..._customConfig } // intentionally returns a copy + : {} } /** * Check if there are missing mandatory parameters */ -function hasMissing(params: BaseParamsT): boolean { +function hasMissing(params: BaseParams): boolean { const missing = _mandatory.filter(value => !params[value]) if (missing.length) { diff --git a/src/sdk/ts-types.ts b/src/sdk/ts-types.ts new file mode 100644 index 0000000..b8f5306 --- /dev/null +++ b/src/sdk/ts-types.ts @@ -0,0 +1,34 @@ +/** + * Type of attribution object received from the backend. + * + * @public + */ +export interface Attribution { + + /** Adjust device identifier */ + adid: string, + + /** Tracker token */ + tracker_token: string, + + /** Tracker name */ + tracker_name: string, + + /** Network grouping level */ + network?: string, + + /** Campaign grouping level */ + campaign?: string, + + /** Ad group grouping level */ + adgroup?: string, + + /** Creative grouping level */ + creative?: string, + + /** Click label */ + click_label?: string, + + /** Attribution state, for example 'installed' or 'reattributed' */ + state: string +} diff --git a/src/sdk/types.js b/src/sdk/types.js index 3aceb4d..0bbad7f 100644 --- a/src/sdk/types.js +++ b/src/sdk/types.js @@ -186,12 +186,6 @@ export type InitOptionsT = $ReadOnly<$Shape<{| attributionCallback: (string, Object) => mixed |}>> -export type BaseParamsListT = $ReadOnlyArray<$Keys> - -export type BaseParamsMandatoryListT = $ReadOnlyArray<'appToken' | 'environment'> - -export type CustomConfigListT = $ReadOnlyArray<$Keys> - export type CustomErrorT = {| name: string, message: string, diff --git a/src/sdk/url-strategy.ts b/src/sdk/url-strategy.ts index bc984b4..fe572fc 100644 --- a/src/sdk/url-strategy.ts +++ b/src/sdk/url-strategy.ts @@ -44,7 +44,7 @@ function getEndpointPreference(): BaseUrlsMap | EndpointName[] { } if (dataResidency) { - return [dataResidency] + return [DataResidency[dataResidency]] } if (urlStrategy === UrlStrategy.India) { From ad8f7e0920cdf1061ed1a396dd9ce3733f9f3134 Mon Sep 17 00:00:00 2001 From: Yara Matkova Date: Fri, 19 Jul 2024 06:25:24 +0200 Subject: [PATCH 27/70] refactor: rename sdk status modules to ts --- src/sdk/{constants.js => constants.ts} | 16 +- src/sdk/{disable.js => disable.ts} | 58 ++++--- ...forget-device.js => gdpr-forget-device.ts} | 23 ++- src/sdk/identity.ts | 4 +- src/sdk/preferences.js | 143 ------------------ src/sdk/preferences.ts | 137 +++++++++++++++++ src/sdk/storage/scheme.ts | 8 +- ...arty-sharing.js => third-party-sharing.ts} | 57 +++---- 8 files changed, 211 insertions(+), 235 deletions(-) rename src/sdk/{constants.js => constants.ts} (87%) rename src/sdk/{disable.js => disable.ts} (55%) rename src/sdk/{gdpr-forget-device.js => gdpr-forget-device.ts} (77%) delete mode 100644 src/sdk/preferences.js create mode 100644 src/sdk/preferences.ts rename src/sdk/{third-party-sharing.js => third-party-sharing.ts} (63%) diff --git a/src/sdk/constants.js b/src/sdk/constants.ts similarity index 87% rename from src/sdk/constants.js rename to src/sdk/constants.ts index 431bd6f..77a1e5b 100644 --- a/src/sdk/constants.js +++ b/src/sdk/constants.ts @@ -2,8 +2,12 @@ export const SECOND = 1000 export const MINUTE = SECOND * 60 export const HOUR = MINUTE * 60 export const DAY = HOUR * 24 -export const REASON_GENERAL = 'general' -export const REASON_GDPR = 'gdpr' + +export enum DISABLE_REASONS { + REASON_GENERAL = 'general', + REASON_GDPR = 'gdpr' +} + export const HTTP_ERRORS = { 'TRANSACTION_ERROR': 'XHR transaction failed due to an error', 'SERVER_MALFORMED_RESPONSE': 'Response from server is malformed', @@ -14,10 +18,10 @@ export const HTTP_ERRORS = { 'MISSING_URL': 'Url is not provided' } -export const STORAGE_TYPES = { - NO_STORAGE: 'noStorage', - INDEXED_DB: 'indexedDB', - LOCAL_STORAGE: 'localStorage' +export enum STORAGE_TYPES { + NO_STORAGE = 'noStorage', + INDEXED_DB = 'indexedDB', + LOCAL_STORAGE = 'localStorage' } export const ENDPOINTS = { diff --git a/src/sdk/disable.js b/src/sdk/disable.ts similarity index 55% rename from src/sdk/disable.js rename to src/sdk/disable.ts index 19953e0..6fa3909 100644 --- a/src/sdk/disable.js +++ b/src/sdk/disable.ts @@ -1,15 +1,13 @@ -// @flow -import {REASON_GDPR, REASON_GENERAL} from './constants' -import {getDisabled, setDisabled} from './preferences' +import { DISABLE_REASONS } from './constants' +import { getDisabled, setDisabled } from './preferences' import Logger from './logger' type StatusT = 'on' | 'off' | 'paused' -type ReasonT = REASON_GDPR | REASON_GENERAL -type PendingT = boolean -type ReasonMapT = {| - reason: ReasonT, - pending: PendingT -|} +type ReasonT = DISABLE_REASONS +type ReasonMapT = { + reason?: ReasonT, + pending: boolean +} /** * Get the disable action name depending on the reason @@ -18,7 +16,7 @@ type ReasonMapT = {| * @returns {string} * @private */ -const _disableReason = (reason: ReasonT) => reason === REASON_GDPR ? 'GDPR disable' : 'disable' +const _disableReason = (reason?: ReasonT) => reason === DISABLE_REASONS.REASON_GDPR ? 'GDPR disable' : 'disable' /** * Get log messages depending on the disable reason @@ -27,7 +25,7 @@ const _disableReason = (reason: ReasonT) => reason === REASON_GDPR ? 'GDPR disab * @returns {Object} * @private */ -const _logMessages = (reason: ReasonT) => ({ +const _logMessages = (reason?: ReasonT) => ({ start: { inProgress: `Adjust SDK ${_disableReason(reason)} process has already started`, done: `Adjust SDK ${_disableReason(reason)} process is now started` @@ -47,21 +45,21 @@ const _logMessages = (reason: ReasonT) => ({ * @returns {boolean} * @private */ -function _disable ({reason, pending}: ReasonMapT, expectedAction: 'start' | 'finish'): boolean { - const disabled = getDisabled() || {} - const action = expectedAction === 'start' && disabled.pending ? 'start': 'finish' - const shouldNotStart = expectedAction === 'start' && disabled.reason - const shouldNotFinish = expectedAction === 'finish' && disabled.reason && !disabled.pending +function _disable({ reason, pending }: ReasonMapT, expectedAction: 'start' | 'finish'): boolean { + const { reason: savedReason, pending: savedPending } = getDisabled() || {} + const action = expectedAction === 'start' && savedPending ? 'start' : 'finish' + const shouldNotStart = expectedAction === 'start' && savedReason + const shouldNotFinish = expectedAction === 'finish' && savedReason && !savedPending if (shouldNotStart || shouldNotFinish) { - Logger.log(_logMessages(disabled.reason)[action].inProgress) + Logger.log(_logMessages(savedReason)[action].inProgress) return false } Logger.log(_logMessages(reason)[action].done) setDisabled({ - reason: reason || REASON_GENERAL, + reason: reason || DISABLE_REASONS.REASON_GENERAL, pending }) @@ -75,8 +73,8 @@ function _disable ({reason, pending}: ReasonMapT, expectedAction: 'start' | 'fin * @param {boolean} pending * @private */ -function disable (reason: ?ReasonT, pending: ?PendingT = false): boolean { - return _disable({reason, pending: pending || false}, 'start') +function disable(reason?: ReasonT, pending = false): boolean { + return _disable({ reason, pending }, 'start') } /** @@ -85,22 +83,22 @@ function disable (reason: ?ReasonT, pending: ?PendingT = false): boolean { * @param {string} reason * @returns {boolean} */ -function finish (reason: ReasonT): boolean { - return _disable({reason, pending: false}, 'finish') +function finish(reason: ReasonT): boolean { + return _disable({ reason, pending: false }, 'finish') } /** * Enable sdk if not GDPR forgotten */ -function restore (): boolean { - const disabled = getDisabled() || {} +function restore(): boolean { + const { reason } = getDisabled() || {} - if (disabled.reason === REASON_GDPR) { + if (reason === DISABLE_REASONS.REASON_GDPR) { Logger.log('Adjust SDK is disabled due to GDPR-Forget-Me request and it can not be re-enabled') return false } - if (!disabled.reason) { + if (!reason) { Logger.log('Adjust SDK is already enabled') return false } @@ -120,12 +118,12 @@ function restore (): boolean { * * @returns {string} */ -function status (): StatusT { - const disabled = getDisabled() || {} +function status(): StatusT { + const { reason, pending } = getDisabled() || {} - if (disabled.reason === REASON_GENERAL || disabled.reason === REASON_GDPR && !disabled.pending) { + if (reason === DISABLE_REASONS.REASON_GENERAL || reason === DISABLE_REASONS.REASON_GDPR && !pending) { return 'off' - } else if (disabled.reason === REASON_GDPR && disabled.pending) { + } else if (reason === DISABLE_REASONS.REASON_GDPR && pending) { return 'paused' } diff --git a/src/sdk/gdpr-forget-device.js b/src/sdk/gdpr-forget-device.ts similarity index 77% rename from src/sdk/gdpr-forget-device.js rename to src/sdk/gdpr-forget-device.ts index 18bd5dd..e2cb752 100644 --- a/src/sdk/gdpr-forget-device.js +++ b/src/sdk/gdpr-forget-device.ts @@ -1,11 +1,10 @@ -// @flow import Request from './request' import ActivityState from './activity-state' import Logger from './logger' import Config from './config' -import {publish} from './pub-sub' -import {status, disable as sdkDisable, finish as sdkDisableFinish} from './disable' -import {REASON_GDPR} from './constants' +import { publish } from './pub-sub' +import { status, disable as sdkDisable, finish as sdkDisableFinish } from './disable' +import { DISABLE_REASONS } from './constants' /** * Http request instance @@ -38,7 +37,7 @@ const _logMessages = { * @param {boolean} force * @returns {boolean} */ -function forget (force?: boolean): boolean { +function forget(force?: boolean): boolean { const sdkStatus = status() if (!force && sdkStatus !== 'on') { @@ -52,7 +51,7 @@ function forget (force?: boolean): boolean { } _request.send({ - params: {...ActivityState.getParams()} + params: { ...ActivityState.getParams() } }).then(() => { publish('sdk:gdpr-forget-me') }) @@ -65,8 +64,8 @@ function forget (force?: boolean): boolean { * * @returns {boolean} */ -function disable () { - return sdkDisable(REASON_GDPR, true) +function disable() { + return sdkDisable(DISABLE_REASONS.REASON_GDPR, true) } /** @@ -74,14 +73,14 @@ function disable () { * * @returns {boolean} */ -function finish () { - return sdkDisableFinish(REASON_GDPR) +function finish() { + return sdkDisableFinish(DISABLE_REASONS.REASON_GDPR) } /** * Check if there is pending GDPR-Forget-Me request */ -function check (): void { +function check(): void { if (status() === 'paused') { Logger.log(_logMessages.running) forget(true) @@ -91,7 +90,7 @@ function check (): void { /** * Destroy by clearing running request */ -function destroy (): void { +function destroy(): void { _request.clear() } diff --git a/src/sdk/identity.ts b/src/sdk/identity.ts index 9bb4833..7d7d6ed 100644 --- a/src/sdk/identity.ts +++ b/src/sdk/identity.ts @@ -2,7 +2,7 @@ import { type ActivityStateMapT } from './types' import Storage from './storage/storage' import ActivityState from './activity-state' import { reload as reloadPreferences } from './preferences' -import { PUB_SUB_EVENTS, REASON_GDPR } from './constants' +import { PUB_SUB_EVENTS, DISABLE_REASONS } from './constants' import { isEmpty } from './utilities' import { disable, status } from './disable' import { publish } from './pub-sub' @@ -36,7 +36,7 @@ function _intercept(stored: ActivityStateMapT): InterceptT { } if (stored.uuid === 'unknown') { - disable({ reason: REASON_GDPR }) + disable(DISABLE_REASONS.REASON_GDPR) ActivityState.destroy() return { exists: true, stored: null } } diff --git a/src/sdk/preferences.js b/src/sdk/preferences.js deleted file mode 100644 index 6e9ab42..0000000 --- a/src/sdk/preferences.js +++ /dev/null @@ -1,143 +0,0 @@ -// @flow -import {publish} from './pub-sub' -import QuickStorage from './storage/quick-storage' -import Scheme from './storage/scheme' -import {REASON_GDPR, REASON_GENERAL} from './constants' - -type SdkDisabledT = {| - reason: REASON_GENERAL | REASON_GDPR, - pending: boolean -|} - -type ThirdPartySharingDisabledT = {| - reason: REASON_GENERAL, - pending: boolean -|} - -type PreferencesT = {| - thirdPartySharingDisabled?: ?ThirdPartySharingDisabledT, - sdkDisabled?: ?SdkDisabledT -|} - -/** - * Name of the store used by preferences - * - * @type {string} - * @private - */ -let _storeName: string = Scheme.preferences.name - -/** - * Local reference to be used for recovering preserved state - * - * @type {Object} - * @private - */ -let _preferences: ?PreferencesT = _getPreferences() - -/** - * Get preferences stored in the localStorage - * - * @returns {Object} - * @private - */ -function _getPreferences (): ?PreferencesT { - if (!_preferences) { - _setPreferences() - } - - return _preferences ? {..._preferences} : null -} - -/** - * Set local reference of the preserved preferences - * - * @private - */ -function _setPreferences (): void { - _preferences = QuickStorage.stores[_storeName] -} - -/** - * Get current disabled state - * - * @returns {Object|null} - */ -function getDisabled (): ?SdkDisabledT { - const preferences = _getPreferences() - - return preferences ? preferences.sdkDisabled : null -} - -/** - * Set current disabled state - * - * @param {Object|null} value - */ -function setDisabled (value: ?SdkDisabledT): void { - const sdkDisabled = value ? {...value} : null - - QuickStorage.stores[_storeName] = {..._getPreferences(), sdkDisabled} - - _setPreferences() -} - -/** - * Get current third-party-sharing disabled state - * - * @returns {Object} - * @private - */ -function getThirdPartySharing (): ?ThirdPartySharingDisabledT { - const preferences = _getPreferences() - - return preferences ? preferences.thirdPartySharingDisabled : null -} - -/** - * Set current third-party-sharing disabled state - * - * @param {Object=} value - * @private - */ -function setThirdPartySharing (value: ?ThirdPartySharingDisabledT): void { - const thirdPartySharingDisabled = value ? {...value} : null - - QuickStorage.stores[_storeName] = {..._getPreferences(), thirdPartySharingDisabled} - - _setPreferences() -} - -/** - * Reload current preferences from localStorage if changed outside of current scope (e.g. tab) - */ -function reload (): void { - const stored: PreferencesT = QuickStorage.stores[_storeName] || {} - const sdkDisabled: ?SdkDisabledT = (_preferences || {}).sdkDisabled || null - - if (stored.sdkDisabled && !sdkDisabled) { - publish('sdk:shutdown') - } - - _setPreferences() -} - -/** - * Recover preferences from memory if storage was lost - */ -function recover (): void { - const stored: ?PreferencesT = QuickStorage.stores[_storeName] - - if (!stored) { - QuickStorage.stores[_storeName] = {..._preferences} - } -} - -export { - getDisabled, - setDisabled, - getThirdPartySharing, - setThirdPartySharing, - reload, - recover -} diff --git a/src/sdk/preferences.ts b/src/sdk/preferences.ts new file mode 100644 index 0000000..00d200c --- /dev/null +++ b/src/sdk/preferences.ts @@ -0,0 +1,137 @@ +import { publish } from './pub-sub' +import QuickStorage from './storage/quick-storage' +import Scheme from './storage/scheme' +import { DISABLE_REASONS } from './constants' + +type SdkDisabledT = { + reason: DISABLE_REASONS, + pending: boolean +} + +type ThirdPartySharingDisabledT = { + reason: DISABLE_REASONS.REASON_GENERAL, + pending: boolean +} + +type PreferencesT = { + thirdPartySharingDisabled?: ThirdPartySharingDisabledT, + sdkDisabled?: SdkDisabledT +} + +/** + * Name of the store used by preferences + */ +const _storeName: string = Scheme.preferences.name + +/** + * Local reference to be used for recovering preserved state + */ +let _preferences: PreferencesT | null = null +_preferences = _getPreferences() + +/** + * Get preferences stored in the localStorage + * + * @returns {Object} + * @private + */ +function _getPreferences(): PreferencesT | null { + if (!_preferences) { + _setPreferences() + } + + return _preferences ? { ..._preferences } : null +} + +/** + * Set local reference of the preserved preferences + * + * @private + */ +function _setPreferences(): void { + _preferences = QuickStorage.stores[_storeName] +} + +/** + * Get current disabled state + * + * @returns {Object|null} + */ +function getDisabled(): SdkDisabledT | null { + const preferences = _getPreferences() + + return preferences && preferences.sdkDisabled || null +} + +/** + * Set current disabled state + * + * @param {Object|null} value + */ +function setDisabled(value: SdkDisabledT | null): void { + const sdkDisabled = value ? { ...value } : null + + QuickStorage.stores[_storeName] = { ..._getPreferences(), sdkDisabled } + + _setPreferences() +} + +/** + * Get current third-party-sharing disabled state + * + * @returns {Object} + * @private + */ +function getThirdPartySharing(): ThirdPartySharingDisabledT | null { + const preferences = _getPreferences() + + return preferences && preferences.thirdPartySharingDisabled || null +} + +/** + * Set current third-party-sharing disabled state + * + * @param {Object=} value + * @private + */ +function setThirdPartySharing(value: ThirdPartySharingDisabledT): void { + const thirdPartySharingDisabled = value ? { ...value } : null + + QuickStorage.stores[_storeName] = { ..._getPreferences(), thirdPartySharingDisabled } + + _setPreferences() +} + +/** + * Reload current preferences from localStorage if changed outside of current scope (e.g. tab) + */ +function reload(): void { + const stored: PreferencesT = QuickStorage.stores[_storeName] || {} + const sdkDisabled: SdkDisabledT | null = (_preferences || {}).sdkDisabled || null + + if (stored.sdkDisabled && !sdkDisabled) { + publish('sdk:shutdown') + } + + _setPreferences() +} + +/** + * Recover preferences from memory if storage was lost + */ +function recover(): void { + const stored: PreferencesT = QuickStorage.stores[_storeName] + + if (!stored) { + QuickStorage.stores[_storeName] = { ..._preferences } + } +} + +export { + getDisabled, + setDisabled, + getThirdPartySharing, + setThirdPartySharing, + reload, + recover +} diff --git a/src/sdk/storage/scheme.ts b/src/sdk/storage/scheme.ts index 29570c1..2953c48 100644 --- a/src/sdk/storage/scheme.ts +++ b/src/sdk/storage/scheme.ts @@ -1,4 +1,4 @@ -import { REASON_GDPR, REASON_GENERAL } from '../constants' +import { DISABLE_REASONS } from '../constants' import { StoredValue } from './types' /** @@ -208,7 +208,7 @@ const _preferencesScheme: StoreOptionsOptionalKey = { reason: { key: 'r', values: { - [REASON_GENERAL]: 1 + [DISABLE_REASONS.REASON_GENERAL]: 1 } }, pending: { @@ -226,8 +226,8 @@ const _preferencesScheme: StoreOptionsOptionalKey = { reason: { key: 'r', values: { - [REASON_GENERAL]: 1, - [REASON_GDPR]: 2 + [DISABLE_REASONS.REASON_GENERAL]: 1, + [DISABLE_REASONS.REASON_GDPR]: 2 } }, pending: { diff --git a/src/sdk/third-party-sharing.js b/src/sdk/third-party-sharing.ts similarity index 63% rename from src/sdk/third-party-sharing.js rename to src/sdk/third-party-sharing.ts index 383a259..30180aa 100644 --- a/src/sdk/third-party-sharing.js +++ b/src/sdk/third-party-sharing.ts @@ -1,17 +1,13 @@ -// @flow -import {push} from './queue' -import {getThirdPartySharing, setThirdPartySharing} from './preferences' +import { push } from './queue' +import { getThirdPartySharing, setThirdPartySharing } from './preferences' import Config from './config' import Logger from './logger' -import {REASON_GENERAL} from './constants' +import { DISABLE_REASONS } from './constants' type ThirdPartySharingStatusT = 'pending' | 'on' | 'off' /** * Log messages used in different scenarios - * - * @type {Object} - * @private */ const _logMessages = { running: 'Adjust SDK is running pending third-party sharing opt-out request', @@ -30,15 +26,12 @@ const _logMessages = { /** * Get the status of the third-party sharing - * - * @returns {string} - * @private */ -function _status (): ThirdPartySharingStatusT { - const disabled = getThirdPartySharing() || {} +function _status(): ThirdPartySharingStatusT { + const { reason, pending } = getThirdPartySharing() || {} - if (disabled.reason) { - return disabled.pending ? 'pending' : 'off' + if (reason) { + return pending ? 'pending' : 'off' } return 'on' @@ -46,12 +39,9 @@ function _status (): ThirdPartySharingStatusT { /** * Request third-party sharing opt-out request - * - * @param {boolean} force - * @returns {boolean} */ -function optOut (force?: boolean) { - let status = _status() +function optOut(force?: boolean) { + const status = _status() if (!force && status !== 'on') { Logger.log(_logMessages[status]) @@ -73,17 +63,12 @@ function optOut (force?: boolean) { /** * Start or finish thrid-party sharing disable process - * - * @param {boolean} pending - * @param {string} expectedAction - * @returns {boolean} - * @private */ -function _disable (pending: boolean, expectedAction: 'start' | 'finish'): boolean { - const disabled = getThirdPartySharing() || {} - const action = expectedAction === 'start' && pending ? 'start': 'finish' - const shouldNotStart = expectedAction === 'start' && disabled.reason - const shouldNotFinish = expectedAction === 'finish' && disabled.reason && !disabled.pending +function _disable(pending: boolean, expectedAction: 'start' | 'finish'): boolean { + const { reason: savedReason, pending: savedPending } = getThirdPartySharing() || {} + const action = expectedAction === 'start' && pending ? 'start' : 'finish' + const shouldNotStart = expectedAction === 'start' && savedReason + const shouldNotFinish = expectedAction === 'finish' && savedReason && !savedPending if (shouldNotStart || shouldNotFinish) { Logger.log(_logMessages[action].inProgress) @@ -93,8 +78,8 @@ function _disable (pending: boolean, expectedAction: 'start' | 'finish'): boolea Logger.log(_logMessages[action].done) setThirdPartySharing({ - reason: REASON_GENERAL, - pending + reason: DISABLE_REASONS.REASON_GENERAL, + pending: pending }) return true @@ -102,26 +87,22 @@ function _disable (pending: boolean, expectedAction: 'start' | 'finish'): boolea /** * Start the third-party sharing disable process - * - * @returns {boolean} */ -function disable (): boolean { +function disable(): boolean { return _disable(true, 'start') } /** * Finalize the third-party sharing process - * - * @returns {boolean} */ -function finish () { +function finish() { return _disable(false, 'finish') } /** * Check if there s pending third-party sharing opt-out request */ -function check (): void { +function check(): void { if (_status() === 'pending') { Logger.log(_logMessages.running) optOut(true) From f53a82df2b472e6e0448c40d27fee8b4966864cd Mon Sep 17 00:00:00 2001 From: Yara Matkova Date: Mon, 15 Jul 2024 19:29:15 +0200 Subject: [PATCH 28/70] chore: update type definitions related to url strategy --- dist/adjust-latest.d.ts | 47 ++++++++++++++++++++++++++++++++++------- 1 file changed, 39 insertions(+), 8 deletions(-) diff --git a/dist/adjust-latest.d.ts b/dist/adjust-latest.d.ts index b5a9f1b..c505f49 100644 --- a/dist/adjust-latest.d.ts +++ b/dist/adjust-latest.d.ts @@ -99,6 +99,26 @@ declare namespace Adjust { state: string } + /** + * @deprecated + */ + type UrlStartegyLiterals = 'china' | 'india'; + + interface UrlStartegy { + /** The country or countries of data residence, or the endpoints to which you want to send SDK traffic. */ + domains: Array; + + /** + * Whether the source should prefix a subdomain. + */ + useSubdomains: boolean; + + /** + * Whether the domain should be used for data residency. + */ + isDataResidency: boolean; + } + interface InitOptions { /** Required to initialise SDK instance, please make sure to provide valid app token. */ @@ -122,19 +142,31 @@ declare namespace Adjust { eventDeduplicationListLimit?: number; /** Optional. By default all requests go to Adjust's endpoints. You are able to redirect all requests to your custom - * endpoint. */ + * endpoint. + * + * @deprecated use {@link urlStrategy} property instead + */ customUrl?: string; /** Optional. The data residency feature allows you to choose the country in which Adjust will store your data. This * is useful if you are operating in a country with strict privacy requirements. When you set up data residency, - * Adjust will store your data in a data center located in the region your have chosen. */ + * Adjust will store your data in a data center located in the region your have chosen. + * + * @deprecated use {@link urlStrategy} property instead + */ dataResidency?: 'EU' | 'TR' | 'US'; - /** Optional. The Adjust SDK can use the url strategy setting to prioritise regional endpoints. */ - urlStrategy?: 'india' | 'china'; + /** Optional. + * + * @todo Add link to [Help Center article]() when it's ready. + * + * The URL strategy feature allows you to set either: + * - The country in which Adjust stores your data (data residency). + * - The endpoint to which the Adjust SDK sends traffic (URL strategy). + */ + urlStrategy?: UrlStartegyLiterals | UrlStartegy; - /** - * Optional. A custom namespace for SDK data storage. If not set then default one is used. + /** Optional. A custom namespace for SDK data storage. If not set then default one is used. * It's useful when there are multiple applications on the same domain to allow SDK distinguish storages and don't * mix the data up. * @@ -169,8 +201,7 @@ declare namespace Adjust { */ logLevel?: LogLevel; - /** - * Optional. Query selector to define html container if you want to see your logs directly on the screen. This could + /** Optional. Query selector to define html container if you want to see your logs directly on the screen. This could * be useful when testing on mobile devices. * * @example From e1078ff8e7df334cfcdffe0e0128ffedc0ea4f50 Mon Sep 17 00:00:00 2001 From: Yara Matkova Date: Tue, 16 Jul 2024 11:38:53 +0200 Subject: [PATCH 29/70] fix: wrong type name in type definitions --- dist/adjust-latest.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dist/adjust-latest.d.ts b/dist/adjust-latest.d.ts index c505f49..76e05dd 100644 --- a/dist/adjust-latest.d.ts +++ b/dist/adjust-latest.d.ts @@ -245,7 +245,7 @@ declare namespace Adjust { /** * Returns a promise which resolves when current attribution information becomes available */ - function waitForAttribution(): Promise + function waitForAttribution(): Promise /** * Get web_uuid - a unique ID of user generated per subdomain and per browser From 10069c4dfb070a1446d88ea55e55228d283d18c9 Mon Sep 17 00:00:00 2001 From: Yara Matkova Date: Tue, 16 Jul 2024 13:48:05 +0200 Subject: [PATCH 30/70] chore: remove redundant mock --- src/sdk/__mocks__/url-strategy.ts | 7 ------- 1 file changed, 7 deletions(-) diff --git a/src/sdk/__mocks__/url-strategy.ts b/src/sdk/__mocks__/url-strategy.ts index 5655b67..21f75cd 100644 --- a/src/sdk/__mocks__/url-strategy.ts +++ b/src/sdk/__mocks__/url-strategy.ts @@ -15,13 +15,6 @@ export const mockEndpoints = { singleEndpoint } -export function urlStrategyRetries( - sendRequest: (urls: BaseUrlsMap) => Promise, - endpoints: Partial> = mockEndpoints.endpoints -) { - return urlStrategyModule.urlStrategyRetries(sendRequest, endpoints) -} - export function getBaseUrlsIterator(endpoints: Partial> = mockEndpoints.singleEndpoint) { return urlStrategyModule.getBaseUrlsIterator(endpoints) } From c0085f96b8ccf3938841e7f9b5e5d612473dade2 Mon Sep 17 00:00:00 2001 From: Yara Matkova Date: Wed, 17 Jul 2024 12:41:36 +0200 Subject: [PATCH 31/70] chore: rename type --- dist/adjust-latest.d.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dist/adjust-latest.d.ts b/dist/adjust-latest.d.ts index 76e05dd..39d93b1 100644 --- a/dist/adjust-latest.d.ts +++ b/dist/adjust-latest.d.ts @@ -104,7 +104,7 @@ declare namespace Adjust { */ type UrlStartegyLiterals = 'china' | 'india'; - interface UrlStartegy { + interface UrlStrategyConfig { /** The country or countries of data residence, or the endpoints to which you want to send SDK traffic. */ domains: Array; @@ -164,7 +164,7 @@ declare namespace Adjust { * - The country in which Adjust stores your data (data residency). * - The endpoint to which the Adjust SDK sends traffic (URL strategy). */ - urlStrategy?: UrlStartegyLiterals | UrlStartegy; + urlStrategy?: UrlStartegyLiterals | UrlStrategyConfig; /** Optional. A custom namespace for SDK data storage. If not set then default one is used. * It's useful when there are multiple applications on the same domain to allow SDK distinguish storages and don't From 6291c82fc8cb522255f443fac75144dad8aa9ffa Mon Sep 17 00:00:00 2001 From: Yara Matkova Date: Wed, 17 Jul 2024 12:42:41 +0200 Subject: [PATCH 32/70] feat: re-implement url strategy --- src/sdk/constants.ts | 33 --------- src/sdk/url-strategy.ts | 145 ++++++++++++++++++++++++++++++++-------- 2 files changed, 116 insertions(+), 62 deletions(-) diff --git a/src/sdk/constants.ts b/src/sdk/constants.ts index 77a1e5b..6a4ad1f 100644 --- a/src/sdk/constants.ts +++ b/src/sdk/constants.ts @@ -24,39 +24,6 @@ export enum STORAGE_TYPES { LOCAL_STORAGE = 'localStorage' } -export const ENDPOINTS = { - default: { - endpointName: 'Default', - app: 'https://app.adjust.com', - gdpr: 'https://gdpr.adjust.com' - }, - india: { - endpointName: 'Indian', - app: 'https://app.adjust.net.in', - gdpr: 'https://gdpr.adjust.net.in' - }, - china: { - endpointName: 'Chinese', - app: 'https://app.adjust.world', - gdpr: 'https://gdpr.adjust.world' - }, - EU: { - endpointName: 'EU', - app: 'https://app.eu.adjust.com', - gdpr: 'https://gdpr.eu.adjust.com' - }, - TR: { - endpointName: 'TR', - app: 'https://app.tr.adjust.com', - gdpr: 'https://gdpr.tr.adjust.com' - }, - US: { - endpointName: 'US', - app: 'https://app.us.adjust.com', - gdpr: 'https://gdpr.us.adjust.com' - } -} - export const PUB_SUB_EVENTS = { WEB_UUID_CREATED: 'activity:web_uuid', ATTRIBUTION_RECEIVED: 'activity:attribution', diff --git a/src/sdk/url-strategy.ts b/src/sdk/url-strategy.ts index fe572fc..9ec0db1 100644 --- a/src/sdk/url-strategy.ts +++ b/src/sdk/url-strategy.ts @@ -1,6 +1,42 @@ import Config from './config' import Logger from './logger' -import { ENDPOINTS } from './constants' + +export interface UrlStrategyConfig { + /** The country or countries of data residence, or the endpoints to which you want to send SDK traffic. */ + domains: Array; + + /** + * Whether the source should prefix a subdomain. + */ + useSubdomains: boolean; + + /** + * Whether the domain should be used for data residency. + */ + isDataResidency: boolean; +} + +const ENDPOINTS = { + default: 'adjust.com', + india: 'adjust.net.in', + china: 'adjust.world', + world: 'adjust.world', + EU: 'eu.adjust.com', + TR: 'tr.adjust.com', + US: 'us.adjust.com', +} + +const BASE_URL_PREFIX = 'https://app.'; +const GDPR_URL_PREFIX = 'https://gdpr.'; +const BASE_URL_NO_SUB_DOMAIN_PREFIX = 'https://'; + +function getDefaultUrlStrategyConfig(endpoints: Record) { + return { + domains: [endpoints.default, endpoints.world], + useSubdomains: true, + isDataResidency: false + } +} enum UrlStrategy { Default = 'default', @@ -14,8 +50,6 @@ enum DataResidency { US = 'US' } -type EndpointName = UrlStrategy | DataResidency - type BaseUrlsMap = { app: string; gdpr: string; @@ -26,17 +60,21 @@ function incorrectOptionIgnoredMessage(higherPriority: string, lowerPriority: st } /** - * Returns a map of base URLs or a list of endpoint names depending on SDK configuration + * In case if deprecated parameters or no urlStrategy provided returns the most appropriate UrlStrategyConfig, + * and `null` otherwise */ -function getEndpointPreference(): BaseUrlsMap | EndpointName[] { +function transfromDeprecatedParamsToUrlStrategyConfig(endpoints: Record): UrlStrategyConfig | null { const { customUrl, urlStrategy, dataResidency } = Config.getCustomConfig() if (customUrl) { // If custom URL is set then send all requests there + // TODO: place a link to updated docs in this warning, see https://adjustcom.atlassian.net/browse/DSM-3071 + Logger.warn('customUrl is deprecated, use urlStrategy instead') + if (dataResidency || urlStrategy) { incorrectOptionIgnoredMessage('customUrl', dataResidency ? 'dataResidency' : 'urlStrategy') } - return { app: customUrl, gdpr: customUrl } + return { domains: [customUrl], useSubdomains: false, isDataResidency: false } } if (dataResidency && urlStrategy) { @@ -44,48 +82,97 @@ function getEndpointPreference(): BaseUrlsMap | EndpointName[] { } if (dataResidency) { - return [DataResidency[dataResidency]] + // TODO: place a link to updated docs in this warning, see https://adjustcom.atlassian.net/browse/DSM-3071 + Logger.warn('dataResidency is deprecated, use urlStrategy instead') + + return { domains: [endpoints[dataResidency]], useSubdomains: true, isDataResidency: true } + } + + if (typeof urlStrategy === 'string') { + + // TODO: place a link to updated docs in this warning, see https://adjustcom.atlassian.net/browse/DSM-3071 + Logger.warn('urlStrategy string literals (\'china\' and \'india\') are deprected, use UrlStartegyConfig instead') + + if (urlStrategy === UrlStrategy.India) { + return { + domains: [endpoints.india, endpoints.default], + useSubdomains: true, + isDataResidency: false + } + } + + if (urlStrategy === UrlStrategy.China) { + return { + domains: [endpoints.china, endpoints.default], + useSubdomains: true, + isDataResidency: false + } + } } - if (urlStrategy === UrlStrategy.India) { - return [UrlStrategy.India, UrlStrategy.Default] + if (!urlStrategy) { + return getDefaultUrlStrategyConfig(endpoints) } - if (urlStrategy === UrlStrategy.China) { - return [UrlStrategy.China, UrlStrategy.Default] + return null +} + +/** + * Checks if passed UrlStrategyConfig is valid and returns it, returns `DEFAULT_URL_STRATEGY_CONFIG` otherwise + */ +function validateUrlStrategyConfig(endpoints: Record): UrlStrategyConfig { + const { urlStrategy } = Config.getCustomConfig() + + if (urlStrategy && typeof urlStrategy === 'object') { + const config = urlStrategy as UrlStrategyConfig; + + if (!config.domains || !Array.isArray(config.domains) || config.domains.length < 1) { + Logger.warn('Invalid urlStartegy: `domains` should be a non-empty array') + + return getDefaultUrlStrategyConfig(endpoints) + } + + return { domains: config.domains, useSubdomains: !!config.useSubdomains, isDataResidency: !!config.isDataResidency } } - return [UrlStrategy.Default, UrlStrategy.India, UrlStrategy.China] + return getDefaultUrlStrategyConfig(endpoints) } -const endpointMap: Record = { - [UrlStrategy.Default]: ENDPOINTS.default, - [UrlStrategy.India]: ENDPOINTS.india, - [UrlStrategy.China]: ENDPOINTS.china, - [DataResidency.EU]: ENDPOINTS.EU, - [DataResidency.TR]: ENDPOINTS.TR, - [DataResidency.US]: ENDPOINTS.US +function getUrlStrategyConfig(endpoints: Record): UrlStrategyConfig { + return transfromDeprecatedParamsToUrlStrategyConfig(endpoints) || validateUrlStrategyConfig(endpoints) } interface BaseUrlsIterator extends Iterator { reset: () => void; } -function getPreferredUrls(endpoints: Partial>): BaseUrlsMap[] { - const preference = getEndpointPreference() +function getPreferredUrls(endpoints: Record): BaseUrlsMap[] { + const urlStrategyConfig: UrlStrategyConfig = getUrlStrategyConfig(endpoints) - if (!Array.isArray(preference)) { - return [preference] - } else { - const res = preference - .map(strategy => endpoints[strategy] || null) - .filter((i): i is BaseUrlsMap => !!i) + const urls = [] as BaseUrlsMap[] - return res + //if (urlStrategyConfig.isDataResidency) { } + + for (const domain of urlStrategyConfig.domains) { + const map = urlStrategyConfig.useSubdomains + ? { + app: `${BASE_URL_PREFIX}${domain}`, + gdpr: `${GDPR_URL_PREFIX}${domain}` + } + : { + app: `${BASE_URL_NO_SUB_DOMAIN_PREFIX}${domain}`, + gdpr: `${BASE_URL_NO_SUB_DOMAIN_PREFIX}${domain}` + } + + urls.push(map) } + + return urls; } -function getBaseUrlsIterator(endpoints: Partial> = endpointMap): BaseUrlsIterator { +type Endpoints = keyof typeof ENDPOINTS + +function getBaseUrlsIterator(endpoints: Record = ENDPOINTS): BaseUrlsIterator { const _urls = getPreferredUrls(endpoints) let _counter = 0 From 958a76f24bcc756823b1ab9cda2de2a0dd7f938e Mon Sep 17 00:00:00 2001 From: Yara Matkova Date: Wed, 17 Jul 2024 18:53:13 +0200 Subject: [PATCH 33/70] refactor: move url strategy constants to constants.js --- src/sdk/constants.ts | 14 ++++++++++++++ src/sdk/url-strategy.ts | 28 ++++++++-------------------- 2 files changed, 22 insertions(+), 20 deletions(-) diff --git a/src/sdk/constants.ts b/src/sdk/constants.ts index 6a4ad1f..7562149 100644 --- a/src/sdk/constants.ts +++ b/src/sdk/constants.ts @@ -24,6 +24,20 @@ export enum STORAGE_TYPES { LOCAL_STORAGE = 'localStorage' } +export const ENDPOINTS = { + default: 'adjust.com', + india: 'adjust.net.in', + china: 'adjust.world', + world: 'adjust.world', + EU: 'eu.adjust.com', + TR: 'tr.adjust.com', + US: 'us.adjust.com', +} + +export const BASE_URL_PREFIX = 'https://app.'; +export const GDPR_URL_PREFIX = 'https://gdpr.'; +export const BASE_URL_NO_SUB_DOMAIN_PREFIX = 'https://'; + export const PUB_SUB_EVENTS = { WEB_UUID_CREATED: 'activity:web_uuid', ATTRIBUTION_RECEIVED: 'activity:attribution', diff --git a/src/sdk/url-strategy.ts b/src/sdk/url-strategy.ts index 9ec0db1..75a8df5 100644 --- a/src/sdk/url-strategy.ts +++ b/src/sdk/url-strategy.ts @@ -1,35 +1,23 @@ import Config from './config' import Logger from './logger' +import { + ENDPOINTS, + BASE_URL_PREFIX, + GDPR_URL_PREFIX, + BASE_URL_NO_SUB_DOMAIN_PREFIX +} from './constants' export interface UrlStrategyConfig { /** The country or countries of data residence, or the endpoints to which you want to send SDK traffic. */ domains: Array; - /** - * Whether the source should prefix a subdomain. - */ + /** Whether the source should prefix a subdomain. */ useSubdomains: boolean; - /** - * Whether the domain should be used for data residency. - */ + /** Whether the domain should be used for data residency. */ isDataResidency: boolean; } -const ENDPOINTS = { - default: 'adjust.com', - india: 'adjust.net.in', - china: 'adjust.world', - world: 'adjust.world', - EU: 'eu.adjust.com', - TR: 'tr.adjust.com', - US: 'us.adjust.com', -} - -const BASE_URL_PREFIX = 'https://app.'; -const GDPR_URL_PREFIX = 'https://gdpr.'; -const BASE_URL_NO_SUB_DOMAIN_PREFIX = 'https://'; - function getDefaultUrlStrategyConfig(endpoints: Record) { return { domains: [endpoints.default, endpoints.world], From 403c1e5b69d6bba614aa44718299cd95b9efec40 Mon Sep 17 00:00:00 2001 From: Yara Matkova Date: Wed, 17 Jul 2024 18:54:15 +0200 Subject: [PATCH 34/70] test: update url-strategy mock to match actual behaviour --- src/sdk/__mocks__/url-strategy.ts | 50 +++++++++++++++++++++++-------- 1 file changed, 37 insertions(+), 13 deletions(-) diff --git a/src/sdk/__mocks__/url-strategy.ts b/src/sdk/__mocks__/url-strategy.ts index 21f75cd..2542baf 100644 --- a/src/sdk/__mocks__/url-strategy.ts +++ b/src/sdk/__mocks__/url-strategy.ts @@ -1,20 +1,44 @@ -import type { BaseUrlsMap, UrlStrategy } from '../url-strategy' +import { BaseUrlsMap } from "../url-strategy" -const urlStrategyModule = jest.requireActual('../url-strategy') +type Endpoints = keyof typeof testEndpoints -const testEndpoints = { - default: { app: 'app.default', gdpr: '' }, - india: { app: 'app.india', gdpr: '' }, - china: { app: 'app.china', gdpr: '' } +export const testEndpoints = { + default: 'default', + india: 'india', + china: 'china', + world: 'world', + EU: 'eu', + TR: 'tr', + US: 'us', } -const singleEndpoint = { default: { app: 'app', gdpr: 'gdpr' } } - -export const mockEndpoints = { - endpoints: testEndpoints, - singleEndpoint +export const singleEndpoint = { + default: 'default' } -export function getBaseUrlsIterator(endpoints: Partial> = mockEndpoints.singleEndpoint) { - return urlStrategyModule.getBaseUrlsIterator(endpoints) +export function getBaseUrlsIterator(endpoints: Partial> = singleEndpoint) { + const _urls = [] as BaseUrlsMap[] + + for (const i in endpoints) { + const urlMap = { + app: 'app.' + i, + gdpr: 'gdpr.' + i + } + _urls.push(urlMap) + } + + let _counter = 0 + + return { + next: () => { + if (_counter < _urls.length) { + return { value: _urls[_counter++], done: false } + } else { + return { value: undefined, done: true } + } + }, + reset: () => { + _counter = 0 + } + } } From 8b293ebbf309aecc831f9ebd62239ce467a67431 Mon Sep 17 00:00:00 2001 From: Yara Matkova Date: Wed, 17 Jul 2024 18:54:56 +0200 Subject: [PATCH 35/70] test: update domain constants in tests --- src/sdk/__tests__/event.spec.js | 2 +- src/sdk/__tests__/gdpr-forget-device.spec.js | 2 +- src/sdk/__tests__/sdk-click.spec.js | 4 ++-- src/sdk/__tests__/session.spec.js | 10 +++++----- src/sdk/__tests__/third-party-sharing.spec.js | 2 +- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/sdk/__tests__/event.spec.js b/src/sdk/__tests__/event.spec.js index 89b66ee..2990b46 100644 --- a/src/sdk/__tests__/event.spec.js +++ b/src/sdk/__tests__/event.spec.js @@ -27,7 +27,7 @@ const appOptions = { function expectRequest (requestConfig, timestamp) { const fullConfig = { - endpoint: 'app', + endpoint: 'app.default', ...requestConfig, params: { attempts: 1, diff --git a/src/sdk/__tests__/gdpr-forget-device.spec.js b/src/sdk/__tests__/gdpr-forget-device.spec.js index f46b064..ddbe0d9 100644 --- a/src/sdk/__tests__/gdpr-forget-device.spec.js +++ b/src/sdk/__tests__/gdpr-forget-device.spec.js @@ -24,7 +24,7 @@ function expectRequest () { } const fullConfig = { - endpoint: 'gdpr', + endpoint: 'gdpr.default', ...requestConfig, params: { attempts: 1, diff --git a/src/sdk/__tests__/sdk-click.spec.js b/src/sdk/__tests__/sdk-click.spec.js index a52da2b..ca22879 100644 --- a/src/sdk/__tests__/sdk-click.spec.js +++ b/src/sdk/__tests__/sdk-click.spec.js @@ -64,7 +64,7 @@ describe('test sdk-click functionality', () => { } const fullConfig = { - endpoint: 'app', + endpoint: 'app.default', ...requestConfig, params: { attempts: 1, @@ -113,7 +113,7 @@ describe('test sdk-click functionality', () => { } const fullConfig = { - endpoint: 'app', + endpoint: 'app.default', ...requestConfig, params: { attempts: 1, diff --git a/src/sdk/__tests__/session.spec.js b/src/sdk/__tests__/session.spec.js index 80a9d65..4496e24 100644 --- a/src/sdk/__tests__/session.spec.js +++ b/src/sdk/__tests__/session.spec.js @@ -379,7 +379,7 @@ describe('test session functionality', () => { jest.runOnlyPendingTimers() expect(http.default).toHaveBeenCalledWith({ - endpoint: 'app', + endpoint: 'app.default', url: '/session', method: 'POST', params: { @@ -450,7 +450,7 @@ describe('test session functionality', () => { jest.advanceTimersByTime(150) expect(http.default).toHaveBeenCalledWith({ - endpoint: 'app', + endpoint: 'app.default', url: '/session', method: 'POST', params: { @@ -785,7 +785,7 @@ describe('test session functionality', () => { jest.runOnlyPendingTimers() expect(http.default).toHaveBeenCalledWith({ - endpoint: 'app', + endpoint: 'app.default', url: '/session', method: 'POST', params: { @@ -857,7 +857,7 @@ describe('test session functionality', () => { jest.runOnlyPendingTimers() expect(http.default).toHaveBeenCalledWith({ - endpoint: 'app', + endpoint: 'app.default', url: '/session', method: 'POST', params: { @@ -961,7 +961,7 @@ describe('test session functionality', () => { jest.runOnlyPendingTimers() expect(http.default).toHaveBeenCalledWith({ - endpoint: 'app', + endpoint: 'app.default', url: '/session', method: 'POST', params: { diff --git a/src/sdk/__tests__/third-party-sharing.spec.js b/src/sdk/__tests__/third-party-sharing.spec.js index 2c6aace..97abba3 100644 --- a/src/sdk/__tests__/third-party-sharing.spec.js +++ b/src/sdk/__tests__/third-party-sharing.spec.js @@ -24,7 +24,7 @@ function expectRequest () { } const fullConfig = { - endpoint: 'app', + endpoint: 'app.default', ...requestConfig, params: { attempts: 1, From ddd3296a7e3d0f8b5ba039303c9b23ea733f8ba7 Mon Sep 17 00:00:00 2001 From: Yara Matkova Date: Wed, 17 Jul 2024 18:55:55 +0200 Subject: [PATCH 36/70] test: update existing url-strategy tests --- src/sdk/__tests__/url-strategy.spec.ts | 73 ++++++++++---------------- 1 file changed, 29 insertions(+), 44 deletions(-) diff --git a/src/sdk/__tests__/url-strategy.spec.ts b/src/sdk/__tests__/url-strategy.spec.ts index c498d28..9db0e33 100644 --- a/src/sdk/__tests__/url-strategy.spec.ts +++ b/src/sdk/__tests__/url-strategy.spec.ts @@ -1,37 +1,30 @@ import { UrlStrategy, getBaseUrlsIterator, BaseUrlsMap, BaseUrlsIterator, DataResidency } from '../url-strategy' import * as Globals from '../globals' import * as Logger from '../logger' +import * as constants from '../constants'; + +constants.BASE_URL_PREFIX = ''; +constants.GDPR_URL_PREFIX = ''; +constants.BASE_URL_NO_SUB_DOMAIN_PREFIX = ''; jest.mock('../logger') describe('test url strategy', () => { const testEndpoints = { - [UrlStrategy.Default]: { - app: 'app.default', - gdpr: 'gdpr.default' - }, - [UrlStrategy.India]: { - app: 'app.india', - gdpr: 'gdpr.india' - }, - [UrlStrategy.China]: { - app: 'app.china', - gdpr: 'gdpr.china' - }, - [DataResidency.EU]: { - app: 'app.eu', - gdpr: 'gdpr.eu' - }, - [DataResidency.TR]: { - app: 'app.tr', - gdpr: 'gdpr.tr' - }, - [DataResidency.US]: { - app: 'app.us', - gdpr: 'gdpr.us' - } + default: 'default', + india: 'india', + china: 'china', + world: 'world', + EU: 'eu', + TR: 'tr', + US: 'us', } + const getIteratorValue = (endpoint: string) => ({ + app: constants.BASE_URL_PREFIX + endpoint, + gdpr: constants.GDPR_URL_PREFIX + endpoint + }) + let Config const options = { @@ -80,9 +73,8 @@ describe('test url strategy', () => { it('returns all values through iteration when default url startegy used', () => { const iterator = getBaseUrlsIterator(testEndpoints) - expect(iterator.next()).toEqual({ value: testEndpoints.default, done: false }) - expect(iterator.next()).toEqual({ value: testEndpoints.india, done: false }) - expect(iterator.next()).toEqual({ value: testEndpoints.china, done: false }) + expect(iterator.next()).toEqual({ value: getIteratorValue(testEndpoints.default), done: false }) + expect(iterator.next()).toEqual({ value: getIteratorValue(testEndpoints.world), done: false }) expect(iterator.next()).toEqual({ value: undefined, done: true }) }) @@ -92,8 +84,8 @@ describe('test url strategy', () => { const values = iterateThrough(getBaseUrlsIterator(testEndpoints)) expect(values.length).toBe(2) - expect(values[0]).toEqual(testEndpoints.india) - expect(values[1]).toEqual(testEndpoints.default) + expect(values[0]).toEqual(getIteratorValue(testEndpoints.india)) + expect(values[1]).toEqual(getIteratorValue(testEndpoints.default)) }) it('prefers Chinese enpoint and does not try reach Indian one when china url strategy set', () => { @@ -102,8 +94,8 @@ describe('test url strategy', () => { const values = iterateThrough(getBaseUrlsIterator(testEndpoints)) expect(values.length).toBe(2) - expect(values[0]).toEqual(testEndpoints.china) - expect(values[1]).toEqual(testEndpoints.default) + expect(values[0]).toEqual(getIteratorValue(testEndpoints.china)) + expect(values[1]).toEqual(getIteratorValue(testEndpoints.default)) }) it('does not override custom url', () => { @@ -119,7 +111,7 @@ describe('test url strategy', () => { describe('reset allows to restart iteration', () => { it('iterates through all endpoints twice in default order', () => { - const defaultEndpointsNumber = 3 // number of endpoints to try if default url strategy used + const defaultEndpointsNumber = 2 // number of endpoints to try if default url strategy used const iterator = getBaseUrlsIterator(testEndpoints) @@ -141,21 +133,14 @@ describe('test url strategy', () => { iterator.reset() const secondIteration = iterateThrough(iterator, 2) iterator.reset() - const thirdIteration = iterateThrough(iterator, 3) - iterator.reset() expect(firstIteration.length).toBe(1) expect(secondIteration.length).toBe(2) - expect(thirdIteration.length).toBe(3) - - expect(firstIteration[0]).toEqual(testEndpoints.default) - expect(secondIteration[0]).toEqual(testEndpoints.default) - expect(thirdIteration[0]).toEqual(testEndpoints.default) - expect(secondIteration[1]).toEqual(testEndpoints.india) - expect(thirdIteration[1]).toEqual(testEndpoints.india) + expect(firstIteration[0]).toEqual(getIteratorValue(testEndpoints.default)) + expect(secondIteration[0]).toEqual(getIteratorValue(testEndpoints.default)) - expect(thirdIteration[2]).toEqual(testEndpoints.china) + expect(secondIteration[1]).toEqual(getIteratorValue(testEndpoints.world)) }) }) @@ -171,7 +156,7 @@ describe('test url strategy', () => { const values = iterateThrough(getBaseUrlsIterator(testEndpoints)) expect(values.length).toBe(1) - expect(values[0]).toEqual(testEndpoints[dataResidency]) + expect(values[0]).toEqual(getIteratorValue(testEndpoints[dataResidency])) }) it.each([ @@ -188,7 +173,7 @@ describe('test url strategy', () => { expect(Logger.default.warn).toHaveBeenCalledWith('Both dataResidency and urlStrategy are set in config, urlStrategy will be ignored') expect(values.length).toBe(1) - expect(values[0]).toEqual(testEndpoints[dataResidency]) + expect(values[0]).toEqual(getIteratorValue(testEndpoints[dataResidency])) }) }) }) From 37f3739ea866e73e24e300fd59a704e58c581a0a Mon Sep 17 00:00:00 2001 From: Yara Matkova Date: Wed, 17 Jul 2024 18:57:48 +0200 Subject: [PATCH 37/70] style: fix lint issues --- src/sdk/__mocks__/url-strategy.ts | 2 +- src/sdk/__tests__/activity-state.spec.js | 4 ++-- src/sdk/__tests__/main/main.storage-not-available.spec.js | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/sdk/__mocks__/url-strategy.ts b/src/sdk/__mocks__/url-strategy.ts index 2542baf..c1a2af7 100644 --- a/src/sdk/__mocks__/url-strategy.ts +++ b/src/sdk/__mocks__/url-strategy.ts @@ -1,4 +1,4 @@ -import { BaseUrlsMap } from "../url-strategy" +import { BaseUrlsMap } from '../url-strategy' type Endpoints = keyof typeof testEndpoints diff --git a/src/sdk/__tests__/activity-state.spec.js b/src/sdk/__tests__/activity-state.spec.js index b40a863..139839d 100644 --- a/src/sdk/__tests__/activity-state.spec.js +++ b/src/sdk/__tests__/activity-state.spec.js @@ -338,7 +338,7 @@ describe('activity state functionality', () => { describe('async waitForWebUUID function', () => { it('resolves when web_uuid cached', async () => { - await expect(ActivityState.default.waitForWebUUID()).resolves.toEqual('some-uuid'); + await expect(ActivityState.default.waitForWebUUID()).resolves.toBe('some-uuid'); }) it('resolves when receives attribution with pub-sub', async () => { @@ -349,7 +349,7 @@ describe('activity state functionality', () => { publish(PUB_SUB_EVENTS.WEB_UUID_CREATED, 'new_web_uuid'); - await expect(webUuidPromise).resolves.toEqual('new_web_uuid'); + await expect(webUuidPromise).resolves.toBe('new_web_uuid'); }) }) }) diff --git a/src/sdk/__tests__/main/main.storage-not-available.spec.js b/src/sdk/__tests__/main/main.storage-not-available.spec.js index ba26f89..9195948 100644 --- a/src/sdk/__tests__/main/main.storage-not-available.spec.js +++ b/src/sdk/__tests__/main/main.storage-not-available.spec.js @@ -20,8 +20,8 @@ const mockGetType = () => STORAGE_TYPES.NO_STORAGE jest.mock('../../storage/storage', () => ({ init: () => mockInit(), getType: () => mockGetType() - } -)) + }) +) describe('main entry point - test instance initiation when storage is not available', () => { From d5e654dee6311c143673d25df75a4d4fc67ad3b4 Mon Sep 17 00:00:00 2001 From: Yara Matkova Date: Thu, 18 Jul 2024 08:43:07 +0200 Subject: [PATCH 38/70] test: remove non-default endpoints from url-strategy mock --- src/sdk/__mocks__/url-strategy.ts | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/sdk/__mocks__/url-strategy.ts b/src/sdk/__mocks__/url-strategy.ts index c1a2af7..35bf7f7 100644 --- a/src/sdk/__mocks__/url-strategy.ts +++ b/src/sdk/__mocks__/url-strategy.ts @@ -4,12 +4,7 @@ type Endpoints = keyof typeof testEndpoints export const testEndpoints = { default: 'default', - india: 'india', - china: 'china', world: 'world', - EU: 'eu', - TR: 'tr', - US: 'us', } export const singleEndpoint = { From 58dd71022c7b9f14913e62432923ba2aebeb5914 Mon Sep 17 00:00:00 2001 From: Yara Matkova Date: Thu, 18 Jul 2024 08:45:16 +0200 Subject: [PATCH 39/70] test: update request.js tests --- src/sdk/__tests__/request.spec.js | 143 ++++++++++++++---------------- 1 file changed, 65 insertions(+), 78 deletions(-) diff --git a/src/sdk/__tests__/request.spec.js b/src/sdk/__tests__/request.spec.js index 1747782..12a019a 100644 --- a/src/sdk/__tests__/request.spec.js +++ b/src/sdk/__tests__/request.spec.js @@ -4,6 +4,10 @@ import * as Time from '../time' import * as Logger from '../logger' import * as Listeners from '../listeners' import * as UrlStartegy from '../url-strategy' +import * as Constants from '../constants' + +Constants.BASE_URL_PREFIX = 'app.'; +Constants.GDPR_URL_PREFIX = 'gdpr.'; jest.mock('../http') jest.mock('../logger') @@ -65,7 +69,7 @@ describe('test request functionality', () => { jest.runOnlyPendingTimers() expect(http.default).toHaveBeenCalledWith({ - endpoint: 'app', + endpoint: 'app.default', url: '/global-request', method: 'GET', params: { @@ -103,7 +107,7 @@ describe('test request functionality', () => { jest.runOnlyPendingTimers() expect(http.default).toHaveBeenCalledWith({ - endpoint: 'app', + endpoint: 'app.default', url: '/global-request', method: 'GET', params: { @@ -125,10 +129,10 @@ describe('test request functionality', () => { createdAtSpy.mockReturnValueOnce(now) - http.default.mockResolvedValue({wait: 3000}) + http.default.mockResolvedValue({ wait: 3000 }) someRequest.send({ - continueCb (result, finish, retry) { + continueCb(result, finish, retry) { if (result.wait) { return retry(result.wait) } @@ -205,12 +209,12 @@ describe('test request functionality', () => { finish() }) - http.default.mockResolvedValue({wait: 1300}) + http.default.mockResolvedValue({ wait: 1300 }) someRequest.send({ url: '/other-request', method: 'POST', - params: {something: 'else'}, + params: { something: 'else' }, continueCb }) @@ -224,7 +228,7 @@ describe('test request functionality', () => { expect(http.default).toHaveBeenCalledTimes(1) expect(http.default).toHaveBeenLastCalledWith({ - endpoint: 'app', + endpoint: 'app.default', url: '/other-request', method: 'POST', params: { @@ -245,7 +249,7 @@ describe('test request functionality', () => { expect(setTimeout).toHaveBeenLastCalledWith(expect.any(Function), 1300) expect(http.default).toHaveBeenCalledTimes(2) expect(http.default).toHaveBeenLastCalledWith({ - endpoint: 'app', + endpoint: 'app.default', url: '/other-request', method: 'POST', params: { @@ -269,7 +273,7 @@ describe('test request functionality', () => { expect(setTimeout).toHaveBeenLastCalledWith(expect.any(Function), 1300) expect(http.default).toHaveBeenCalledTimes(1) expect(http.default).toHaveBeenLastCalledWith({ - endpoint: 'app', + endpoint: 'app.default', url: '/other-request', method: 'POST', params: { @@ -301,7 +305,7 @@ describe('test request functionality', () => { jest.runOnlyPendingTimers() expect(http.default).toHaveBeenCalledWith({ - endpoint: 'app', + endpoint: 'app.default', url: '/global-request', method: 'GET', params: { @@ -329,7 +333,7 @@ describe('test request functionality', () => { .mockReturnValueOnce(now) .mockReturnValueOnce(newNow) - http.default.mockResolvedValue({retry_in: 666}) + http.default.mockResolvedValue({ retry_in: 666 }) someRequest.send({ url: '/some-request', @@ -346,7 +350,7 @@ describe('test request functionality', () => { expect(http.default).toHaveBeenCalledTimes(1) expect(http.default).toHaveBeenLastCalledWith({ - endpoint: 'app', + endpoint: 'app.default', url: '/some-request', method: 'POST', params: { @@ -360,7 +364,7 @@ describe('test request functionality', () => { .then(() => { expect(Logger.default.log).toHaveBeenLastCalledWith('Re-trying request /some-request in 666ms') - http.default.mockResolvedValue({retry_in: 777}) + http.default.mockResolvedValue({ retry_in: 777 }) jest.runOnlyPendingTimers() @@ -368,7 +372,7 @@ describe('test request functionality', () => { expect(setTimeout).toHaveBeenLastCalledWith(expect.any(Function), 666) expect(http.default).toHaveBeenCalledTimes(2) expect(http.default).toHaveBeenLastCalledWith({ - endpoint: 'app', + endpoint: 'app.default', url: '/some-request', method: 'POST', params: { @@ -391,7 +395,7 @@ describe('test request functionality', () => { expect(setTimeout).toHaveBeenLastCalledWith(expect.any(Function), 777) expect(http.default).toHaveBeenCalledTimes(1) expect(http.default).toHaveBeenLastCalledWith({ - endpoint: 'app', + endpoint: 'app.default', url: '/some-request', method: 'POST', params: { @@ -420,7 +424,7 @@ describe('test request functionality', () => { jest.runOnlyPendingTimers() expect(http.default).toHaveBeenCalledWith({ - endpoint: 'app', + endpoint: 'app.default', url: '/global-request', method: 'GET', params: { @@ -448,7 +452,7 @@ describe('test request functionality', () => { .mockReturnValueOnce(now) .mockReturnValueOnce(newNow) - http.default.mockResolvedValue({retry_in: 2592000000}) + http.default.mockResolvedValue({ retry_in: 2592000000 }) someRequest.send({ url: '/some-request' @@ -790,7 +794,7 @@ describe('test request functionality', () => { expect.assertions(27) - someRequest.send({url: '/new-request'}) + someRequest.send({ url: '/new-request' }) expect(Logger.default.log).toHaveBeenLastCalledWith('Trying request /new-request in 150ms') expect(setTimeout).toHaveBeenCalledTimes(1) @@ -868,7 +872,7 @@ describe('test request functionality', () => { jest.runOnlyPendingTimers() expect(http.default).toHaveBeenCalledWith({ - endpoint: 'app', + endpoint: 'app.default', url: '/global-request', method: 'GET', params: { @@ -888,7 +892,7 @@ describe('test request functionality', () => { expect.assertions(6) - someRequest.send({wait: 2000}) + someRequest.send({ wait: 2000 }) expect(Logger.default.log).toHaveBeenLastCalledWith('Trying request /global-request in 2000ms') expect(setTimeout).toHaveBeenLastCalledWith(expect.any(Function), 2000) @@ -960,7 +964,7 @@ describe('test request functionality', () => { .then(() => { expect(Logger.default.log).toHaveBeenLastCalledWith('Previous /other request attempt canceled') - someRequest.send({wait: 500}) + someRequest.send({ wait: 500 }) expect(Logger.default.log).toHaveBeenLastCalledWith('Trying request /global-request in 500ms') expect(setTimeout).toHaveBeenLastCalledWith(expect.any(Function), 500) @@ -991,7 +995,7 @@ describe('test request functionality', () => { expect.assertions(18) - someRequest.send({url: '/some-new-request'}) + someRequest.send({ url: '/some-new-request' }) expect(Logger.default.log).toHaveBeenLastCalledWith('Trying request /some-new-request in 150ms') expect(setTimeout).toHaveBeenCalledTimes(1) @@ -1045,7 +1049,7 @@ describe('test request functionality', () => { jest.runOnlyPendingTimers() expect(http.default).toHaveBeenCalledWith({ - endpoint: 'app', + endpoint: 'app.default', url: '/global-request', method: 'GET', params: { @@ -1069,11 +1073,11 @@ describe('test request functionality', () => { .mockReturnValueOnce(now) .mockReturnValueOnce(newNow) - http.default.mockRejectedValue({message: 'Unknown error'}) + http.default.mockRejectedValue({ message: 'Unknown error' }) expect.assertions(17) - let promise = someRequest.send({url: '/failed-request'}) + let promise = someRequest.send({ url: '/failed-request' }) expect(Logger.default.log).toHaveBeenLastCalledWith('Trying request /failed-request in 150ms') expect(setTimeout).toHaveBeenCalledTimes(1) @@ -1090,7 +1094,7 @@ describe('test request functionality', () => { return promise .catch(error => { - expect(error).toEqual({message: 'Unknown error'}) + expect(error).toEqual({ message: 'Unknown error' }) expect(someRequest.isRunning()).toBeFalsy() expect(clearTimeout).toHaveBeenCalledTimes(1) expect(Logger.default.log).toHaveBeenLastCalledWith('Request /failed-request failed') @@ -1099,7 +1103,7 @@ describe('test request functionality', () => { http.default.mockClear() clearTimeout.mockClear() - promise = someRequest.send({url: '/another-failed-request'}) + promise = someRequest.send({ url: '/another-failed-request' }) expect(Logger.default.log).toHaveBeenLastCalledWith('Trying request /another-failed-request in 150ms') expect(someRequest.isRunning()).toBeTruthy() @@ -1107,7 +1111,7 @@ describe('test request functionality', () => { jest.runOnlyPendingTimers() expect(http.default).toHaveBeenCalledWith({ - endpoint: 'app', + endpoint: 'app.default', url: '/another-failed-request', method: 'GET', params: { @@ -1133,7 +1137,7 @@ describe('test request functionality', () => { expect.assertions(9) - someRequest.send({wait: 1000}) + someRequest.send({ wait: 1000 }) expect(Logger.default.log).toHaveBeenLastCalledWith('Trying request /global-request in 1000ms') expect(setTimeout).toHaveBeenLastCalledWith(expect.any(Function), 1000) @@ -1166,7 +1170,7 @@ describe('test request functionality', () => { expect.assertions(9) - someRequest.send({wait: 1000}) + someRequest.send({ wait: 1000 }) expect(Logger.default.log).toHaveBeenLastCalledWith('Trying request /global-request in 1000ms') expect(setTimeout).toHaveBeenLastCalledWith(expect.any(Function), 1000) @@ -1177,7 +1181,7 @@ describe('test request functionality', () => { jest.advanceTimersByTime(500) // initiate another request after 500ms - someRequest.send({wait: 2000}) + someRequest.send({ wait: 2000 }) expect(Logger.default.log).not.toHaveBeenCalledWith('Previous /global-request request attempt canceled') expect(Logger.default.log).not.toHaveBeenCalledWith('Trying request /global-request in 150ms') @@ -1218,7 +1222,7 @@ describe('test request functionality', () => { jest.runOnlyPendingTimers() expect(http.default).toHaveBeenCalledWith({ - endpoint: 'app', + endpoint: 'app.default', url: '/another-global-request', method: 'GET', params: { @@ -1247,7 +1251,7 @@ describe('test request functionality', () => { jest.runOnlyPendingTimers() expect(http.default).toHaveBeenCalledWith({ - endpoint: 'app', + endpoint: 'app.default', url: '/new-url', method: 'POST', params: { @@ -1262,7 +1266,7 @@ describe('test request functionality', () => { .then(() => { expect(Logger.default.log).toHaveBeenCalledWith('Request /new-url has been finished') - req.send({wait: 1000}) + req.send({ wait: 1000 }) expect(Logger.default.log).toHaveBeenLastCalledWith('Trying request /another-global-request in 1000ms') expect(setTimeout).toHaveBeenLastCalledWith(expect.any(Function), 1000) @@ -1301,7 +1305,7 @@ describe('test request functionality', () => { jest.runOnlyPendingTimers() expect(http.default).toHaveBeenCalledWith({ - endpoint: 'app', + endpoint: 'app.default', url: '/another-global-request', method: 'GET', params: { @@ -1337,7 +1341,7 @@ describe('test request functionality', () => { jest.runOnlyPendingTimers() expect(http.default).toHaveBeenCalledWith({ - endpoint: 'app', + endpoint: 'app.default', url: '/another-global-request', method: 'GET', params: { @@ -1354,7 +1358,7 @@ describe('test request functionality', () => { newContinueCb.mockClear() - req.send({wait: 400}) + req.send({ wait: 400 }) expect(Logger.default.log).toHaveBeenLastCalledWith('Trying request /another-global-request in 400ms') expect(setTimeout).toHaveBeenLastCalledWith(expect.any(Function), 400) @@ -1362,7 +1366,7 @@ describe('test request functionality', () => { jest.runOnlyPendingTimers() expect(http.default).toHaveBeenCalledWith({ - endpoint: 'app', + endpoint: 'app.default', url: '/another-global-request', method: 'GET', params: { @@ -1383,7 +1387,7 @@ describe('test request functionality', () => { it('does not send the request when url not defined', () => { const errorRequest = Request.default({ - params: {some: 'param'} + params: { some: 'param' } }) expect.assertions(4) @@ -1405,11 +1409,16 @@ describe('test request functionality', () => { }) describe('url startegy retries functionality', () => { - const testEndpoints = jest.requireMock('../url-strategy').mockEndpoints.endpoints + const testEndpoints = jest.requireMock('../url-strategy').testEndpoints // let getBaseUrlsIterator to return pre-created iterator so it's possible to spy iterator methods const iterator = jest.requireActual(('../url-strategy')).getBaseUrlsIterator(testEndpoints) + const getIteratorValueFromEndpoint = (domain) => ({ + app: Constants.BASE_URL_PREFIX + domain, + gdpr: Constants.GDPR_URL_PREFIX + domain + }) + const expectHttpCall = (times, endpoint, url) => { expect(http.default).toHaveBeenCalledTimes(times) expect(http.default).toHaveBeenCalledWith({ @@ -1446,7 +1455,7 @@ describe('test request functionality', () => { jest.restoreAllMocks() }) - it('does not retries if request succesfully sent', () => { + it('does not retry if request succesfully sent', () => { Request .default({ url: '/global-request', @@ -1460,7 +1469,7 @@ describe('test request functionality', () => { expect(UrlStartegy.getBaseUrlsIterator).toHaveBeenCalled() expect(iterator.next).toHaveBeenCalledTimes(1) - expect(iterator.next).toHaveReturnedWith({ value: testEndpoints.default, done: false }) + expect(iterator.next).toHaveReturnedWith({ value: getIteratorValueFromEndpoint(testEndpoints.default), done: false }) expect(Logger.default.log).toHaveBeenLastCalledWith('Trying request /global-request in 150ms') @@ -1484,7 +1493,7 @@ describe('test request functionality', () => { // iterator was reset and next called in request successful callback expect(iterator.next).toHaveBeenCalledTimes(2) expect(iterator.next).toHaveReturnedTimes(2) - expect(iterator.next).toHaveReturnedWith({ value: testEndpoints.default, done: false }) + expect(iterator.next).toHaveReturnedWith({ value: getIteratorValueFromEndpoint(testEndpoints.default), done: false }) }) }) @@ -1495,10 +1504,10 @@ describe('test request functionality', () => { .default({ url: '/global-request' }) .send() - expect.assertions(38) + expect.assertions(30) expect(UrlStartegy.getBaseUrlsIterator).toHaveBeenCalled() - expect(iterator.next).toHaveReturnedWith({ value: testEndpoints.default, done: false }) + expect(iterator.next).toHaveReturnedWith({ value: getIteratorValueFromEndpoint(testEndpoints.default), done: false }) clearIteratorMock(iterator) expect(Logger.default.log).toHaveBeenLastCalledWith('Trying request /global-request in 150ms') @@ -1509,89 +1518,67 @@ describe('test request functionality', () => { return Utils.flushPromises() .then(() => { - expect(iterator.next).toHaveReturnedWith({ value: testEndpoints.india, done: false }) + expect(iterator.next).toHaveReturnedWith({ value: getIteratorValueFromEndpoint(testEndpoints.world), done: false }) clearIteratorMock(iterator) expect(Logger.default.log).toHaveBeenLastCalledWith('Re-trying request /global-request in 150ms') jest.runOnlyPendingTimers() - expectHttpCall(2, 'app.india', '/global-request') + expectHttpCall(2, 'app.world', '/global-request') return Utils.flushPromises() }) .then(() => { - expect(iterator.next).toHaveReturnedWith({ value: testEndpoints.china, done: false }) - clearIteratorMock(iterator) - - expect(Logger.default.log).toHaveBeenLastCalledWith('Re-trying request /global-request in 150ms') - - jest.runOnlyPendingTimers() - - expectHttpCall(3, 'app.china', '/global-request') - - return Utils.flushPromises() - }).then(() => { expect(iterator.next).toHaveReturnedWith({ value: undefined, done: true }) expect(iterator.reset).toHaveBeenCalled() - expect(iterator.next).toHaveReturnedWith({ value: testEndpoints.default, done: false }) + expect(iterator.next).toHaveReturnedWith({ value: getIteratorValueFromEndpoint(testEndpoints.default), done: false }) clearIteratorMock(iterator) expect(Logger.default.log).toHaveBeenLastCalledWith('Re-trying request /global-request in 60000ms') jest.runOnlyPendingTimers() - expectHttpCall(4, 'app.default', '/global-request') + expectHttpCall(3, 'app.default', '/global-request') return Utils.flushPromises() }).then(() => { - expect(iterator.next).toHaveReturnedWith({ value: testEndpoints.india, done: false }) + expect(iterator.next).toHaveReturnedWith({ value: getIteratorValueFromEndpoint(testEndpoints.world), done: false }) clearIteratorMock(iterator) expect(Logger.default.log).toHaveBeenLastCalledWith('Re-trying request /global-request in 150ms') jest.runOnlyPendingTimers() - expectHttpCall(5, 'app.india', '/global-request') + expectHttpCall(4, 'app.world', '/global-request') return Utils.flushPromises() }) .then(() => { - expect(iterator.next).toHaveReturnedWith({ value: testEndpoints.china, done: false }) - clearIteratorMock(iterator) - - expect(Logger.default.log).toHaveBeenLastCalledWith('Re-trying request /global-request in 150ms') - - jest.runOnlyPendingTimers() - - expectHttpCall(6, 'app.china', '/global-request') - - return Utils.flushPromises() - }).then(() => { expect(iterator.next).toHaveReturnedWith({ value: undefined, done: true }) expect(iterator.reset).toHaveBeenCalled() - expect(iterator.next).toHaveReturnedWith({ value: testEndpoints.default, done: false }) + expect(iterator.next).toHaveReturnedWith({ value: getIteratorValueFromEndpoint(testEndpoints.default), done: false }) clearIteratorMock(iterator) expect(Logger.default.log).toHaveBeenLastCalledWith('Re-trying request /global-request in 60000ms') jest.runOnlyPendingTimers() - expectHttpCall(7, 'app.default', '/global-request') + expectHttpCall(5, 'app.default', '/global-request') http.default.mockResolvedValue({}) // let http successfully resolve next time return Utils.flushPromises() }) .then(() => { - expect(iterator.next).toHaveReturnedWith({ value: testEndpoints.india, done: false }) + expect(iterator.next).toHaveReturnedWith({ value: getIteratorValueFromEndpoint(testEndpoints.world), done: false }) clearIteratorMock(iterator) expect(Logger.default.log).toHaveBeenLastCalledWith('Re-trying request /global-request in 150ms') jest.runOnlyPendingTimers() - expectHttpCall(8, 'app.india', '/global-request') + expectHttpCall(6, 'app.world', '/global-request') return Utils.flushPromises() }) @@ -1613,7 +1600,7 @@ describe('test request functionality', () => { expect.assertions(14) expect(UrlStartegy.getBaseUrlsIterator).toHaveBeenCalled() - expect(iterator.next).toHaveReturnedWith({ value: testEndpoints.default, done: false }) + expect(iterator.next).toHaveReturnedWith({ value: getIteratorValueFromEndpoint(testEndpoints.default), done: false }) clearIteratorMock(iterator) expect(Logger.default.log).toHaveBeenLastCalledWith('Trying request /global-request in 150ms') From b249f989060ebd3fb4d43afc186fd4e44a0d8dcd Mon Sep 17 00:00:00 2001 From: Yara Matkova Date: Thu, 18 Jul 2024 09:20:49 +0200 Subject: [PATCH 40/70] test: disable no-import-assign in request tests --- src/sdk/__tests__/request.spec.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/sdk/__tests__/request.spec.js b/src/sdk/__tests__/request.spec.js index 12a019a..9241264 100644 --- a/src/sdk/__tests__/request.spec.js +++ b/src/sdk/__tests__/request.spec.js @@ -6,8 +6,8 @@ import * as Listeners from '../listeners' import * as UrlStartegy from '../url-strategy' import * as Constants from '../constants' -Constants.BASE_URL_PREFIX = 'app.'; -Constants.GDPR_URL_PREFIX = 'gdpr.'; +Constants.BASE_URL_PREFIX = 'app.'; // eslint-disable-line no-import-assign +Constants.GDPR_URL_PREFIX = 'gdpr.'; // eslint-disable-line no-import-assign jest.mock('../http') jest.mock('../logger') From 999e33afda9d2f8ab6de83673fa00e6b9883a8f8 Mon Sep 17 00:00:00 2001 From: Yara Matkova Date: Thu, 18 Jul 2024 10:33:11 +0200 Subject: [PATCH 41/70] test: set URL Strategy as a list of domains --- dist/adjust-latest.d.ts | 10 +- src/sdk/__tests__/url-strategy.spec.ts | 156 +++++++++++++++++-------- src/sdk/url-strategy.ts | 2 +- 3 files changed, 113 insertions(+), 55 deletions(-) diff --git a/dist/adjust-latest.d.ts b/dist/adjust-latest.d.ts index 39d93b1..a5a05c3 100644 --- a/dist/adjust-latest.d.ts +++ b/dist/adjust-latest.d.ts @@ -108,15 +108,11 @@ declare namespace Adjust { /** The country or countries of data residence, or the endpoints to which you want to send SDK traffic. */ domains: Array; - /** - * Whether the source should prefix a subdomain. - */ + /** Whether the source should prefix a subdomain. */ useSubdomains: boolean; - /** - * Whether the domain should be used for data residency. - */ - isDataResidency: boolean; + /** Whether the domain should be used for data residency. */ + isDataResidency?: boolean; } interface InitOptions { diff --git a/src/sdk/__tests__/url-strategy.spec.ts b/src/sdk/__tests__/url-strategy.spec.ts index 9db0e33..5113c02 100644 --- a/src/sdk/__tests__/url-strategy.spec.ts +++ b/src/sdk/__tests__/url-strategy.spec.ts @@ -1,11 +1,18 @@ -import { UrlStrategy, getBaseUrlsIterator, BaseUrlsMap, BaseUrlsIterator, DataResidency } from '../url-strategy' +import { + UrlStrategy, + getBaseUrlsIterator, + BaseUrlsMap, + BaseUrlsIterator, + DataResidency, + UrlStrategyConfig +} from '../url-strategy' import * as Globals from '../globals' import * as Logger from '../logger' -import * as constants from '../constants'; +import * as Constants from '../constants'; -constants.BASE_URL_PREFIX = ''; -constants.GDPR_URL_PREFIX = ''; -constants.BASE_URL_NO_SUB_DOMAIN_PREFIX = ''; +Constants.BASE_URL_PREFIX = 'app.'; +Constants.GDPR_URL_PREFIX = 'gdpr.'; +Constants.BASE_URL_NO_SUB_DOMAIN_PREFIX = ''; jest.mock('../logger') @@ -20,9 +27,10 @@ describe('test url strategy', () => { US: 'us', } + // returns an object containing `app` and `gdpr` endpoints const getIteratorValue = (endpoint: string) => ({ - app: constants.BASE_URL_PREFIX + endpoint, - gdpr: constants.GDPR_URL_PREFIX + endpoint + app: Constants.BASE_URL_PREFIX + endpoint, + gdpr: Constants.GDPR_URL_PREFIX + endpoint }) let Config @@ -53,22 +61,22 @@ describe('test url strategy', () => { jest.restoreAllMocks() }) - describe('BaseUrlsIterator tests', () => { + const iterateThrough = (iterator: BaseUrlsIterator, iterationsNumber?: number) => { + const results: BaseUrlsMap[] = [] + let current + let steps = iterationsNumber === undefined ? -1 : iterationsNumber - const iterateThrough = (iterator: BaseUrlsIterator, iterationsNumber?: number) => { - const results: BaseUrlsMap[] = [] - let current - let steps = iterationsNumber === undefined ? -1 : iterationsNumber + do { + current = iterator.next() + if (current.value) { + results.push(current.value) + } + } while (!current.done && --steps !== 0) - do { - current = iterator.next() - if (current.value) { - results.push(current.value) - } - } while (!current.done && --steps !== 0) + return results + } - return results - } + describe('BaseUrlsIterator tests', () => { it('returns all values through iteration when default url startegy used', () => { const iterator = getBaseUrlsIterator(testEndpoints) @@ -144,37 +152,91 @@ describe('test url strategy', () => { }) }) - describe('data residency', () => { + }) - it.each([ - DataResidency.EU, - DataResidency.US, - DataResidency.TR - ])('tries to reach only regional endpoint if data residency set', (dataResidency) => { - Config.set({ ...options, dataResidency: dataResidency }) + describe('Data Residency', () => { - const values = iterateThrough(getBaseUrlsIterator(testEndpoints)) + it.each([ + DataResidency.EU, + DataResidency.US, + DataResidency.TR + ])('tries to reach only regional endpoint if data residency set', (dataResidency) => { + Config.set({ ...options, dataResidency: dataResidency }) - expect(values.length).toBe(1) - expect(values[0]).toEqual(getIteratorValue(testEndpoints[dataResidency])) - }) + const values = iterateThrough(getBaseUrlsIterator(testEndpoints)) - it.each([ - [UrlStrategy.China, DataResidency.EU], - [UrlStrategy.China, DataResidency.US], - [UrlStrategy.China, DataResidency.TR], - [UrlStrategy.India, DataResidency.EU], - [UrlStrategy.India, DataResidency.US], - [UrlStrategy.India, DataResidency.TR] - ])('drops url strategy if data residency set', (urlStrategy, dataResidency) => { - Config.set({ ...options, urlStrategy: urlStrategy, dataResidency: dataResidency }) - - const values = iterateThrough(getBaseUrlsIterator(testEndpoints)) - - expect(Logger.default.warn).toHaveBeenCalledWith('Both dataResidency and urlStrategy are set in config, urlStrategy will be ignored') - expect(values.length).toBe(1) - expect(values[0]).toEqual(getIteratorValue(testEndpoints[dataResidency])) - }) + expect(values.length).toBe(1) + expect(values[0]).toEqual(getIteratorValue(testEndpoints[dataResidency])) + }) + + it.each([ + [UrlStrategy.China, DataResidency.EU], + [UrlStrategy.China, DataResidency.US], + [UrlStrategy.China, DataResidency.TR], + [UrlStrategy.India, DataResidency.EU], + [UrlStrategy.India, DataResidency.US], + [UrlStrategy.India, DataResidency.TR] + ])('drops url strategy if data residency set', (urlStrategy, dataResidency) => { + Config.set({ ...options, urlStrategy: urlStrategy, dataResidency: dataResidency }) + + const values = iterateThrough(getBaseUrlsIterator(testEndpoints)) + + expect(Logger.default.warn).toHaveBeenCalledWith('Both dataResidency and urlStrategy are set in config, urlStrategy will be ignored') + expect(values.length).toBe(1) + expect(values[0]).toEqual(getIteratorValue(testEndpoints[dataResidency])) + }) + }) + + describe('Set URL Strategy as a list of domains', () => { + it('logs a warning and uses default endpoints if passed domain list is not defined', () => { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const urlStrategy: UrlStrategyConfig = { domains: undefined, useSubdomains: true } as any + Config.set({ ...options, urlStrategy }) + + const values = iterateThrough(getBaseUrlsIterator(testEndpoints)) + + expect(values.length).toBe(2) + expect(values[0]).toEqual(getIteratorValue(testEndpoints.default)) + expect(values[1]).toEqual(getIteratorValue(testEndpoints.world)) + expect(Logger.default.warn).toHaveBeenCalledWith('Invalid urlStartegy: `domains` should be a non-empty array') + }) + + it('logs a warning and uses default endpoints if passed domain list is empty', () => { + const urlStrategy: UrlStrategyConfig = { domains: [], useSubdomains: true } + Config.set({ ...options, urlStrategy }) + + const values = iterateThrough(getBaseUrlsIterator(testEndpoints)) + + expect(values.length).toBe(2) + expect(values[0]).toEqual(getIteratorValue(testEndpoints.default)) + expect(values[1]).toEqual(getIteratorValue(testEndpoints.world)) + expect(Logger.default.warn).toHaveBeenCalledWith('Invalid urlStartegy: `domains` should be a non-empty array') + }) + + it('uses passed endpoints', () => { + const urlStrategy: UrlStrategyConfig = { domains: ['example.com', 'my.domain.org', 'page.de'], useSubdomains: true } + Config.set({ ...options, urlStrategy }) + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const values = iterateThrough(getBaseUrlsIterator([] as any)) // passing endpoints needed only for backward compatibility + + expect(values.length).toBe(3) + expect(values[0]).toEqual(getIteratorValue('example.com')) + expect(values[1]).toEqual(getIteratorValue('my.domain.org')) + expect(values[2]).toEqual(getIteratorValue('page.de')) + }) + + it('does not add subdomains when `useSubdomains` is false', () => { + const urlStrategy: UrlStrategyConfig = { domains: ['example.com', 'my.domain.org', 'page.de'], useSubdomains: false } + Config.set({ ...options, urlStrategy }) + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const values = iterateThrough(getBaseUrlsIterator([] as any)) // passing endpoints needed only for backward compatibility + + expect(values.length).toBe(3) + expect(values[0]).toEqual({app: 'example.com', gdpr: 'example.com'}) + expect(values[1]).toEqual({app: 'my.domain.org', gdpr: 'my.domain.org'}) + expect(values[2]).toEqual({app: 'page.de', gdpr: 'page.de'}) }) }) }) diff --git a/src/sdk/url-strategy.ts b/src/sdk/url-strategy.ts index 75a8df5..54e4354 100644 --- a/src/sdk/url-strategy.ts +++ b/src/sdk/url-strategy.ts @@ -15,7 +15,7 @@ export interface UrlStrategyConfig { useSubdomains: boolean; /** Whether the domain should be used for data residency. */ - isDataResidency: boolean; + isDataResidency?: boolean; } function getDefaultUrlStrategyConfig(endpoints: Record) { From a562a57c17a0cb9f2f6590d1103563c103e1073a Mon Sep 17 00:00:00 2001 From: Yara Matkova Date: Thu, 18 Jul 2024 10:58:45 +0200 Subject: [PATCH 42/70] test: check deprecation warnings are logged by url-startegy --- src/sdk/__tests__/url-strategy.spec.ts | 39 ++++++++++++++++++++++++-- 1 file changed, 36 insertions(+), 3 deletions(-) diff --git a/src/sdk/__tests__/url-strategy.spec.ts b/src/sdk/__tests__/url-strategy.spec.ts index 5113c02..b136afb 100644 --- a/src/sdk/__tests__/url-strategy.spec.ts +++ b/src/sdk/__tests__/url-strategy.spec.ts @@ -234,9 +234,42 @@ describe('test url strategy', () => { const values = iterateThrough(getBaseUrlsIterator([] as any)) // passing endpoints needed only for backward compatibility expect(values.length).toBe(3) - expect(values[0]).toEqual({app: 'example.com', gdpr: 'example.com'}) - expect(values[1]).toEqual({app: 'my.domain.org', gdpr: 'my.domain.org'}) - expect(values[2]).toEqual({app: 'page.de', gdpr: 'page.de'}) + expect(values[0]).toEqual({ app: 'example.com', gdpr: 'example.com' }) + expect(values[1]).toEqual({ app: 'my.domain.org', gdpr: 'my.domain.org' }) + expect(values[2]).toEqual({ app: 'page.de', gdpr: 'page.de' }) + }) + }) + + describe('Logs deprecation warnings', () => { + it('logs a warning when customUrl is set', () => { + Config.set({ ...options, customUrl: 'my.domain.org' }) + + iterateThrough(getBaseUrlsIterator(testEndpoints)) + + expect(Logger.default.warn).toHaveBeenCalledWith('customUrl is deprecated, use urlStrategy instead') + }) + + it.each([ + DataResidency.EU, + DataResidency.US, + DataResidency.TR, + ])('logs a warning when dataResidency is set', dr => { + Config.set({ ...options, dataResidency: dr }) + + iterateThrough(getBaseUrlsIterator(testEndpoints)) + + expect(Logger.default.warn).toHaveBeenCalledWith('dataResidency is deprecated, use urlStrategy instead') + }) + + it.each([ + UrlStrategy.China, + UrlStrategy.India + ])('logs a warning when urlStrategy set with a string', urlStrategy => { + Config.set({ ...options, urlStrategy: urlStrategy }) + + iterateThrough(getBaseUrlsIterator(testEndpoints)) + + expect(Logger.default.warn).toHaveBeenCalledWith('urlStrategy string literals (\'china\' and \'india\') are deprected, use UrlStartegyConfig instead') }) }) }) From 35038ecc2a8471ecdfb61dc2f6bf569ae95c5914 Mon Sep 17 00:00:00 2001 From: Yara Matkova Date: Thu, 18 Jul 2024 11:28:56 +0200 Subject: [PATCH 43/70] style: move re-defined contants closer to the test --- src/sdk/__tests__/request.spec.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/sdk/__tests__/request.spec.js b/src/sdk/__tests__/request.spec.js index 9241264..e7d6c03 100644 --- a/src/sdk/__tests__/request.spec.js +++ b/src/sdk/__tests__/request.spec.js @@ -6,9 +6,6 @@ import * as Listeners from '../listeners' import * as UrlStartegy from '../url-strategy' import * as Constants from '../constants' -Constants.BASE_URL_PREFIX = 'app.'; // eslint-disable-line no-import-assign -Constants.GDPR_URL_PREFIX = 'gdpr.'; // eslint-disable-line no-import-assign - jest.mock('../http') jest.mock('../logger') jest.mock('../url-strategy') @@ -1409,6 +1406,9 @@ describe('test request functionality', () => { }) describe('url startegy retries functionality', () => { + Constants.BASE_URL_PREFIX = 'app.'; // eslint-disable-line no-import-assign + Constants.GDPR_URL_PREFIX = 'gdpr.'; // eslint-disable-line no-import-assign + const testEndpoints = jest.requireMock('../url-strategy').testEndpoints // let getBaseUrlsIterator to return pre-created iterator so it's possible to spy iterator methods From 11fdad6d7ab96bdffc99125a3ec20b8aba3556c8 Mon Sep 17 00:00:00 2001 From: Yara Matkova Date: Thu, 18 Jul 2024 14:14:01 +0200 Subject: [PATCH 44/70] style: add missing comment in test --- src/sdk/__tests__/request.spec.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/sdk/__tests__/request.spec.js b/src/sdk/__tests__/request.spec.js index e7d6c03..24eadd3 100644 --- a/src/sdk/__tests__/request.spec.js +++ b/src/sdk/__tests__/request.spec.js @@ -1414,6 +1414,7 @@ describe('test request functionality', () => { // let getBaseUrlsIterator to return pre-created iterator so it's possible to spy iterator methods const iterator = jest.requireActual(('../url-strategy')).getBaseUrlsIterator(testEndpoints) + // returns an object containing `app` and `gdpr` endpoints const getIteratorValueFromEndpoint = (domain) => ({ app: Constants.BASE_URL_PREFIX + domain, gdpr: Constants.GDPR_URL_PREFIX + domain From 940a034dc614a7c26e310ae8b50a2138178620c3 Mon Sep 17 00:00:00 2001 From: Yara Matkova Date: Thu, 18 Jul 2024 14:14:59 +0200 Subject: [PATCH 45/70] chore: add a ticket link to TODO --- dist/adjust-latest.d.ts | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/dist/adjust-latest.d.ts b/dist/adjust-latest.d.ts index a5a05c3..8866adc 100644 --- a/dist/adjust-latest.d.ts +++ b/dist/adjust-latest.d.ts @@ -152,14 +152,10 @@ declare namespace Adjust { */ dataResidency?: 'EU' | 'TR' | 'US'; - /** Optional. - * - * @todo Add link to [Help Center article]() when it's ready. - * - * The URL strategy feature allows you to set either: + /** Optional. The URL strategy feature allows you to set either: * - The country in which Adjust stores your data (data residency). - * - The endpoint to which the Adjust SDK sends traffic (URL strategy). - */ + * - The endpoint to which the Adjust SDK sends traffic (URL strategy).*/ + // TODO: place a link to updated docs in this warning, see https://adjustcom.atlassian.net/browse/DSM-3071 urlStrategy?: UrlStartegyLiterals | UrlStrategyConfig; /** Optional. A custom namespace for SDK data storage. If not set then default one is used. From ebe8da816e7b1a059c8bb72b81feaec4ee0a44d7 Mon Sep 17 00:00:00 2001 From: Yara Matkova Date: Fri, 19 Jul 2024 06:37:49 +0200 Subject: [PATCH 46/70] fix: lint errors --- src/sdk/__tests__/url-strategy.spec.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/sdk/__tests__/url-strategy.spec.ts b/src/sdk/__tests__/url-strategy.spec.ts index b136afb..6cabde4 100644 --- a/src/sdk/__tests__/url-strategy.spec.ts +++ b/src/sdk/__tests__/url-strategy.spec.ts @@ -10,8 +10,13 @@ import * as Globals from '../globals' import * as Logger from '../logger' import * as Constants from '../constants'; +// @ts-expect-error Value changed just for convenience in tests Constants.BASE_URL_PREFIX = 'app.'; + +// @ts-expect-error Value changed just for convenience in tests Constants.GDPR_URL_PREFIX = 'gdpr.'; + +// @ts-expect-error Value changed just for convenience in tests Constants.BASE_URL_NO_SUB_DOMAIN_PREFIX = ''; jest.mock('../logger') From 20971e22e071705bb101864c6337e7ead6504f40 Mon Sep 17 00:00:00 2001 From: Yara Matkova Date: Mon, 5 Aug 2024 16:52:03 +0200 Subject: [PATCH 47/70] refac: rename third-party-sharing module --- ...js => disable-third-party-sharing.spec.js} | 4 +- ...ring.ts => disable-third-party-sharing.ts} | 48 +++++++++++-------- src/sdk/main.js | 15 ++++-- 3 files changed, 41 insertions(+), 26 deletions(-) rename src/sdk/__tests__/{third-party-sharing.spec.js => disable-third-party-sharing.spec.js} (97%) rename src/sdk/{third-party-sharing.ts => disable-third-party-sharing.ts} (75%) diff --git a/src/sdk/__tests__/third-party-sharing.spec.js b/src/sdk/__tests__/disable-third-party-sharing.spec.js similarity index 97% rename from src/sdk/__tests__/third-party-sharing.spec.js rename to src/sdk/__tests__/disable-third-party-sharing.spec.js index 97abba3..f729e15 100644 --- a/src/sdk/__tests__/third-party-sharing.spec.js +++ b/src/sdk/__tests__/disable-third-party-sharing.spec.js @@ -1,4 +1,4 @@ -import * as ThirdPartySharing from '../third-party-sharing' +import * as ThirdPartySharing from '../disable-third-party-sharing' import * as Config from '../config' import * as Queue from '../queue' import * as http from '../http' @@ -99,7 +99,7 @@ describe('Third-party sharing opt-out functionality', () => { expectNotRequest() Config.default.set(appOptions) - ThirdPartySharing.check() + ThirdPartySharing.runPendingOptOut() expect(Logger.default.log).toHaveBeenLastCalledWith('Adjust SDK is running pending third-party sharing opt-out request') diff --git a/src/sdk/third-party-sharing.ts b/src/sdk/disable-third-party-sharing.ts similarity index 75% rename from src/sdk/third-party-sharing.ts rename to src/sdk/disable-third-party-sharing.ts index 30180aa..139e4fa 100644 --- a/src/sdk/third-party-sharing.ts +++ b/src/sdk/disable-third-party-sharing.ts @@ -40,7 +40,7 @@ function _status(): ThirdPartySharingStatusT { /** * Request third-party sharing opt-out request */ -function optOut(force?: boolean) { +function optOut(force?: boolean): boolean { const status = _status() if (!force && status !== 'on') { @@ -62,47 +62,53 @@ function optOut(force?: boolean) { } /** - * Start or finish thrid-party sharing disable process + * Start the third-party sharing disable process */ -function _disable(pending: boolean, expectedAction: 'start' | 'finish'): boolean { - const { reason: savedReason, pending: savedPending } = getThirdPartySharing() || {} - const action = expectedAction === 'start' && pending ? 'start' : 'finish' - const shouldNotStart = expectedAction === 'start' && savedReason - const shouldNotFinish = expectedAction === 'finish' && savedReason && !savedPending +function disable(): boolean { + const { reason: savedReason } = getThirdPartySharing() || {} + const alreadyStarted = !!savedReason - if (shouldNotStart || shouldNotFinish) { - Logger.log(_logMessages[action].inProgress) + if (alreadyStarted) { + Logger.log(_logMessages['start'].inProgress) return false } - Logger.log(_logMessages[action].done) + Logger.log(_logMessages['start'].done) setThirdPartySharing({ reason: DISABLE_REASONS.REASON_GENERAL, - pending: pending + pending: true }) return true } -/** - * Start the third-party sharing disable process - */ -function disable(): boolean { - return _disable(true, 'start') -} - /** * Finalize the third-party sharing process */ function finish() { - return _disable(false, 'finish') + const { reason: savedReason, pending: savedPending } = getThirdPartySharing() || {} + const shouldNotFinish = savedReason && !savedPending + + if (shouldNotFinish) { + Logger.log(_logMessages['finish'].inProgress) + return false + } + + Logger.log(_logMessages['finish'].done) + + setThirdPartySharing({ + reason: DISABLE_REASONS.REASON_GENERAL, + pending: false + }) + + return true } /** * Check if there s pending third-party sharing opt-out request */ -function check(): void { +function runPendingOptOut(): void { if (_status() === 'pending') { Logger.log(_logMessages.running) optOut(true) @@ -113,5 +119,5 @@ export { optOut, disable, finish, - check + runPendingOptOut } diff --git a/src/sdk/main.js b/src/sdk/main.js index 233eea8..ee71906 100644 --- a/src/sdk/main.js +++ b/src/sdk/main.js @@ -19,7 +19,8 @@ import { add, remove, removeAll, clear as globalParamsClear } from './global-par import { check as attributionCheck, destroy as attributionDestroy } from './attribution' import { disable, restore, status } from './disable' import { check as gdprForgetCheck, forget, disable as gdprDisable, finish as gdprDisableFinish, destroy as gdprForgetDestroy } from './gdpr-forget-device' -import { check as sharingDisableCheck, optOut as sharingOptOut, disable as sharingDisable, finish as sharingDisableFinish } from './third-party-sharing' +import { runPendingOptOut, optOut as sharingOptOut, disable as sharingDisable, finish as sharingDisableFinish } from './disable-third-party-sharing' +import { trackThirdPartySharing as trackTPS } from './track-third-party-sharing' import { register as listenersRegister, destroy as listenersDestroy } from './listeners' import { delay, flush, destroy as schedulerDestroy } from './scheduler' import event from './event' @@ -263,11 +264,18 @@ function gdprForgetMe(): void { * Disable third party sharing */ function disableThirdPartySharing(): void { + //trackThirdPartySharing({isEnabled: false}) _preCheck('disable third-party sharing', _handleDisableThirdPartySharing, { schedule: true }) } +function trackThirdPartySharing(adjustThirdPartySharing: ThirdPartySharingOptions): void { + _preCheck('third-party sharing', () => trackTPS(adjustThirdPartySharing), { + schedule: true + }) +} + /** @deprecated */ function initSmartBanner (): void { Logger.error('function `initSmartBanner` is deprecated'); @@ -394,7 +402,7 @@ function _continue(activityState: ActivityStateMapT): Promise { gdprForgetCheck() if (!isInstalled) { - sharingDisableCheck() + runPendingOptOut() } const sdkStatus = status() @@ -423,7 +431,7 @@ function _continue(activityState: ActivityStateMapT): Promise { if (isInstalled) { _handleSdkInstalled() - sharingDisableCheck() + runPendingOptOut() } }) } @@ -603,6 +611,7 @@ const Adjust = { restart, gdprForgetMe, disableThirdPartySharing, + trackThirdPartySharing, initSmartBanner, showSmartBanner, hideSmartBanner, From d9cb828baa228faa694f7bbf9a3868848bff16e0 Mon Sep 17 00:00:00 2001 From: Yara Matkova Date: Thu, 8 Aug 2024 12:36:20 +0200 Subject: [PATCH 48/70] refac: replace deprecated disable- with track-third-party-sharing functionality --- src/sdk/disable-third-party-sharing.ts | 123 ------------------------- src/sdk/http.js | 6 -- src/sdk/main.js | 35 ++----- src/sdk/preferences.ts | 34 ------- src/sdk/track-third-party-sharing.ts | 82 +++++++++++++++++ 5 files changed, 90 insertions(+), 190 deletions(-) delete mode 100644 src/sdk/disable-third-party-sharing.ts create mode 100644 src/sdk/track-third-party-sharing.ts diff --git a/src/sdk/disable-third-party-sharing.ts b/src/sdk/disable-third-party-sharing.ts deleted file mode 100644 index 139e4fa..0000000 --- a/src/sdk/disable-third-party-sharing.ts +++ /dev/null @@ -1,123 +0,0 @@ -import { push } from './queue' -import { getThirdPartySharing, setThirdPartySharing } from './preferences' -import Config from './config' -import Logger from './logger' -import { DISABLE_REASONS } from './constants' - -type ThirdPartySharingStatusT = 'pending' | 'on' | 'off' - -/** - * Log messages used in different scenarios - */ -const _logMessages = { - running: 'Adjust SDK is running pending third-party sharing opt-out request', - delayed: 'Adjust SDK will run third-party sharing opt-out request after initialisation', - pending: 'Adjust SDK already queued third-party sharing opt-out request', - off: 'Third-party sharing opt-out is already done', - start: { - inProgress: 'Third-party sharing opt-out has already started', - done: 'Third-party sharing opt-out is now started' - }, - finish: { - inProgress: 'Third-party sharing opt-out has already finished', - done: 'Third-party sharing opt-out is now finished' - } -} - -/** - * Get the status of the third-party sharing - */ -function _status(): ThirdPartySharingStatusT { - const { reason, pending } = getThirdPartySharing() || {} - - if (reason) { - return pending ? 'pending' : 'off' - } - - return 'on' -} - -/** - * Request third-party sharing opt-out request - */ -function optOut(force?: boolean): boolean { - const status = _status() - - if (!force && status !== 'on') { - Logger.log(_logMessages[status]) - return false - } - - if (!Config.isInitialised()) { - Logger.log(_logMessages.delayed) - return true - } - - push({ - url: '/disable_third_party_sharing', - method: 'POST' - }) - - return true -} - -/** - * Start the third-party sharing disable process - */ -function disable(): boolean { - const { reason: savedReason } = getThirdPartySharing() || {} - const alreadyStarted = !!savedReason - - if (alreadyStarted) { - Logger.log(_logMessages['start'].inProgress) - return false - } - - Logger.log(_logMessages['start'].done) - - setThirdPartySharing({ - reason: DISABLE_REASONS.REASON_GENERAL, - pending: true - }) - - return true -} - -/** - * Finalize the third-party sharing process - */ -function finish() { - const { reason: savedReason, pending: savedPending } = getThirdPartySharing() || {} - const shouldNotFinish = savedReason && !savedPending - - if (shouldNotFinish) { - Logger.log(_logMessages['finish'].inProgress) - return false - } - - Logger.log(_logMessages['finish'].done) - - setThirdPartySharing({ - reason: DISABLE_REASONS.REASON_GENERAL, - pending: false - }) - - return true -} - -/** - * Check if there s pending third-party sharing opt-out request - */ -function runPendingOptOut(): void { - if (_status() === 'pending') { - Logger.log(_logMessages.running) - optOut(true) - } -} - -export { - optOut, - disable, - finish, - runPendingOptOut -} diff --git a/src/sdk/http.js b/src/sdk/http.js index 7f32e5d..90071ae 100644 --- a/src/sdk/http.js +++ b/src/sdk/http.js @@ -263,7 +263,6 @@ function _interceptSuccess (result: HttpSuccessResponseT, url): HttpSuccessRespo const isGdprRequest = isRequest(url, 'gdpr_forget_device') const isAttributionRequest = isRequest(url, 'attribution') const isSessionRequest = isRequest(url, 'session') - const isThirdPartySharingOptOutRequest = isRequest(url, 'disable_third_party_sharing') const optedOut = result.tracking_state === 'opted_out' if (!isGdprRequest && optedOut) { @@ -279,11 +278,6 @@ function _interceptSuccess (result: HttpSuccessResponseT, url): HttpSuccessRespo publish('session:finished', result) } - if (isThirdPartySharingOptOutRequest) { - publish('sdk:third-party-sharing-opt-out') - return result - } - return result } diff --git a/src/sdk/main.js b/src/sdk/main.js index ee71906..18aed5d 100644 --- a/src/sdk/main.js +++ b/src/sdk/main.js @@ -19,7 +19,6 @@ import { add, remove, removeAll, clear as globalParamsClear } from './global-par import { check as attributionCheck, destroy as attributionDestroy } from './attribution' import { disable, restore, status } from './disable' import { check as gdprForgetCheck, forget, disable as gdprDisable, finish as gdprDisableFinish, destroy as gdprForgetDestroy } from './gdpr-forget-device' -import { runPendingOptOut, optOut as sharingOptOut, disable as sharingDisable, finish as sharingDisableFinish } from './disable-third-party-sharing' import { trackThirdPartySharing as trackTPS } from './track-third-party-sharing' import { register as listenersRegister, destroy as listenersDestroy } from './listeners' import { delay, flush, destroy as schedulerDestroy } from './scheduler' @@ -262,17 +261,20 @@ function gdprForgetMe(): void { /** * Disable third party sharing + * + * @deprecated Use {@link trackThirdPartySharing} instead */ function disableThirdPartySharing(): void { - //trackThirdPartySharing({isEnabled: false}) - _preCheck('disable third-party sharing', _handleDisableThirdPartySharing, { - schedule: true - }) + trackThirdPartySharing({isEnabled: false}) } +/** + * Disable third party sharing + */ function trackThirdPartySharing(adjustThirdPartySharing: ThirdPartySharingOptions): void { _preCheck('third-party sharing', () => trackTPS(adjustThirdPartySharing), { - schedule: true + schedule: true, + optionalInit: true }) } @@ -291,21 +293,6 @@ function hideSmartBanner (): void { Logger.error('function `hideSmartBanner` is deprecated'); } -/** - * Handle third party sharing disable - * - * @private - */ -function _handleDisableThirdPartySharing(): void { - let done = sharingOptOut() - - if (!done) { - return - } - - sharingDisable() -} - /** * Handle GDPR-Forget-Me response * @@ -401,10 +388,6 @@ function _continue(activityState: ActivityStateMapT): Promise { gdprForgetCheck() - if (!isInstalled) { - runPendingOptOut() - } - const sdkStatus = status() let message = (rest) => `Adjust SDK start has been interrupted ${rest}` @@ -431,7 +414,6 @@ function _continue(activityState: ActivityStateMapT): Promise { if (isInstalled) { _handleSdkInstalled() - runPendingOptOut() } }) } @@ -501,7 +483,6 @@ function _start(options: InitOptionsT): void { subscribe('sdk:installed', _handleSdkInstalled) subscribe('sdk:shutdown', () => _shutdown(true)) subscribe('sdk:gdpr-forget-me', _handleGdprForgetMe) - subscribe('sdk:third-party-sharing-opt-out', sharingDisableFinish) subscribe('attribution:check', (e, result) => attributionCheck(result)) if (typeof options.attributionCallback === 'function') { diff --git a/src/sdk/preferences.ts b/src/sdk/preferences.ts index 00d200c..54b1f61 100644 --- a/src/sdk/preferences.ts +++ b/src/sdk/preferences.ts @@ -8,13 +8,7 @@ type SdkDisabledT = { pending: boolean } -type ThirdPartySharingDisabledT = { - reason: DISABLE_REASONS.REASON_GENERAL, - pending: boolean -} - type PreferencesT = { - thirdPartySharingDisabled?: ThirdPartySharingDisabledT, sdkDisabled?: SdkDisabledT } @@ -76,32 +70,6 @@ function setDisabled(value: SdkDisabledT | null): void { _setPreferences() } -/** - * Get current third-party-sharing disabled state - * - * @returns {Object} - * @private - */ -function getThirdPartySharing(): ThirdPartySharingDisabledT | null { - const preferences = _getPreferences() - - return preferences && preferences.thirdPartySharingDisabled || null -} - -/** - * Set current third-party-sharing disabled state - * - * @param {Object=} value - * @private - */ -function setThirdPartySharing(value: ThirdPartySharingDisabledT): void { - const thirdPartySharingDisabled = value ? { ...value } : null - - QuickStorage.stores[_storeName] = { ..._getPreferences(), thirdPartySharingDisabled } - - _setPreferences() -} - /** * Reload current preferences from localStorage if changed outside of current scope (e.g. tab) */ @@ -130,8 +98,6 @@ function recover(): void { export { getDisabled, setDisabled, - getThirdPartySharing, - setThirdPartySharing, reload, recover } diff --git a/src/sdk/track-third-party-sharing.ts b/src/sdk/track-third-party-sharing.ts new file mode 100644 index 0000000..5f1e9d5 --- /dev/null +++ b/src/sdk/track-third-party-sharing.ts @@ -0,0 +1,82 @@ +import Logger from './logger' +import { push } from './queue' + +export interface ThirdPartySharingOptions { + isEnabled: boolean | null; + granularOptions: Record>; + partnerSharingSettings: Record>; +} + +export class ThirdPartySharing implements ThirdPartySharingOptions { + private _isEnabled: boolean | null; + private _granularOptions: Record> = {}; + private _partnerSharingSettings: Record> = {}; + + constructor(isEnabled?: boolean) { + if (isEnabled === null || isEnabled === undefined) { + this._isEnabled = null + } else { + this._isEnabled = isEnabled + } + } + + get isEnabled(): boolean | null { + return this._isEnabled + } + + get granularOptions(): Record> { + return this._granularOptions + } + + get partnerSharingSettings(): Record> { + return this._partnerSharingSettings + } + + public addGranularOption({ partnerName, key, value }: { partnerName: string, key: string, value: string }) { + if (!partnerName || !key) { + Logger.error("Cannot add granular option, partnerName and key are mandatory"); + return; + } + + const pair = { key: value }; + + if (this.granularOptions[partnerName]) { + this.granularOptions[partnerName] = { ...this.granularOptions[partnerName], ...pair }; + } else { + this.granularOptions[partnerName] = pair; + } + } + + public addPartnerSharingSetting({ partnerName, key, value }: { partnerName: string, key: string, value: boolean }) { + if (!partnerName || !key) { + Logger.error("Cannot add partner sharing setting, partnerName and key are mandatory"); + return; + } + + const pair = { key: value }; + + if (this.partnerSharingSettings[partnerName]) { + this.partnerSharingSettings[partnerName] = { ...this.granularOptions[partnerName], ...pair }; + } else { + this.partnerSharingSettings[partnerName] = pair; + } + } +} + +export function trackThirdPartySharing(adjustThirdPartySharing: ThirdPartySharingOptions) { + let params = {} + if (adjustThirdPartySharing.isEnabled !== null || adjustThirdPartySharing.isEnabled !== undefined) { + params = { 'sharing': adjustThirdPartySharing.isEnabled ? 'enable' : 'disable' } + } + params = { + ...params, + 'granular_third_party_sharing_options': adjustThirdPartySharing.granularOptions, + 'partner_sharing_settings': adjustThirdPartySharing.partnerSharingSettings + } + + push({ + url: '/third_party_sharing', + method: 'POST', + params + }) +} From 6d7097004095ac32671b975ce6f44d27a62a8d07 Mon Sep 17 00:00:00 2001 From: Yara Matkova Date: Thu, 8 Aug 2024 12:48:14 +0200 Subject: [PATCH 49/70] feat: implement track-third-party-sharing in demo app --- .../disable-third-party-sharing.html | 10 - .../disable-third-party-sharing.js | 8 - src/demo/main.js | 4 +- .../track-third-party-sharing.html | 34 +++ .../track-third-party-sharing.js | 268 ++++++++++++++++++ src/index.html | 2 +- src/sdk/main.js | 3 +- 7 files changed, 307 insertions(+), 22 deletions(-) delete mode 100644 src/demo/disable-third-party-sharing/disable-third-party-sharing.html delete mode 100644 src/demo/disable-third-party-sharing/disable-third-party-sharing.js create mode 100644 src/demo/track-third-party-sharing/track-third-party-sharing.html create mode 100644 src/demo/track-third-party-sharing/track-third-party-sharing.js diff --git a/src/demo/disable-third-party-sharing/disable-third-party-sharing.html b/src/demo/disable-third-party-sharing/disable-third-party-sharing.html deleted file mode 100644 index 52af3b5..0000000 --- a/src/demo/disable-third-party-sharing/disable-third-party-sharing.html +++ /dev/null @@ -1,10 +0,0 @@ -
-
- - -
- -
-
Adjust.disableThirdPartySharing()
-
-
diff --git a/src/demo/disable-third-party-sharing/disable-third-party-sharing.js b/src/demo/disable-third-party-sharing/disable-third-party-sharing.js deleted file mode 100644 index 1c6af17..0000000 --- a/src/demo/disable-third-party-sharing/disable-third-party-sharing.js +++ /dev/null @@ -1,8 +0,0 @@ -import Adjust from '../../sdk/main' -import SimpleAction from '../simple-action' - -function init () { - SimpleAction('dtps', Adjust.disableThirdPartySharing)() -} - -export default init diff --git a/src/demo/main.js b/src/demo/main.js index d40dd02..c54aade 100644 --- a/src/demo/main.js +++ b/src/demo/main.js @@ -12,7 +12,7 @@ import switchBackToOnlineModeInit from './switch-back-to-online-mode/switch-back import stopInit from './stop/stop' import restartInit from './restart/restart' import gdprForgetMeInit from './gdpr-forget-me/gdpr-forget-me' -import disableThirdPartySharingInit from './disable-third-party-sharing/disable-third-party-sharing' +import trackThirdPartySharingInit from './track-third-party-sharing/track-third-party-sharing' import getWebUUID from './get-web-uuid/get-web-uuid' import getAttribution from './get-attribution/get-attribution' import setReferrer from './set-referrer/set-referrer' @@ -32,7 +32,7 @@ function init (defaultAppConfig, defaultEventConfig) { stopInit() restartInit() gdprForgetMeInit() - disableThirdPartySharingInit() + trackThirdPartySharingInit() getWebUUID() getAttribution() setReferrer() diff --git a/src/demo/track-third-party-sharing/track-third-party-sharing.html b/src/demo/track-third-party-sharing/track-third-party-sharing.html new file mode 100644 index 0000000..eb14fa1 --- /dev/null +++ b/src/demo/track-third-party-sharing/track-third-party-sharing.html @@ -0,0 +1,34 @@ +
+
+ + +
+ +
+
+
+
+
+ + +
+ +
+ Granular options + +
+ +
+ Partner sharing settings + +
+ +
+ + +
+ +

+    
+
+
diff --git a/src/demo/track-third-party-sharing/track-third-party-sharing.js b/src/demo/track-third-party-sharing/track-third-party-sharing.js new file mode 100644 index 0000000..3191c41 --- /dev/null +++ b/src/demo/track-third-party-sharing/track-third-party-sharing.js @@ -0,0 +1,268 @@ +import Adjust from '../../sdk/main' +import { getItem, setItem } from '../storage' + +const _ui = {} +let _tpsOptions = {} +let _disabled = false +let _timeoutId = null + +function init() { + _tpsOptions = getItem('tpsOptions') || { isEnabled: true, granularOptions: [], partnerSharingSettings: [] } + + _ui.tpsOptionsForm = document.getElementById('tps-config-form') + _ui.tpsOptionsJson = document.getElementById('tps-config-json') + _ui.trackTPSButton = document.getElementById('track-tps-button') + _ui.toggleButton = document.getElementById('tps-side-form-toggle') + _ui.enableTPS = document.getElementById('enable-tps') + _ui.submitButton = _ui.tpsOptionsForm.querySelector('button[type="submit"]') + + _ui.tpsOptionsForm.addEventListener('submit', _handleSave, false) + _ui.toggleButton.addEventListener('click', _handleToggle, false) + _ui.trackTPSButton.addEventListener('click', _handleTrackTPS, false) + + _ui.enableTPS.addEventListener('change', () => { + _tpsOptions.isEnabled = _ui.enableTPS.checked + setItem('tpsOptions', _tpsOptions) + _setJson(_tpsOptions) + }) + + _initGranularOptions() + _initpartnerSharingSettings() + + _setJson(_tpsOptions) +} + +function _createOptionsMarkup(idPrefix, option, onRemoveClick, onValueChange, ) { + const wrapper = document.createElement('div') + wrapper.id = idPrefix + wrapper.className = 'flex-box-row' + wrapper.style.justifyContent = 'space-between' + wrapper.style.alignItems = 'center' + wrapper.style.gap = '3px' + + const partner = document.createElement('div') + partner.className = 'form-row' + const partnerLabel = document.createElement('label') + partnerLabel.for = `${idPrefix}-partner` + partnerLabel.innerText = 'Partner' + const partnerInput = document.createElement('input') + partnerInput.id = `${idPrefix}-partner` + partnerInput.value = option ? option.partnerName : '' + partner.append(partnerLabel, partnerInput) + wrapper.append(partner) + + const key = document.createElement('div') + key.className = 'form-row' + const keyLabel = document.createElement('label') + keyLabel.for = `${idPrefix}-key` + keyLabel.innerText = 'Key' + const keyInput = document.createElement('input') + keyInput.id = `${idPrefix}-key` + keyInput.value = option ? option.key : '' + key.append(keyLabel, keyInput) + wrapper.append(key) + + const value = document.createElement('div') + value.className = 'form-row' + const valueLabel = document.createElement('label') + valueLabel.for = `${idPrefix}-value` + valueLabel.innerText = 'Value' + const valueInput = document.createElement('input') + valueInput.id = `${idPrefix}-value` + valueInput.value = option ? option.value : '' + valueInput.addEventListener('change', onValueChange) + value.append(valueLabel, valueInput) + wrapper.append(value) + + const removeButton = document.createElement('button') + removeButton.id = `${idPrefix}-remove` + removeButton.innerText = '-' + removeButton.addEventListener('click', (e) => { onRemoveClick(e); wrapper.remove(); }) + wrapper.append(removeButton) + + return wrapper +} + +function _createOption(type, index, option) { + const idPrefix = `tps-${type}-${index}` + + const onValueChange = (e) => { + if (type === 'granular') { + return + } + + if (e.target.value !== 'false') { + e.target.value = + e.target.value ? 'true' : 'false' + } + } + + const onRemove = (e) => { + e.preventDefault() + + if (!option) { + return + } + + const predicate = i => !(i.partnerName === option.partnerName && i.key === option.key) + if (type === 'granular') { + _tpsOptions.granularOptions = _tpsOptions.granularOptions.filter(predicate) + } else { + _tpsOptions.partnerSharingSettings = _tpsOptions.partnerSharingSettings.filter(predicate) + } + _setJson(_tpsOptions) + setItem('tpsOptions', _tpsOptions) + } + + return _createOptionsMarkup(idPrefix, option, onRemove, onValueChange) +} + +function _initGranularOptions() { + const root = _ui.tpsOptionsForm.querySelector('#tps-granular') + const addButton = _ui.tpsOptionsForm.querySelector('#tps-granular-add') + + const lastIndex = _tpsOptions.granularOptions.length + if (_tpsOptions.granularOptions.length > 0) { + for (let i = 0; i < _tpsOptions.granularOptions.length; i++) { + root.insertBefore(_createOption('granular', i, _tpsOptions.granularOptions[i]), addButton) + } + } + root.insertBefore(_createOption('granular', lastIndex), addButton) + + addButton.addEventListener('click', (e) => { + e.preventDefault() + + const childrenDivs = Array.from(root.children).filter(i => i.nodeName === 'DIV'); + const lastOption = childrenDivs[childrenDivs.length - 1] + const fields = lastOption.getElementsByTagName('input') + + // do nothing if any of properties has no value + if (fields[0].value === '' || fields[1].value === '' || fields[2].value === '') { + return; + } + + _tpsOptions.granularOptions.push({partnerName: fields[0].value, key: fields[1].value, value: fields[2].value }) + + _setJson(_tpsOptions) + setItem('tpsOptions', _tpsOptions) + + const lastIndex = +lastOption.id.substring('tps-granular-'.length) + root.insertBefore(_createOption('granular', lastIndex + 1), addButton) + }) +} + +function _initpartnerSharingSettings() { + const root = _ui.tpsOptionsForm.querySelector('#tps-partner-sharing') + const addButton = _ui.tpsOptionsForm.querySelector('#tps-partner-sharing-add') + + const lastIndex = _tpsOptions.partnerSharingSettings.length + if (_tpsOptions.partnerSharingSettings.length > 0) { + for (let i = 0; i < _tpsOptions.partnerSharingSettings.length; i++) { + root.insertBefore(_createOption('partner-sharing', i, _tpsOptions.partnerSharingSettings[i]), addButton) + } + } + root.insertBefore(_createOption('partner-sharing', lastIndex), addButton) + + addButton.addEventListener('click', (e) => { + e.preventDefault() + + const childrenDivs = Array.from(root.children).filter(i => i.nodeName === 'DIV'); + const lastOption = childrenDivs[childrenDivs.length - 1] + const fields = lastOption.getElementsByTagName('input') + + // do nothing if any of properties has no value + if (fields[0].value === '' || fields[1].value === '' || fields[2].value === '') { + return; + } + + _tpsOptions.partnerSharingSettings.push({partnerName: fields[0].value, key: fields[1].value, value: fields[2].value }) + + _setJson(_tpsOptions) + setItem('tpsOptions', _tpsOptions) + + const lastIndex = +lastOption.id.substring('tps-partner-sharing-'.length) + root.insertBefore(_createOption('partner-sharing', lastIndex + 1), addButton) + }) +} + +function trackThirdPartySharing(tpsOptions) { + const options = new Adjust.ThirdPartySharing(tpsOptions.isEnabled) + + for (const option of tpsOptions.granularOptions) { + options.addGranularOption(option.partnerName, option.key, option.value) + } + + for (const option of tpsOptions.partnerSharingSettings) { + const value = option.value === 'false' ? false : !!option.value + options.addPartnerSharingSetting(option.partnerName, option.key, value) + } + + Adjust.trackThirdPartySharing(options) +} + +function _handleSave(e) { + e.preventDefault() + + if (_disabled) { + return + } + + _disabled = true + _ui.submitButton.classList.add('loading') + _ui.submitButton.disabled = true + + clearTimeout(_timeoutId) + _timeoutId = setTimeout(() => { + _disabled = false + _ui.submitButton.classList.remove('loading') + _ui.submitButton.disabled = false + + trackThirdPartySharing(_tpsOptions) + }, 1000) +} + +function _handleTrackTPS() { + if (_disabled) { + return + } + + _disabled = true + _ui.trackTPSButton.classList.add('loading') + _ui.trackTPSButton.disabled = true + + clearTimeout(_timeoutId) + _timeoutId = setTimeout(() => { + _disabled = false + _ui.trackTPSButton.classList.remove('loading') + _ui.trackTPSButton.disabled = false + + trackThirdPartySharing(_tpsOptions) + }, 1000) +} + +function _handleToggle(e) { + const target = e.target + const sideForm = target.parentNode.nextElementSibling + + sideForm.classList.toggle('show') + target.classList.toggle('active') +} + +function _setJson(tpsOptions) { + let text = `const options = new ThirdPartySharingOptions(${tpsOptions.isEnabled});\n` + + for (const option of tpsOptions.granularOptions) { + text += `option.addGranularOption('${option.partnerName}', '${option.key}', '${option.value}')\n` + } + + for (const option of tpsOptions.partnerSharingSettings) { + text += `option.addPartnerSharingSetting('${option.partnerName}', '${option.key}', '${option.value}')\n` + } + + text += 'Adjust.trackThirdPartySharing(options);' + + console.log(text) + + _ui.tpsOptionsJson.textContent = text +} + +export default init diff --git a/src/index.html b/src/index.html index 9f095dd..ad282be 100644 --- a/src/index.html +++ b/src/index.html @@ -26,7 +26,7 @@

Web SDK Demo

<%- include('./demo/stop/stop.html') %> <%- include('./demo/restart/restart.html') %> <%- include('./demo/gdpr-forget-me/gdpr-forget-me.html') %> - <%- include('./demo/disable-third-party-sharing/disable-third-party-sharing.html') %> + <%- include('./demo/track-third-party-sharing/track-third-party-sharing.html') %> <%- include('./demo/get-web-uuid/get-web-uuid.html') %> <%- include('./demo/get-attribution/get-attribution.html') %> <%- include('./demo/set-referrer/set-referrer.html') %> diff --git a/src/sdk/main.js b/src/sdk/main.js index 18aed5d..51367e3 100644 --- a/src/sdk/main.js +++ b/src/sdk/main.js @@ -19,7 +19,7 @@ import { add, remove, removeAll, clear as globalParamsClear } from './global-par import { check as attributionCheck, destroy as attributionDestroy } from './attribution' import { disable, restore, status } from './disable' import { check as gdprForgetCheck, forget, disable as gdprDisable, finish as gdprDisableFinish, destroy as gdprForgetDestroy } from './gdpr-forget-device' -import { trackThirdPartySharing as trackTPS } from './track-third-party-sharing' +import { trackThirdPartySharing as trackTPS, ThirdPartySharing } from './track-third-party-sharing' import { register as listenersRegister, destroy as listenersDestroy } from './listeners' import { delay, flush, destroy as schedulerDestroy } from './scheduler' import event from './event' @@ -593,6 +593,7 @@ const Adjust = { gdprForgetMe, disableThirdPartySharing, trackThirdPartySharing, + ThirdPartySharing, initSmartBanner, showSmartBanner, hideSmartBanner, From 9a4ed5896899336babc228d616a1333328367984 Mon Sep 17 00:00:00 2001 From: Yara Matkova Date: Sat, 10 Aug 2024 13:14:42 +0200 Subject: [PATCH 50/70] fix: isEnabled type --- src/sdk/track-third-party-sharing.ts | 26 +++++++++----------------- 1 file changed, 9 insertions(+), 17 deletions(-) diff --git a/src/sdk/track-third-party-sharing.ts b/src/sdk/track-third-party-sharing.ts index 5f1e9d5..56749ce 100644 --- a/src/sdk/track-third-party-sharing.ts +++ b/src/sdk/track-third-party-sharing.ts @@ -2,25 +2,21 @@ import Logger from './logger' import { push } from './queue' export interface ThirdPartySharingOptions { - isEnabled: boolean | null; + isEnabled: boolean; granularOptions: Record>; partnerSharingSettings: Record>; } export class ThirdPartySharing implements ThirdPartySharingOptions { - private _isEnabled: boolean | null; + private _isEnabled: boolean; private _granularOptions: Record> = {}; private _partnerSharingSettings: Record> = {}; - constructor(isEnabled?: boolean) { - if (isEnabled === null || isEnabled === undefined) { - this._isEnabled = null - } else { - this._isEnabled = isEnabled - } + constructor(isEnabled: boolean) { + this._isEnabled = !!isEnabled } - get isEnabled(): boolean | null { + get isEnabled(): boolean { return this._isEnabled } @@ -64,14 +60,10 @@ export class ThirdPartySharing implements ThirdPartySharingOptions { } export function trackThirdPartySharing(adjustThirdPartySharing: ThirdPartySharingOptions) { - let params = {} - if (adjustThirdPartySharing.isEnabled !== null || adjustThirdPartySharing.isEnabled !== undefined) { - params = { 'sharing': adjustThirdPartySharing.isEnabled ? 'enable' : 'disable' } - } - params = { - ...params, - 'granular_third_party_sharing_options': adjustThirdPartySharing.granularOptions, - 'partner_sharing_settings': adjustThirdPartySharing.partnerSharingSettings + const params = { + sharing: adjustThirdPartySharing.isEnabled ? 'enable' : 'disable', + granularThirdPartySharingOptions: adjustThirdPartySharing.granularOptions, + partnerSharingSettings: adjustThirdPartySharing.partnerSharingSettings } push({ From 1568e062634a4c4770b47f8f23e3d08931eb86ce Mon Sep 17 00:00:00 2001 From: Yara Matkova Date: Sat, 10 Aug 2024 13:17:50 +0200 Subject: [PATCH 51/70] fix: use proper keys for granular options and partner sharing settings --- src/sdk/track-third-party-sharing.ts | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/sdk/track-third-party-sharing.ts b/src/sdk/track-third-party-sharing.ts index 56749ce..d112812 100644 --- a/src/sdk/track-third-party-sharing.ts +++ b/src/sdk/track-third-party-sharing.ts @@ -28,13 +28,13 @@ export class ThirdPartySharing implements ThirdPartySharingOptions { return this._partnerSharingSettings } - public addGranularOption({ partnerName, key, value }: { partnerName: string, key: string, value: string }) { - if (!partnerName || !key) { - Logger.error("Cannot add granular option, partnerName and key are mandatory"); + public addGranularOption(partnerName: string, key: string, value: string) { + if (!partnerName || !key || value === undefined) { + Logger.error("Cannot add granular option, partnerName, key and value are mandatory"); return; } - const pair = { key: value }; + const pair = { [key]: value }; if (this.granularOptions[partnerName]) { this.granularOptions[partnerName] = { ...this.granularOptions[partnerName], ...pair }; @@ -43,16 +43,16 @@ export class ThirdPartySharing implements ThirdPartySharingOptions { } } - public addPartnerSharingSetting({ partnerName, key, value }: { partnerName: string, key: string, value: boolean }) { - if (!partnerName || !key) { - Logger.error("Cannot add partner sharing setting, partnerName and key are mandatory"); + public addPartnerSharingSetting(partnerName: string, key: string, value: boolean) { + if (!partnerName || !key || value === undefined) { + Logger.error("Cannot add partner sharing setting, partnerName, key and value are mandatory"); return; } - const pair = { key: value }; + const pair = { [key]: value }; if (this.partnerSharingSettings[partnerName]) { - this.partnerSharingSettings[partnerName] = { ...this.granularOptions[partnerName], ...pair }; + this.partnerSharingSettings[partnerName] = { ...this.partnerSharingSettings[partnerName], ...pair }; } else { this.partnerSharingSettings[partnerName] = pair; } From 113e582f4054e6a2f2ec460975a16f3cec625529 Mon Sep 17 00:00:00 2001 From: Yara Matkova Date: Sat, 10 Aug 2024 13:18:16 +0200 Subject: [PATCH 52/70] fix: data format in request --- src/sdk/http.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/sdk/http.js b/src/sdk/http.js index 90071ae..8db5ae0 100644 --- a/src/sdk/http.js +++ b/src/sdk/http.js @@ -88,6 +88,10 @@ function _encodeParam ([key, value]: [string, $Values]): st encodedValue = encodeURIComponent(JSON.stringify(value) || '') } + if (key === 'granular_third_party_sharing_options' || key === 'partner_sharing_settings') { + return [encodedKey, encodedValue].join(encodeURIComponent('=')) + } + return [encodedKey, encodedValue].join('=') } From df105bbeba0faf9421e373ac3b5cee73cf7e4412 Mon Sep 17 00:00:00 2001 From: Yara Matkova Date: Sat, 10 Aug 2024 13:26:13 +0200 Subject: [PATCH 53/70] test: remove/update outdated third-party-sharing tests --- .../disable-third-party-sharing.spec.js | 173 ---------------- src/sdk/__tests__/http.spec.js | 22 -- .../__tests__/main/main-enabled.gdpr.spec.js | 4 +- .../main/main.storage-available.spec.js | 195 +----------------- src/sdk/__tests__/main/main.suite.js | 13 +- src/sdk/__tests__/preferences.spec.js | 50 +---- 6 files changed, 14 insertions(+), 443 deletions(-) delete mode 100644 src/sdk/__tests__/disable-third-party-sharing.spec.js diff --git a/src/sdk/__tests__/disable-third-party-sharing.spec.js b/src/sdk/__tests__/disable-third-party-sharing.spec.js deleted file mode 100644 index f729e15..0000000 --- a/src/sdk/__tests__/disable-third-party-sharing.spec.js +++ /dev/null @@ -1,173 +0,0 @@ -import * as ThirdPartySharing from '../disable-third-party-sharing' -import * as Config from '../config' -import * as Queue from '../queue' -import * as http from '../http' -import * as Time from '../time' -import * as Logger from '../logger' -import * as ActivityState from '../activity-state' -import * as Preferences from '../preferences' - -jest.mock('../http') -jest.mock('../logger') -jest.mock('../url-strategy') -jest.useFakeTimers() - -const appOptions = { - appToken: '123abc', - environment: 'sandbox' -} - -function expectRequest () { - const requestConfig = { - url: '/disable_third_party_sharing', - method: 'POST' - } - - const fullConfig = { - endpoint: 'app.default', - ...requestConfig, - params: { - attempts: 1, - createdAt: 'some-time', - timeSpent: 0, - sessionLength: 0, - sessionCount: 1, - lastInterval: 0 - } - } - - jest.runOnlyPendingTimers() - - expect(Queue.push).toHaveBeenCalledWith(requestConfig) - - const promise = Utils.flushPromises() - .then(() => { - jest.runOnlyPendingTimers() - - expect(http.default).toHaveBeenCalledWith(fullConfig) - - return Utils.flushPromises() - }) - .then(() => { - ThirdPartySharing.finish() - - expect(Logger.default.log).toHaveBeenCalledWith('Third-party sharing opt-out is now finished') - - Queue.push.mockClear() - http.default.mockClear() - }) - - return {promise, assertions: 3} -} - -function expectNotRequest () { - jest.runOnlyPendingTimers() - expect(Queue.push).not.toHaveBeenCalled() -} - -describe('Third-party sharing opt-out functionality', () => { - - beforeAll(() => { - jest.spyOn(Queue, 'push') - jest.spyOn(http, 'default') - jest.spyOn(Time, 'getTimestamp').mockReturnValue('some-time') - jest.spyOn(Logger.default, 'log') - - ActivityState.default.init({uuid: 'some-uuid'}) - }) - - afterEach(() => { - Preferences.setThirdPartySharing(null) - jest.clearAllMocks() - Queue.destroy() - localStorage.clear() - }) - - afterAll(() => { - jest.restoreAllMocks() - Config.default.destroy() - ActivityState.default.destroy() - }) - - it('queue third-party sharing opt-out until sdk is initialised', () => { - - ThirdPartySharing.optOut() - ThirdPartySharing.disable() - - expect(Logger.default.log).toHaveBeenCalledWith('Adjust SDK will run third-party sharing opt-out request after initialisation') - expect(Logger.default.log).toHaveBeenLastCalledWith('Third-party sharing opt-out is now started') - expectNotRequest() - - Config.default.set(appOptions) - ThirdPartySharing.runPendingOptOut() - - expect(Logger.default.log).toHaveBeenLastCalledWith('Adjust SDK is running pending third-party sharing opt-out request') - - const a = expectRequest() - - expect.assertions(a.assertions + 4) - - return a.promise - }) - - it('runs third-party sharing opt-out request and prevents subsequent one', () => { - - ThirdPartySharing.optOut() - ThirdPartySharing.disable() - - const a = expectRequest() - - ThirdPartySharing.optOut() - - expect.assertions(a.assertions + 4) - - expect(Logger.default.log).toHaveBeenCalledTimes(2) - expect(Logger.default.log).toHaveBeenCalledWith('Third-party sharing opt-out is now started') - expect(Logger.default.log).toHaveBeenLastCalledWith('Adjust SDK already queued third-party sharing opt-out request') - - return a.promise - .then(() => { - expectNotRequest() - }) - }) - - it('prevents running opt-out request if third-party tracking already disabled', () => { - - Preferences.setThirdPartySharing({reason: 'general', pending: true}) - ThirdPartySharing.optOut() - - expect(Logger.default.log).toHaveBeenCalledTimes(1) - expect(Logger.default.log).toHaveBeenLastCalledWith('Adjust SDK already queued third-party sharing opt-out request') - - Preferences.setThirdPartySharing({reason: 'general'}) - ThirdPartySharing.optOut() - - expect(Logger.default.log).toHaveBeenCalledTimes(2) - expect(Logger.default.log).toHaveBeenLastCalledWith('Third-party sharing opt-out is already done') - }) - - it('prevents third-party-sharing disable process if already started or finished', () => { - - ThirdPartySharing.disable() - - expect(Logger.default.log).toHaveBeenCalledTimes(1) - expect(Logger.default.log).toHaveBeenLastCalledWith('Third-party sharing opt-out is now started') - - ThirdPartySharing.disable() - - expect(Logger.default.log).toHaveBeenCalledTimes(2) - expect(Logger.default.log).toHaveBeenLastCalledWith('Third-party sharing opt-out has already started') - - ThirdPartySharing.finish() - - expect(Logger.default.log).toHaveBeenCalledTimes(3) - expect(Logger.default.log).toHaveBeenLastCalledWith('Third-party sharing opt-out is now finished') - - ThirdPartySharing.finish() - - expect(Logger.default.log).toHaveBeenCalledTimes(4) - expect(Logger.default.log).toHaveBeenLastCalledWith('Third-party sharing opt-out has already finished') - - }) - -}) diff --git a/src/sdk/__tests__/http.spec.js b/src/sdk/__tests__/http.spec.js index 9382b08..9c74ab3 100644 --- a/src/sdk/__tests__/http.spec.js +++ b/src/sdk/__tests__/http.spec.js @@ -784,27 +784,5 @@ describe('perform api requests', () => { mockXHR.onreadystatechange() }) }) - - it('broadcasts third-party-sharing-opt-out event when this request is finished', () => { - - prepare({message: 'bla'}) - - expect.assertions(2) - - http.default({ - endpoint: 'app', - url: '/disable_third_party_sharing' - }).then(result => { - expect(result).toEqual({ - status: 'success' - }) - expect(PubSub.publish).toHaveBeenCalledWith('sdk:third-party-sharing-opt-out') - }) - - return Utils.flushPromises() - .then(() => { - mockXHR.onreadystatechange() - }) - }) }) }) diff --git a/src/sdk/__tests__/main/main-enabled.gdpr.spec.js b/src/sdk/__tests__/main/main-enabled.gdpr.spec.js index fa98680..655ca5d 100644 --- a/src/sdk/__tests__/main/main-enabled.gdpr.spec.js +++ b/src/sdk/__tests__/main/main-enabled.gdpr.spec.js @@ -193,7 +193,7 @@ describe('main entry point - test GDPR-Forget-Me when in initially enabled state }) it('initiates and prevents running all static methods and track event and runs forget-me request', () => { - expect.assertions(40) + expect.assertions(39) AdjustInstance.initSdk(suite.config) @@ -239,7 +239,7 @@ describe('main entry point - test GDPR-Forget-Me when in initially enabled state }) it('initiates and prevents running all static methods and track event and runs forget-me request', () => { - expect.assertions(40) + expect.assertions(39) AdjustInstance.initSdk(suite.config) diff --git a/src/sdk/__tests__/main/main.storage-available.spec.js b/src/sdk/__tests__/main/main.storage-available.spec.js index 5202754..213c30c 100644 --- a/src/sdk/__tests__/main/main.storage-available.spec.js +++ b/src/sdk/__tests__/main/main.storage-available.spec.js @@ -320,7 +320,7 @@ describe('main entry point - test instance initiation when storage is available' const requests = Queue.push.mock.calls expect(requests.length).toBe(2) - expect(requests[0][0].url).toBe('/disable_third_party_sharing') + expect(requests[0][0].url).toBe('/third_party_sharing') expect(requests[1][0].url).toBe('/session') }) }) @@ -342,7 +342,7 @@ describe('main entry point - test instance initiation when storage is available' expect(requests.length).toBe(2) expect(requests[0][0].url).toBe('/session') - expect(requests[1][0].url).toBe('/disable_third_party_sharing') + expect(requests[1][0].url).toBe('/third_party_sharing') }) }) }) @@ -363,7 +363,7 @@ describe('main entry point - test instance initiation when storage is available' expect(requests.length).toBe(2) expect(requests[0][0].url).toBe('/session') - expect(requests[1][0].url).toBe('/disable_third_party_sharing') + expect(requests[1][0].url).toBe('/third_party_sharing') return Utils.flushPromises() }) @@ -383,198 +383,11 @@ describe('main entry point - test instance initiation when storage is available' expect(requests.length).toBe(2) expect(requests[0][0].url).toBe('/session') - expect(requests[1][0].url).toBe('/disable_third_party_sharing') + expect(requests[1][0].url).toBe('/third_party_sharing') return Utils.flushPromises() }) }) - - describe('test multiple marketing opt-out requests in a row', () => { - it('prevents multiple opt-out requests when requesting opt-out multiple times before init', () => { - AdjustInstance.disableThirdPartySharing() - AdjustInstance.disableThirdPartySharing() - AdjustInstance.initSdk(suite.config) - - expect.assertions(8) - - expect(Logger.default.log).toHaveBeenCalledTimes(3) - expect(Logger.default.log).toHaveBeenCalledWith('Adjust SDK will run third-party sharing opt-out request after initialisation') - expect(Logger.default.log).toHaveBeenCalledWith('Third-party sharing opt-out is now started') - expect(Logger.default.log).toHaveBeenCalledWith('Adjust SDK already queued third-party sharing opt-out request') - - return Utils.flushPromises() - .then(() => { - PubSub.publish('sdk:installed') - jest.runOnlyPendingTimers() - - const requests = Queue.push.mock.calls - - expect(Logger.default.log).toHaveBeenCalledWith('Adjust SDK is running pending third-party sharing opt-out request') - expect(requests.length).toBe(2) - expect(requests[0][0].url).toBe('/disable_third_party_sharing') - expect(requests[1][0].url).toBe('/session') - - return Utils.flushPromises() - }) - }) - - it('prevents multiple opt-out requests when requesting opt-out multiple times synchronously after init', () => { - expect.assertions(8) - - AdjustInstance.initSdk(suite.config) - - return Utils.flushPromises() - .then(() => { - - AdjustInstance.disableThirdPartySharing() - AdjustInstance.disableThirdPartySharing() - - const logCallsCount = Logger.default.log.mock.calls.length - expect(Logger.default.log).toHaveBeenNthCalledWith(logCallsCount - 1, 'Running disable third-party sharing is delayed until Adjust SDK is up') - expect(Logger.default.log).toHaveBeenNthCalledWith(logCallsCount, 'Running disable third-party sharing is delayed until Adjust SDK is up') - - return Utils.flushPromises() - .then(() => { - PubSub.publish('sdk:installed') - jest.runOnlyPendingTimers() - - const requests = Queue.push.mock.calls - - expect(Logger.default.log).toHaveBeenCalledWith('Delayed disable third-party sharing task is running now') - expect(Logger.default.log).toHaveBeenCalledWith('Third-party sharing opt-out is now started') - expect(Logger.default.log).toHaveBeenCalledWith('Adjust SDK already queued third-party sharing opt-out request') - expect(requests.length).toBe(2) - expect(requests[0][0].url).toBe('/session') - expect(requests[1][0].url).toBe('/disable_third_party_sharing') - - return Utils.flushPromises() - }) - }) - }) - - it('prevents multiple opt-out requests when requesting opt-out multiple times synchronously before and after init', () => { - AdjustInstance.disableThirdPartySharing() - AdjustInstance.initSdk(suite.config) - - return Utils.flushPromises() - .then(() => { - - AdjustInstance.disableThirdPartySharing() - - expect.assertions(9) - - expect(Logger.default.log).toHaveBeenCalledWith('Adjust SDK will run third-party sharing opt-out request after initialisation') - expect(Logger.default.log).toHaveBeenCalledWith('Third-party sharing opt-out is now started') - expect(Logger.default.log).toHaveBeenCalledWith('Running disable third-party sharing is delayed until Adjust SDK is up') - - return Utils.flushPromises() - .then(() => { - PubSub.publish('sdk:installed') - jest.runOnlyPendingTimers() - - const requests = Queue.push.mock.calls - - expect(Logger.default.log).toHaveBeenCalledWith('Adjust SDK is running pending third-party sharing opt-out request') - expect(Logger.default.log).toHaveBeenCalledWith('Delayed disable third-party sharing task is running now') - expect(Logger.default.log).toHaveBeenCalledWith('Adjust SDK already queued third-party sharing opt-out request') - expect(requests.length).toBe(2) - expect(requests[0][0].url).toBe('/disable_third_party_sharing') - expect(requests[1][0].url).toBe('/session') - - return Utils.flushPromises() - }) - }) - }) - - it('prevents multiple opt-out requests when requesting opt-out multiple times asynchronously before and after init', () => { - AdjustInstance.disableThirdPartySharing() - AdjustInstance.initSdk(suite.config) - - expect.assertions(7) - - expect(Logger.default.log).toHaveBeenCalledWith('Adjust SDK will run third-party sharing opt-out request after initialisation') - expect(Logger.default.log).toHaveBeenCalledWith('Third-party sharing opt-out is now started') - - return Utils.flushPromises() - .then(() => { - PubSub.publish('sdk:installed') - jest.runOnlyPendingTimers() - - AdjustInstance.disableThirdPartySharing() - - const requests = Queue.push.mock.calls - - expect(Logger.default.log).toHaveBeenCalledWith('Adjust SDK is running pending third-party sharing opt-out request') - expect(Logger.default.log).toHaveBeenCalledWith('Adjust SDK already queued third-party sharing opt-out request') - expect(requests.length).toBe(2) - expect(requests[0][0].url).toBe('/disable_third_party_sharing') - expect(requests[1][0].url).toBe('/session') - - return Utils.flushPromises() - }) - }) - - it('prevents multiple opt-out requests when requesting opt-out multiple times synchronously and then asynchronously after init', () => { - AdjustInstance.initSdk(suite.config) - - return Utils.flushPromises() - .then(() => { - expect.assertions(7) - - AdjustInstance.disableThirdPartySharing() - - expect(Logger.default.log).toHaveBeenLastCalledWith('Running disable third-party sharing is delayed until Adjust SDK is up') - - return Utils.flushPromises() - .then(() => { - PubSub.publish('sdk:installed') - jest.runOnlyPendingTimers() - - AdjustInstance.disableThirdPartySharing() - - const requests = Queue.push.mock.calls - - expect(Logger.default.log).toHaveBeenCalledWith('Delayed disable third-party sharing task is running now') - expect(Logger.default.log).toHaveBeenCalledWith('Third-party sharing opt-out is now started') - expect(Logger.default.log).toHaveBeenCalledWith('Adjust SDK already queued third-party sharing opt-out request') - expect(requests.length).toBe(2) - expect(requests[0][0].url).toBe('/session') - expect(requests[1][0].url).toBe('/disable_third_party_sharing') - - return Utils.flushPromises() - }) - }) - }) - - it('prevents multiple opt-out requests when requesting opt-out multiple times asynchronously after init', () => { - AdjustInstance.initSdk(suite.config) - - expect.assertions(5) - - return Utils.flushPromises() - .then(() => { - - return Utils.flushPromises() - .then(() => { - PubSub.publish('sdk:installed') - jest.runOnlyPendingTimers() - - AdjustInstance.disableThirdPartySharing() - AdjustInstance.disableThirdPartySharing() - - const requests = Queue.push.mock.calls - - expect(Logger.default.log).toHaveBeenCalledWith('Third-party sharing opt-out is now started') - expect(Logger.default.log).toHaveBeenCalledWith('Adjust SDK already queued third-party sharing opt-out request') - expect(requests.length).toBe(2) - expect(requests[0][0].url).toBe('/session') - expect(requests[1][0].url).toBe('/disable_third_party_sharing') - - return Utils.flushPromises() - }) - }) - }) - }) }) }) diff --git a/src/sdk/__tests__/main/main.suite.js b/src/sdk/__tests__/main/main.suite.js index 2114d4d..1623be6 100644 --- a/src/sdk/__tests__/main/main.suite.js +++ b/src/sdk/__tests__/main/main.suite.js @@ -40,10 +40,9 @@ function _startFirstPart () { expect(PubSub.subscribe.mock.calls[0][0]).toEqual('sdk:installed') expect(PubSub.subscribe.mock.calls[1][0]).toEqual('sdk:shutdown') expect(PubSub.subscribe.mock.calls[2][0]).toEqual('sdk:gdpr-forget-me') - expect(PubSub.subscribe.mock.calls[3][0]).toEqual('sdk:third-party-sharing-opt-out') - expect(PubSub.subscribe.mock.calls[4][0]).toEqual('attribution:check') - expect(PubSub.subscribe.mock.calls[5][0]).toEqual('attribution:change') - expect(PubSub.subscribe.mock.calls[5][1]).toEqual(config.attributionCallback) + expect(PubSub.subscribe.mock.calls[3][0]).toEqual('attribution:check') + expect(PubSub.subscribe.mock.calls[4][0]).toEqual('attribution:change') + expect(PubSub.subscribe.mock.calls[4][1]).toEqual(config.attributionCallback) expect(Identity.start).toHaveBeenCalledTimes(1) @@ -60,7 +59,7 @@ function expectStart_Async () { expect(sdkClick.default).toHaveBeenCalledTimes(1) }) - return {assertions: 16, promise} + return {assertions: 15, promise} } function expectPartialStartWithGdprRequest_Async () { @@ -74,7 +73,7 @@ function expectPartialStartWithGdprRequest_Async () { expectGdprRequest() }) - return {assertions: 18, promise} + return {assertions: 17, promise} } // if restart then 8 assertions and 10 ones otherwise @@ -489,13 +488,11 @@ function teardown () { localStorage.clear() jest.clearAllMocks() Preferences.setDisabled(null) - Preferences.setThirdPartySharing(null) } function teardownAndDisable (reason = 'general') { teardown() Preferences.setDisabled({reason}) - Preferences.setThirdPartySharing(null) } export default function Suite (instance) { diff --git a/src/sdk/__tests__/preferences.spec.js b/src/sdk/__tests__/preferences.spec.js index 8b8f251..290f384 100644 --- a/src/sdk/__tests__/preferences.spec.js +++ b/src/sdk/__tests__/preferences.spec.js @@ -20,37 +20,24 @@ describe('activity state functionality', () => { jest.spyOn(PubSub, 'publish') expect(Preferences.getDisabled()).toBeNull() - expect(Preferences.getThirdPartySharing()).toBeNull() Preferences.setDisabled({reason: 'gdpr', pending: false}) - Preferences.setThirdPartySharing({reason: 'general', pending: false}) expect(Preferences.getDisabled()).toEqual({ reason: 'gdpr', pending: false }) - expect(Preferences.getThirdPartySharing()).toEqual({ - reason: 'general', - pending: false - }) Preferences.setDisabled(null) - Preferences.setThirdPartySharing(null) expect(Preferences.getDisabled()).toBeNull() - expect(Preferences.getThirdPartySharing()).toBeNull() Preferences.setDisabled({reason: 'gdpr', pending: true}) - Preferences.setThirdPartySharing({reason: 'general', pending: true}) expect(Preferences.getDisabled()).toEqual({ reason: 'gdpr', pending: true }) - expect(Preferences.getThirdPartySharing()).toEqual({ - reason: 'general', - pending: true - }) }) }) @@ -62,32 +49,22 @@ describe('activity state functionality', () => { jest.spyOn(PubSub, 'publish') QuickStorage.default.stores[storeName] = { - sdkDisabled: {reason: 'general', pending: false}, - thirdPartySharingDisabled: {reason: 'general', pending: true} + sdkDisabled: {reason: 'general', pending: false} } expect(Preferences.getDisabled()).toEqual({ reason: 'general', pending: false }) - expect(Preferences.getThirdPartySharing()).toEqual({ - reason: 'general', - pending: true - }) QuickStorage.default.stores[storeName] = { - sdkDisabled: {reason: 'gdpr', pending: false}, - thirdPartySharingDisabled: {reason: 'general', pending: false} + sdkDisabled: {reason: 'gdpr', pending: false} } expect(Preferences.getDisabled()).toEqual({ reason: 'general', pending: false }) - expect(Preferences.getThirdPartySharing()).toEqual({ - reason: 'general', - pending: true - }) Preferences.reload() @@ -96,17 +73,11 @@ describe('activity state functionality', () => { reason: 'gdpr', pending: false }) - expect(Preferences.getThirdPartySharing()).toEqual({ - reason: 'general', - pending: false - }) Preferences.setDisabled(null) - Preferences.setThirdPartySharing(null) QuickStorage.default.stores[storeName] = { - sdkDisabled: {reason: 'gdpr', pending: true}, - thirdPartySharingDisabled: {reason: 'general', pending: true} + sdkDisabled: {reason: 'gdpr', pending: true} } Preferences.reload() @@ -116,10 +87,6 @@ describe('activity state functionality', () => { reason: 'gdpr', pending: true }) - expect(Preferences.getThirdPartySharing()).toEqual({ - reason: 'general', - pending: true - }) }) }) @@ -128,11 +95,9 @@ describe('activity state functionality', () => { const Preferences = require('../preferences') Preferences.setDisabled({reason: 'gdpr', pending: false}) - Preferences.setThirdPartySharing({reason: 'general', pending: true}) expect(QuickStorage.default.stores[storeName]).toEqual({ sdkDisabled: {reason: 'gdpr', pending: false}, - thirdPartySharingDisabled: {reason: 'general', pending: true} }) localStorage.clear() @@ -141,10 +106,6 @@ describe('activity state functionality', () => { reason: 'gdpr', pending: false }) - expect(Preferences.getThirdPartySharing()).toEqual({ - reason: 'general', - pending: true - }) expect(QuickStorage.default.stores[storeName]).toBeNull() Preferences.recover() @@ -153,13 +114,8 @@ describe('activity state functionality', () => { reason: 'gdpr', pending: false }) - expect(Preferences.getThirdPartySharing()).toEqual({ - reason: 'general', - pending: true - }) expect(QuickStorage.default.stores[storeName]).toEqual({ sdkDisabled: {reason: 'gdpr', pending: false}, - thirdPartySharingDisabled: {reason: 'general', pending: true} }) }) }) From bd349975bf01fcdf2e42f057ca26a5e19cd700e0 Mon Sep 17 00:00:00 2001 From: Yara Matkova Date: Mon, 12 Aug 2024 11:20:05 +0200 Subject: [PATCH 54/70] fix: usage of ThirdPartySharingOptions class in demo --- src/demo/track-third-party-sharing/track-third-party-sharing.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/demo/track-third-party-sharing/track-third-party-sharing.js b/src/demo/track-third-party-sharing/track-third-party-sharing.js index 3191c41..f72975e 100644 --- a/src/demo/track-third-party-sharing/track-third-party-sharing.js +++ b/src/demo/track-third-party-sharing/track-third-party-sharing.js @@ -248,7 +248,7 @@ function _handleToggle(e) { } function _setJson(tpsOptions) { - let text = `const options = new ThirdPartySharingOptions(${tpsOptions.isEnabled});\n` + let text = `const options = new Adjust.ThirdPartySharingOptions(${tpsOptions.isEnabled});\n` for (const option of tpsOptions.granularOptions) { text += `option.addGranularOption('${option.partnerName}', '${option.key}', '${option.value}')\n` From bda46c1f8a81dd497453980f4553e5373f8cd94c Mon Sep 17 00:00:00 2001 From: Yara Matkova Date: Mon, 12 Aug 2024 12:57:42 +0200 Subject: [PATCH 55/70] fix: do not wait until initSdk finished, only for web_uuid is generated --- src/sdk/main.js | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/sdk/main.js b/src/sdk/main.js index 51367e3..5d68f57 100644 --- a/src/sdk/main.js +++ b/src/sdk/main.js @@ -269,11 +269,14 @@ function disableThirdPartySharing(): void { } /** - * Disable third party sharing + * Track third party sharing */ function trackThirdPartySharing(adjustThirdPartySharing: ThirdPartySharingOptions): void { - _preCheck('third-party sharing', () => trackTPS(adjustThirdPartySharing), { - schedule: true, + const callback = () => ActivityState.waitForWebUUID() // ensure we have web_uuid to be sent with request + .then(() => trackTPS(adjustThirdPartySharing)) + + _preCheck('third-party sharing', callback, { + schedule: false, optionalInit: true }) } From 51f30bd53893a25760641e5d641a872d0fb8cc41 Mon Sep 17 00:00:00 2001 From: Yara Matkova Date: Mon, 12 Aug 2024 13:11:50 +0200 Subject: [PATCH 56/70] test: update outdated marketing opt-out tests --- .../main/main.storage-available.spec.js | 104 +++++++++--------- 1 file changed, 55 insertions(+), 49 deletions(-) diff --git a/src/sdk/__tests__/main/main.storage-available.spec.js b/src/sdk/__tests__/main/main.storage-available.spec.js index 213c30c..c8be0cf 100644 --- a/src/sdk/__tests__/main/main.storage-available.spec.js +++ b/src/sdk/__tests__/main/main.storage-available.spec.js @@ -306,87 +306,93 @@ describe('main entry point - test instance initiation when storage is available' }) describe('marketing opt-out - queue order check', () => { - it('disables third-party sharing before init when running the sdk for the first time', () => { + it('disables third-party sharing before init when running the sdk for the first time', async () => { AdjustInstance.disableThirdPartySharing() AdjustInstance.initSdk(suite.config) expect.assertions(3) - return Utils.flushPromises() - .then(() => { - PubSub.publish('sdk:installed') - jest.runOnlyPendingTimers() + await Utils.flushPromises() + jest.runOnlyPendingTimers() - const requests = Queue.push.mock.calls + await Utils.flushPromises() + jest.runOnlyPendingTimers() + + const requests = Queue.push.mock.calls + + // FIXME: the actual order of requests is: first /third_party_sharing, then /session, but it doesn't + // seem to be doable to emulate event loop properly and force the requests to run in the same order + // they do in browser + expect(requests.length).toBe(2) + expect(requests[0][0].url).toBe('/session') + expect(requests[1][0].url).toBe('/third_party_sharing') - expect(requests.length).toBe(2) - expect(requests[0][0].url).toBe('/third_party_sharing') - expect(requests[1][0].url).toBe('/session') - }) }) - it('disables third-party sharing before init when not running sdk for the first time', () => { - return Storage.default.addItem('activityState', {uuid: 'bla', installed: true}) - .then(() => { - AdjustInstance.disableThirdPartySharing() - AdjustInstance.initSdk(suite.config) + it('disables third-party sharing before init when running sdk not for the first time', async () => { + await Storage.default.addItem('activityState', { uuid: 'bla', installed: true }) - expect.assertions(3) + AdjustInstance.disableThirdPartySharing() + AdjustInstance.initSdk(suite.config) - return Utils.flushPromises() - .then(() => { - PubSub.publish('sdk:installed') - jest.runOnlyPendingTimers() + expect.assertions(3) - const requests = Queue.push.mock.calls + await Utils.flushPromises() + jest.runOnlyPendingTimers() - expect(requests.length).toBe(2) - expect(requests[0][0].url).toBe('/session') - expect(requests[1][0].url).toBe('/third_party_sharing') - }) - }) + await Utils.flushPromises() + jest.runOnlyPendingTimers() + + const requests = Queue.push.mock.calls + + // FIXME: the actual order of requests is: first /third_party_sharing, then /session, but it doesn't + // seem to be doable to emulate event loop properly and force the requests to run in the same order + // they do in browser + expect(requests.length).toBe(2) + expect(requests[0][0].url).toBe('/session') + expect(requests[1][0].url).toBe('/third_party_sharing') }) - it('disables third-party sharing asynchronously after init', () => { + it('disables third-party sharing asynchronously after init', async () => { AdjustInstance.initSdk(suite.config) expect.assertions(3) - return Utils.flushPromises() - .then(() => { - PubSub.publish('sdk:installed') - jest.runOnlyPendingTimers() + await Utils.flushPromises() + jest.runOnlyPendingTimers() - AdjustInstance.disableThirdPartySharing() + AdjustInstance.disableThirdPartySharing() - const requests = Queue.push.mock.calls + await Utils.flushPromises() + jest.runOnlyPendingTimers() - expect(requests.length).toBe(2) - expect(requests[0][0].url).toBe('/session') - expect(requests[1][0].url).toBe('/third_party_sharing') + const requests = Queue.push.mock.calls - return Utils.flushPromises() - }) + expect(requests.length).toBe(2) + expect(requests[0][0].url).toBe('/session') + expect(requests[1][0].url).toBe('/third_party_sharing') + + return Utils.flushPromises() }) - it('disables third-party sharing synchronously after init', () => { + it('disables third-party sharing synchronously after init', async () => { AdjustInstance.initSdk(suite.config) AdjustInstance.disableThirdPartySharing() expect.assertions(3) - return Utils.flushPromises() - .then(() => { - PubSub.publish('sdk:installed') - jest.runOnlyPendingTimers() + await Utils.flushPromises() + jest.runOnlyPendingTimers() - const requests = Queue.push.mock.calls + await Utils.flushPromises() + jest.runOnlyPendingTimers() - expect(requests.length).toBe(2) - expect(requests[0][0].url).toBe('/session') - expect(requests[1][0].url).toBe('/third_party_sharing') + const requests = Queue.push.mock.calls - return Utils.flushPromises() - }) + expect(requests.length).toBe(2) + expect(requests[0][0].url).toBe('/session') + expect(requests[1][0].url).toBe('/third_party_sharing') + + return Utils.flushPromises() }) }) }) From 34a0dfa94badcaa1bb32a273aada0d13d1e6ba97 Mon Sep 17 00:00:00 2001 From: Yara Matkova Date: Mon, 12 Aug 2024 13:16:13 +0200 Subject: [PATCH 57/70] style: fix lint issues --- src/sdk/track-third-party-sharing.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/sdk/track-third-party-sharing.ts b/src/sdk/track-third-party-sharing.ts index d112812..8fb5f7e 100644 --- a/src/sdk/track-third-party-sharing.ts +++ b/src/sdk/track-third-party-sharing.ts @@ -30,7 +30,7 @@ export class ThirdPartySharing implements ThirdPartySharingOptions { public addGranularOption(partnerName: string, key: string, value: string) { if (!partnerName || !key || value === undefined) { - Logger.error("Cannot add granular option, partnerName, key and value are mandatory"); + Logger.error('Cannot add granular option, partnerName, key and value are mandatory'); return; } @@ -45,7 +45,7 @@ export class ThirdPartySharing implements ThirdPartySharingOptions { public addPartnerSharingSetting(partnerName: string, key: string, value: boolean) { if (!partnerName || !key || value === undefined) { - Logger.error("Cannot add partner sharing setting, partnerName, key and value are mandatory"); + Logger.error('Cannot add partner sharing setting, partnerName, key and value are mandatory'); return; } From 55130cd6c271bcc83906f1e48c209a48c2e7252b Mon Sep 17 00:00:00 2001 From: Yara Matkova Date: Mon, 12 Aug 2024 15:36:47 +0200 Subject: [PATCH 58/70] test: add ThirdPartySharing tests --- .../track-third-party-sharing.spec.ts | 135 ++++++++++++++++++ src/sdk/track-third-party-sharing.ts | 3 + 2 files changed, 138 insertions(+) create mode 100644 src/sdk/__tests__/track-third-party-sharing.spec.ts diff --git a/src/sdk/__tests__/track-third-party-sharing.spec.ts b/src/sdk/__tests__/track-third-party-sharing.spec.ts new file mode 100644 index 0000000..e7ab5a7 --- /dev/null +++ b/src/sdk/__tests__/track-third-party-sharing.spec.ts @@ -0,0 +1,135 @@ +import { + trackThirdPartySharing, + ThirdPartySharing +} from '../track-third-party-sharing'; +import * as Logger from '../logger' + +jest.mock('../logger') + +describe('third party sharing functionality', () => { + beforeAll(() => { + jest.spyOn(Logger.default, 'warn') + jest.spyOn(Logger.default, 'error') + }) + + afterAll(() => { + jest.restoreAllMocks() + jest.clearAllTimers() + }) + + describe('ThirdPartySharing class', () => { + it.each([ + //[value, expected, logsWarning] + [true, true, false], + [false, false, false], + [0, false, true], + [undefined, false, true], + [null, false, true], + [1, true, true], + ['string', true, true], + ])('initialises with isEnabled flag', (value, expected, logsWarning) => { + const options = new ThirdPartySharing(value as any) + expect(options.isEnabled).toBe(expected) + + if (logsWarning) { + expect(Logger.default.warn).toHaveBeenCalledWith(`isEnabled should be boolean, converting ${value} results ${expected}`) + } + }) + + describe('granular options', () => { + it('adds granular option', () => { + const options = new ThirdPartySharing(true) + options.addGranularOption('partnerName', 'optionKey', 'value') + + expect(options.granularOptions).toEqual({ 'partnerName': { 'optionKey': 'value' } }) + }) + + it('adds multiple granular options', () => { + const options = new ThirdPartySharing(true) + options.addGranularOption('partner_1', 'optionKey', '1') + options.addGranularOption('partner_2', 'optionKey', '0') + + expect(options.granularOptions).toEqual({ 'partner_1': { 'optionKey': '1' }, 'partner_2': { 'optionKey': '0' } }) + }) + + it('adds multiple granular options to single partnerName', () => { + const options = new ThirdPartySharing(true) + options.addGranularOption('partnerName', 'key_1', '1') + options.addGranularOption('partnerName', 'key_2', '0') + + expect(options.granularOptions).toEqual({ 'partnerName': { 'key_1': '1', 'key_2': '0' } }) + }) + + it('replaces granular option with same partnerName and key', () => { + const options = new ThirdPartySharing(true) + options.addGranularOption('partnerName', 'key', 'first') + options.addGranularOption('partnerName', 'key', 'second') + + expect(options.granularOptions).toEqual({ 'partnerName': { 'key': 'second' } }) + }) + + it.each([ + ['partnerName', 'key', undefined], + ['partnerName', undefined, undefined], + [undefined, 'key', 'value'], + ['partner', '', 'value'], + ['', 'key', 'value'], + ['', '', ''], + ])('logs an error if any parameter is absent', (partnerName, key, value) => { + const options = new ThirdPartySharing(true) + options.addGranularOption(partnerName as any, key as any, value as any) + + expect(Logger.default.error).toHaveBeenCalledWith('Cannot add granular option, partnerName, key and value are mandatory') + }) + }) + + describe('partner sharing settings', () => { + it('adds partner sharing setting', () => { + const options = new ThirdPartySharing(true) + options.addPartnerSharingSetting('partnerName', 'optionKey', true) + + expect(options.partnerSharingSettings).toEqual({ 'partnerName': { 'optionKey': true } }) + }) + + it('adds multiple partner sharing settings', () => { + const options = new ThirdPartySharing(true) + options.addPartnerSharingSetting('partner_1', 'optionKey', true) + options.addPartnerSharingSetting('partner_2', 'optionKey', false) + + expect(options.partnerSharingSettings).toEqual({ 'partner_1': { 'optionKey': true }, 'partner_2': { 'optionKey': false } }) + }) + + it('adds partner sharing settings to single partnerName', () => { + const options = new ThirdPartySharing(true) + options.addPartnerSharingSetting('partnerName', 'key_1', true) + options.addPartnerSharingSetting('partnerName', 'key_2', false) + + expect(options.partnerSharingSettings).toEqual({ 'partnerName': { 'key_1': true, 'key_2': false } }) + }) + + it('replaces partner sharing setting with same partnerName and key', () => { + const options = new ThirdPartySharing(true) + options.addPartnerSharingSetting('partnerName', 'key', true) + options.addPartnerSharingSetting('partnerName', 'key', false) + + expect(options.partnerSharingSettings).toEqual({ 'partnerName': { 'key': false } }) + }) + + it.each([ + ['partnerName', 'key', undefined], + ['partnerName', undefined, undefined], + [undefined, 'key', true], + ['partner', '', true], + ['', 'key', true], + ['', '', true], + ])('logs an error if any parameter is absent', (partnerName, key, value) => { + const options = new ThirdPartySharing(true) + options.addPartnerSharingSetting(partnerName as any, key as any, value as any) + + expect(Logger.default.error).toHaveBeenCalledWith('Cannot add granular option, partnerName, key and value are mandatory') + }) + }) + + }) + +}) diff --git a/src/sdk/track-third-party-sharing.ts b/src/sdk/track-third-party-sharing.ts index 8fb5f7e..b1d465c 100644 --- a/src/sdk/track-third-party-sharing.ts +++ b/src/sdk/track-third-party-sharing.ts @@ -13,6 +13,9 @@ export class ThirdPartySharing implements ThirdPartySharingOptions { private _partnerSharingSettings: Record> = {}; constructor(isEnabled: boolean) { + if (typeof isEnabled !== 'boolean') { + Logger.warn(`isEnabled should be boolean, converting ${isEnabled} results ${!!isEnabled}`); + } this._isEnabled = !!isEnabled } From 06906356126c06fb4f030002ea0327d877790eec Mon Sep 17 00:00:00 2001 From: Yara Matkova Date: Mon, 12 Aug 2024 19:26:14 +0200 Subject: [PATCH 59/70] test: add trackThirdPartySharing tests --- .../track-third-party-sharing.spec.ts | 65 +++++++++++++++++++ src/sdk/track-third-party-sharing.ts | 5 ++ 2 files changed, 70 insertions(+) diff --git a/src/sdk/__tests__/track-third-party-sharing.spec.ts b/src/sdk/__tests__/track-third-party-sharing.spec.ts index e7ab5a7..5092dfe 100644 --- a/src/sdk/__tests__/track-third-party-sharing.spec.ts +++ b/src/sdk/__tests__/track-third-party-sharing.spec.ts @@ -3,6 +3,9 @@ import { ThirdPartySharing } from '../track-third-party-sharing'; import * as Logger from '../logger' +import * as Queue from '../queue' + +/* eslint-disable @typescript-eslint/no-explicit-any */ jest.mock('../logger') @@ -10,6 +13,7 @@ describe('third party sharing functionality', () => { beforeAll(() => { jest.spyOn(Logger.default, 'warn') jest.spyOn(Logger.default, 'error') + jest.spyOn(Queue, 'push') }) afterAll(() => { @@ -132,4 +136,65 @@ describe('third party sharing functionality', () => { }) + describe('trackThirdPartySharing', () => { + it('attaches isEnabled to request parameters', () => { + const options = new ThirdPartySharing(true) + trackThirdPartySharing(options) + + expect(Queue.push).toHaveBeenCalledWith({ + url: "/third_party_sharing", + method: 'POST', + params: { + sharing: 'enable', + granularThirdPartySharingOptions: {}, + partnerSharingSettings: {} + } + }) + }) + + it('attaches granular options to request parameters', () => { + const options = new ThirdPartySharing(true) + options.addGranularOption('partner', 'key', 'value') + trackThirdPartySharing(options) + + expect(Queue.push).toHaveBeenCalledWith({ + url: "/third_party_sharing", + method: 'POST', + params: { + sharing: 'enable', + granularThirdPartySharingOptions: { partner: { key: "value"} }, + partnerSharingSettings: {} + } + }) + }) + + it('attaches partner sharing settings to request parameters', () => { + const options = new ThirdPartySharing(true) + options.addPartnerSharingSetting('partner', 'key', false) + trackThirdPartySharing(options) + + expect(Queue.push).toHaveBeenCalledWith({ + url: "/third_party_sharing", + method: 'POST', + params: { + sharing: 'enable', + granularThirdPartySharingOptions: {}, + partnerSharingSettings: { partner: { key: false} }, + } + }) + }) + + it.each([ + [undefined], + [null], + [''], + [[]], + [{}], + [{ hello: 'hi' }] + ])('logs an error message when no options provided', (options) => { + trackThirdPartySharing(options as any) + + expect(Logger.default.error).toHaveBeenCalledWith('Can not track third-party sharing without parameters') + }) + }) }) diff --git a/src/sdk/track-third-party-sharing.ts b/src/sdk/track-third-party-sharing.ts index b1d465c..91aacb8 100644 --- a/src/sdk/track-third-party-sharing.ts +++ b/src/sdk/track-third-party-sharing.ts @@ -63,6 +63,11 @@ export class ThirdPartySharing implements ThirdPartySharingOptions { } export function trackThirdPartySharing(adjustThirdPartySharing: ThirdPartySharingOptions) { + if (!adjustThirdPartySharing || adjustThirdPartySharing.isEnabled === undefined) { + Logger.error('Can not track third-party sharing without parameters') + return + } + const params = { sharing: adjustThirdPartySharing.isEnabled ? 'enable' : 'disable', granularThirdPartySharingOptions: adjustThirdPartySharing.granularOptions, From d62b81ae1ef00ef52cb740baac0a2f70b1804b3d Mon Sep 17 00:00:00 2001 From: Yara Matkova Date: Tue, 13 Aug 2024 10:30:12 +0200 Subject: [PATCH 60/70] style: fix lint issues --- src/sdk/__tests__/track-third-party-sharing.spec.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/sdk/__tests__/track-third-party-sharing.spec.ts b/src/sdk/__tests__/track-third-party-sharing.spec.ts index 5092dfe..a3d9331 100644 --- a/src/sdk/__tests__/track-third-party-sharing.spec.ts +++ b/src/sdk/__tests__/track-third-party-sharing.spec.ts @@ -142,7 +142,7 @@ describe('third party sharing functionality', () => { trackThirdPartySharing(options) expect(Queue.push).toHaveBeenCalledWith({ - url: "/third_party_sharing", + url: '/third_party_sharing', method: 'POST', params: { sharing: 'enable', @@ -158,11 +158,11 @@ describe('third party sharing functionality', () => { trackThirdPartySharing(options) expect(Queue.push).toHaveBeenCalledWith({ - url: "/third_party_sharing", + url: '/third_party_sharing', method: 'POST', params: { sharing: 'enable', - granularThirdPartySharingOptions: { partner: { key: "value"} }, + granularThirdPartySharingOptions: { partner: { key: 'value'} }, partnerSharingSettings: {} } }) @@ -174,7 +174,7 @@ describe('third party sharing functionality', () => { trackThirdPartySharing(options) expect(Queue.push).toHaveBeenCalledWith({ - url: "/third_party_sharing", + url: '/third_party_sharing', method: 'POST', params: { sharing: 'enable', From 443676d9f765ce0f7535e88c612357c73610c25b Mon Sep 17 00:00:00 2001 From: Yara Matkova Date: Tue, 13 Aug 2024 20:24:55 +0200 Subject: [PATCH 61/70] style: remove redundant argument --- .../track-third-party-sharing/track-third-party-sharing.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/demo/track-third-party-sharing/track-third-party-sharing.js b/src/demo/track-third-party-sharing/track-third-party-sharing.js index f72975e..3dc8061 100644 --- a/src/demo/track-third-party-sharing/track-third-party-sharing.js +++ b/src/demo/track-third-party-sharing/track-third-party-sharing.js @@ -16,9 +16,9 @@ function init() { _ui.enableTPS = document.getElementById('enable-tps') _ui.submitButton = _ui.tpsOptionsForm.querySelector('button[type="submit"]') - _ui.tpsOptionsForm.addEventListener('submit', _handleSave, false) - _ui.toggleButton.addEventListener('click', _handleToggle, false) - _ui.trackTPSButton.addEventListener('click', _handleTrackTPS, false) + _ui.tpsOptionsForm.addEventListener('submit', _handleSave) + _ui.toggleButton.addEventListener('click', _handleToggle) + _ui.trackTPSButton.addEventListener('click', _handleTrackTPS) _ui.enableTPS.addEventListener('change', () => { _tpsOptions.isEnabled = _ui.enableTPS.checked From e4f61e88e176195757fa7e490d6c2b9d822078f3 Mon Sep 17 00:00:00 2001 From: Yara Matkova Date: Tue, 13 Aug 2024 20:26:10 +0200 Subject: [PATCH 62/70] fix: add options as array of elements --- .../track-third-party-sharing.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/demo/track-third-party-sharing/track-third-party-sharing.js b/src/demo/track-third-party-sharing/track-third-party-sharing.js index 3dc8061..33b75b2 100644 --- a/src/demo/track-third-party-sharing/track-third-party-sharing.js +++ b/src/demo/track-third-party-sharing/track-third-party-sharing.js @@ -122,9 +122,11 @@ function _initGranularOptions() { const lastIndex = _tpsOptions.granularOptions.length if (_tpsOptions.granularOptions.length > 0) { + const options = [] for (let i = 0; i < _tpsOptions.granularOptions.length; i++) { - root.insertBefore(_createOption('granular', i, _tpsOptions.granularOptions[i]), addButton) + options.push(_createOption('granular', i, _tpsOptions.granularOptions[i])) } + addButton.before(...options) } root.insertBefore(_createOption('granular', lastIndex), addButton) @@ -156,9 +158,11 @@ function _initpartnerSharingSettings() { const lastIndex = _tpsOptions.partnerSharingSettings.length if (_tpsOptions.partnerSharingSettings.length > 0) { + const options = [] for (let i = 0; i < _tpsOptions.partnerSharingSettings.length; i++) { - root.insertBefore(_createOption('partner-sharing', i, _tpsOptions.partnerSharingSettings[i]), addButton) + options.push(_createOption('partner-sharing', i, _tpsOptions.partnerSharingSettings[i])) } + addButton.before(...options) } root.insertBefore(_createOption('partner-sharing', lastIndex), addButton) From bc9179d5aca79cae049c1992545c4682aa9e0980 Mon Sep 17 00:00:00 2001 From: Yara Matkova Date: Wed, 14 Aug 2024 02:11:38 +0200 Subject: [PATCH 63/70] feat: add component to create dynamic parameters --- src/assets/scss/index.scss | 1 + src/demo/dynamic-params/dynamic-params.js | 148 ++++++++++++++++++++ src/demo/dynamic-params/dynamic-params.scss | 20 +++ src/demo/utils.js | 5 + 4 files changed, 174 insertions(+) create mode 100644 src/demo/dynamic-params/dynamic-params.js create mode 100644 src/demo/dynamic-params/dynamic-params.scss diff --git a/src/assets/scss/index.scss b/src/assets/scss/index.scss index 8163bfe..a2fcac6 100644 --- a/src/assets/scss/index.scss +++ b/src/assets/scss/index.scss @@ -3,6 +3,7 @@ @import "flex-grid"; @import "../../demo/tabs/tabs"; @import "../../demo/key-value-params/key-value-params"; +@import "../../demo/dynamic-params/dynamic-params"; html, body { margin: 0; diff --git a/src/demo/dynamic-params/dynamic-params.js b/src/demo/dynamic-params/dynamic-params.js new file mode 100644 index 0000000..7fc6d7a --- /dev/null +++ b/src/demo/dynamic-params/dynamic-params.js @@ -0,0 +1,148 @@ +import { capitalize } from '../utils' + +const ACTION_SYMBOLS = { + add: '+', + remove: '×' +} + +function _createNode(name, classes = [], content, attrs = {}) { + const element = document.createElement(name) + + element.classList.add(...classes) + + if (content) { + element.appendChild(document.createTextNode(content)) + } + + Object.keys(attrs) + .map(key => [key, attrs[key]]) + .map(([key, value]) => element[key] = value) + + return element +} + +function _createInput(inputCls, label, value = '') { + const keyParent = _createNode('div', ['flex-box-column']) + keyParent.style.height = '45px' + const keyLabel = _createNode('label', ['flex-auto'], label) + const keyInput = _createNode('input', ['flex-one', inputCls], null, { type: 'text', value }) + + keyParent.appendChild(keyLabel) + keyParent.appendChild(keyInput) + + return keyParent +} + +function _append(parent, handle, isLast, fields, param = {}) { + const group = _createNode('div', ['flex-box-row', 'form-row-group']) + + const elements = [] + fields.forEach(field => { + elements.push(_createInput(`${field}-input`, capitalize(field), param[field])) + }) + group.append(...elements) + + const actionName = isLast ? 'add' : 'remove' + const action = _createNode('button', ['flex-auto', actionName], ACTION_SYMBOLS[actionName], { type: 'button' }) + + action.addEventListener('click', handle, false) + group.appendChild(action) + + parent.appendChild(group) +} + +const DynamicParams = (id, fields = ['key', 'value'], params = [], onChange) => { + const _id = id + const _fields = fields + const _params = params + let _parent = null + + function init() { + _parent = document.getElementById(_id) + + if (_params.length) { + _params.forEach((param, idx) => { + const isLast = idx === params.length - 1 + const handle = isLast ? _handleAdd : _handleRemove + _append(_parent, handle, isLast, _fields, param) + }) + } else { + _append(_parent, _handleAdd, true, _fields) + } + } + + function query() { + const rows = _parent.querySelectorAll('.form-row-group') + return Array.from(rows) + .map(row => { + const pairs = _fields + .map(field => [field, row.querySelector(`.${field}-input`).value]) + + if (pairs.some(([, value]) => value === '')) { + return null + } + + return pairs.reduce((acc, [key, value]) => ({ ...acc, [key]: value }), {}) + }) + .filter(row => !!row) + } + + function reset() { + Array.from(_parent.querySelectorAll('.form-row-group')) + .map(row => { + const action = row.querySelector('button') + const handle = action.classList.contains('add') ? _handleAdd : _handleRemove + action.removeEventListener('click', handle, false) + row.remove() + }) + + _append(_parent, _handleAdd, true, _fields) + } + + function _handleRemove(e) { + const action = e.target + action.removeEventListener('click', _handleRemove, false) + action.parentNode.remove() + + if (typeof onChange === 'function') { + onChange() + } + } + + function _handleAdd(e) { + const row = e.target.parentNode + + const pairs = _fields + .map(field => [field, row.querySelector(`.${field}-input`).value]) + + if (pairs.some(([, value]) => value === '')) { + return + } + + _append(_parent, _handleAdd, true, _fields) + _swapAction(row) + + if (typeof onChange === 'function') { + onChange() + } + } + + function _swapAction(parent) { + const removeAction = _createNode('button', ['flex-auto', 'remove'], ACTION_SYMBOLS.remove, { type: 'button' }) + const addAction = parent.querySelector('.add') + + removeAction.addEventListener('click', _handleRemove, false) + addAction.removeEventListener('click', _handleAdd, false) + + addAction.remove() + parent.appendChild(removeAction) + } + + return { + init, + query, + reset + } +} + +export default DynamicParams diff --git a/src/demo/dynamic-params/dynamic-params.scss b/src/demo/dynamic-params/dynamic-params.scss new file mode 100644 index 0000000..93993e9 --- /dev/null +++ b/src/demo/dynamic-params/dynamic-params.scss @@ -0,0 +1,20 @@ +.dynamic-params { + h3 { + font-weight: normal; + color: $fontColor; + font-size: 15px; + margin-bottom: 10px; + } + + .form-row-group { + margin-bottom: 10px; + align-items: end; + justify-content: space-between; + gap: 3px; + } + + button { + padding: 5px 10px; + margin-left: 5px; + } +} diff --git a/src/demo/utils.js b/src/demo/utils.js index 9213aa8..3307d58 100644 --- a/src/demo/utils.js +++ b/src/demo/utils.js @@ -2,6 +2,10 @@ function hyphenToCamelCase (string) { return string.replace(/(-\w)/g, ([, m]) => m.toUpperCase()) } +function capitalize(string) { + return string.charAt(0).toUpperCase() + string.slice(1); +} + function debounce (fn, wait = 500) { let timeout return function () { @@ -12,5 +16,6 @@ function debounce (fn, wait = 500) { export { hyphenToCamelCase, + capitalize, debounce } From ba278b53bf5596695798bc1d774b00abccab49d7 Mon Sep 17 00:00:00 2001 From: Yara Matkova Date: Wed, 14 Aug 2024 02:12:21 +0200 Subject: [PATCH 64/70] refac: use dynamic parameters component in third-party-sharing options in demo app --- .../track-third-party-sharing.html | 16 +- .../track-third-party-sharing.js | 184 ++---------------- 2 files changed, 28 insertions(+), 172 deletions(-) diff --git a/src/demo/track-third-party-sharing/track-third-party-sharing.html b/src/demo/track-third-party-sharing/track-third-party-sharing.html index eb14fa1..26c4e7b 100644 --- a/src/demo/track-third-party-sharing/track-third-party-sharing.html +++ b/src/demo/track-third-party-sharing/track-third-party-sharing.html @@ -8,20 +8,18 @@
-
+
-
- Granular options - -
+
+

Granular options

+
-
- Partner sharing settings - -
+
+

Partner sharing settings

+
diff --git a/src/demo/track-third-party-sharing/track-third-party-sharing.js b/src/demo/track-third-party-sharing/track-third-party-sharing.js index 33b75b2..db6509d 100644 --- a/src/demo/track-third-party-sharing/track-third-party-sharing.js +++ b/src/demo/track-third-party-sharing/track-third-party-sharing.js @@ -1,10 +1,13 @@ import Adjust from '../../sdk/main' import { getItem, setItem } from '../storage' +import DynamicParams from '../dynamic-params/dynamic-params' const _ui = {} let _tpsOptions = {} let _disabled = false let _timeoutId = null +let _granularOptions = null +let _partnerSharingSettings = null function init() { _tpsOptions = getItem('tpsOptions') || { isEnabled: true, granularOptions: [], partnerSharingSettings: [] } @@ -26,169 +29,26 @@ function init() { _setJson(_tpsOptions) }) - _initGranularOptions() - _initpartnerSharingSettings() + _granularOptions = DynamicParams('tps-granular', ['partnerName', 'key', 'value'], _tpsOptions.granularOptions, + () => { + _tpsOptions.granularOptions = _granularOptions.query() + _setJson(_tpsOptions) + setItem('tpsOptions', _tpsOptions) + }) + _granularOptions.init() + + _partnerSharingSettings = DynamicParams('tps-partner-sharing', ['partnerName', 'key', 'value'], _tpsOptions.partnerSharingSettings, + () => { + _tpsOptions.partnerSharingSettings = _partnerSharingSettings.query() + _setJson(_tpsOptions) + setItem('tpsOptions', _tpsOptions) + }) + _partnerSharingSettings.init() _setJson(_tpsOptions) } -function _createOptionsMarkup(idPrefix, option, onRemoveClick, onValueChange, ) { - const wrapper = document.createElement('div') - wrapper.id = idPrefix - wrapper.className = 'flex-box-row' - wrapper.style.justifyContent = 'space-between' - wrapper.style.alignItems = 'center' - wrapper.style.gap = '3px' - - const partner = document.createElement('div') - partner.className = 'form-row' - const partnerLabel = document.createElement('label') - partnerLabel.for = `${idPrefix}-partner` - partnerLabel.innerText = 'Partner' - const partnerInput = document.createElement('input') - partnerInput.id = `${idPrefix}-partner` - partnerInput.value = option ? option.partnerName : '' - partner.append(partnerLabel, partnerInput) - wrapper.append(partner) - - const key = document.createElement('div') - key.className = 'form-row' - const keyLabel = document.createElement('label') - keyLabel.for = `${idPrefix}-key` - keyLabel.innerText = 'Key' - const keyInput = document.createElement('input') - keyInput.id = `${idPrefix}-key` - keyInput.value = option ? option.key : '' - key.append(keyLabel, keyInput) - wrapper.append(key) - - const value = document.createElement('div') - value.className = 'form-row' - const valueLabel = document.createElement('label') - valueLabel.for = `${idPrefix}-value` - valueLabel.innerText = 'Value' - const valueInput = document.createElement('input') - valueInput.id = `${idPrefix}-value` - valueInput.value = option ? option.value : '' - valueInput.addEventListener('change', onValueChange) - value.append(valueLabel, valueInput) - wrapper.append(value) - - const removeButton = document.createElement('button') - removeButton.id = `${idPrefix}-remove` - removeButton.innerText = '-' - removeButton.addEventListener('click', (e) => { onRemoveClick(e); wrapper.remove(); }) - wrapper.append(removeButton) - - return wrapper -} - -function _createOption(type, index, option) { - const idPrefix = `tps-${type}-${index}` - - const onValueChange = (e) => { - if (type === 'granular') { - return - } - - if (e.target.value !== 'false') { - e.target.value = + e.target.value ? 'true' : 'false' - } - } - - const onRemove = (e) => { - e.preventDefault() - - if (!option) { - return - } - - const predicate = i => !(i.partnerName === option.partnerName && i.key === option.key) - if (type === 'granular') { - _tpsOptions.granularOptions = _tpsOptions.granularOptions.filter(predicate) - } else { - _tpsOptions.partnerSharingSettings = _tpsOptions.partnerSharingSettings.filter(predicate) - } - _setJson(_tpsOptions) - setItem('tpsOptions', _tpsOptions) - } - - return _createOptionsMarkup(idPrefix, option, onRemove, onValueChange) -} - -function _initGranularOptions() { - const root = _ui.tpsOptionsForm.querySelector('#tps-granular') - const addButton = _ui.tpsOptionsForm.querySelector('#tps-granular-add') - - const lastIndex = _tpsOptions.granularOptions.length - if (_tpsOptions.granularOptions.length > 0) { - const options = [] - for (let i = 0; i < _tpsOptions.granularOptions.length; i++) { - options.push(_createOption('granular', i, _tpsOptions.granularOptions[i])) - } - addButton.before(...options) - } - root.insertBefore(_createOption('granular', lastIndex), addButton) - - addButton.addEventListener('click', (e) => { - e.preventDefault() - - const childrenDivs = Array.from(root.children).filter(i => i.nodeName === 'DIV'); - const lastOption = childrenDivs[childrenDivs.length - 1] - const fields = lastOption.getElementsByTagName('input') - - // do nothing if any of properties has no value - if (fields[0].value === '' || fields[1].value === '' || fields[2].value === '') { - return; - } - - _tpsOptions.granularOptions.push({partnerName: fields[0].value, key: fields[1].value, value: fields[2].value }) - - _setJson(_tpsOptions) - setItem('tpsOptions', _tpsOptions) - - const lastIndex = +lastOption.id.substring('tps-granular-'.length) - root.insertBefore(_createOption('granular', lastIndex + 1), addButton) - }) -} - -function _initpartnerSharingSettings() { - const root = _ui.tpsOptionsForm.querySelector('#tps-partner-sharing') - const addButton = _ui.tpsOptionsForm.querySelector('#tps-partner-sharing-add') - - const lastIndex = _tpsOptions.partnerSharingSettings.length - if (_tpsOptions.partnerSharingSettings.length > 0) { - const options = [] - for (let i = 0; i < _tpsOptions.partnerSharingSettings.length; i++) { - options.push(_createOption('partner-sharing', i, _tpsOptions.partnerSharingSettings[i])) - } - addButton.before(...options) - } - root.insertBefore(_createOption('partner-sharing', lastIndex), addButton) - - addButton.addEventListener('click', (e) => { - e.preventDefault() - - const childrenDivs = Array.from(root.children).filter(i => i.nodeName === 'DIV'); - const lastOption = childrenDivs[childrenDivs.length - 1] - const fields = lastOption.getElementsByTagName('input') - - // do nothing if any of properties has no value - if (fields[0].value === '' || fields[1].value === '' || fields[2].value === '') { - return; - } - - _tpsOptions.partnerSharingSettings.push({partnerName: fields[0].value, key: fields[1].value, value: fields[2].value }) - - _setJson(_tpsOptions) - setItem('tpsOptions', _tpsOptions) - - const lastIndex = +lastOption.id.substring('tps-partner-sharing-'.length) - root.insertBefore(_createOption('partner-sharing', lastIndex + 1), addButton) - }) -} - -function trackThirdPartySharing(tpsOptions) { +function _trackThirdPartySharing(tpsOptions) { const options = new Adjust.ThirdPartySharing(tpsOptions.isEnabled) for (const option of tpsOptions.granularOptions) { @@ -220,7 +80,7 @@ function _handleSave(e) { _ui.submitButton.classList.remove('loading') _ui.submitButton.disabled = false - trackThirdPartySharing(_tpsOptions) + _trackThirdPartySharing(_tpsOptions) }, 1000) } @@ -239,7 +99,7 @@ function _handleTrackTPS() { _ui.trackTPSButton.classList.remove('loading') _ui.trackTPSButton.disabled = false - trackThirdPartySharing(_tpsOptions) + _trackThirdPartySharing(_tpsOptions) }, 1000) } @@ -264,8 +124,6 @@ function _setJson(tpsOptions) { text += 'Adjust.trackThirdPartySharing(options);' - console.log(text) - _ui.tpsOptionsJson.textContent = text } From 96f0819f484389424fa27c348d649fac4d582336 Mon Sep 17 00:00:00 2001 From: Yara Matkova Date: Fri, 16 Aug 2024 02:26:38 +0200 Subject: [PATCH 65/70] fix: add missing type declarations --- dist/adjust-latest.d.ts | 19 ++++++++++++++++++- src/snippet.js | 1 + 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/dist/adjust-latest.d.ts b/dist/adjust-latest.d.ts index 8866adc..ca663a2 100644 --- a/dist/adjust-latest.d.ts +++ b/dist/adjust-latest.d.ts @@ -115,6 +115,17 @@ declare namespace Adjust { isDataResidency?: boolean; } + interface ThirdPartySharingOptions { + isEnabled: boolean; + granularOptions: Record>; + partnerSharingSettings: Record>; + } + + class ThirdPartySharing implements ThirdPartySharingOptions { + public addGranularOption(partnerName: string, key: string, value: string) + public addPartnerSharingSetting(partnerName: string, key: string, value: boolean) + } + interface InitOptions { /** Required to initialise SDK instance, please make sure to provide valid app token. */ @@ -155,7 +166,6 @@ declare namespace Adjust { /** Optional. The URL strategy feature allows you to set either: * - The country in which Adjust stores your data (data residency). * - The endpoint to which the Adjust SDK sends traffic (URL strategy).*/ - // TODO: place a link to updated docs in this warning, see https://adjustcom.atlassian.net/browse/DSM-3071 urlStrategy?: UrlStartegyLiterals | UrlStrategyConfig; /** Optional. A custom namespace for SDK data storage. If not set then default one is used. @@ -406,8 +416,15 @@ declare namespace Adjust { * * Marketing Opt-out, which is disabling third-party sharing ability. This method will notify our backed in the same * manner as it does for GDPR Forget me. + * + * @deprecated Use {@link trackThirdPartySharing} instead */ function disableThirdPartySharing(): void + + /** + * Track third party sharing + */ + function trackThirdPartySharing(adjustThirdPartySharing: ThirdPartySharingOptions): void } export default Adjust diff --git a/src/snippet.js b/src/snippet.js index 0339d38..13c3656 100644 --- a/src/snippet.js +++ b/src/snippet.js @@ -55,6 +55,7 @@ 'restart', 'gdprForgetMe', 'disableThirdPartySharing', + 'trackThirdPartySharing', 'initSmartBanner', 'showSmartBanner', 'hideSmartBanner', From 6dbab6b0d724d3b49d05ef6e9df30d0de3d155e5 Mon Sep 17 00:00:00 2001 From: Yara Matkova Date: Fri, 16 Aug 2024 02:26:58 +0200 Subject: [PATCH 66/70] style: remove todos --- src/sdk/url-strategy.ts | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/sdk/url-strategy.ts b/src/sdk/url-strategy.ts index 54e4354..b5907b5 100644 --- a/src/sdk/url-strategy.ts +++ b/src/sdk/url-strategy.ts @@ -55,7 +55,6 @@ function transfromDeprecatedParamsToUrlStrategyConfig(endpoints: Record Date: Fri, 16 Aug 2024 12:01:02 +0200 Subject: [PATCH 67/70] bumd version to 5.7.0 --- VERSION | 2 +- package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/VERSION b/VERSION index 1bc788d..42cdd0b 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -5.6.0 +5.7.0 diff --git a/package-lock.json b/package-lock.json index f251d4f..7120872 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@adjustcom/adjust-web-sdk", - "version": "5.6.0", + "version": "5.7.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@adjustcom/adjust-web-sdk", - "version": "5.6.0", + "version": "5.7.0", "license": "MIT", "dependencies": { "@babel/runtime": "^7.24.4" diff --git a/package.json b/package.json index 9746143..6f24d44 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@adjustcom/adjust-web-sdk", - "version": "5.6.0", + "version": "5.7.0", "description": "This is the guide to the Javascript SDK of Adjustâ„¢ for web sites or web apps. You can read more about Adjustâ„¢ at [adjust.com].", "scripts": { "build:demo": "webpack --mode production --config webpack.demo.config.js", From efb12f5f42f1f8b09c1e905081d3e8bd34d0e094 Mon Sep 17 00:00:00 2001 From: Yara Matkova Date: Fri, 16 Aug 2024 12:01:42 +0200 Subject: [PATCH 68/70] feat: CDN snippet creates proxy for SDK classes --- src/snippet.js | 50 +++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 47 insertions(+), 3 deletions(-) diff --git a/src/snippet.js b/src/snippet.js index 13c3656..08402e0 100644 --- a/src/snippet.js +++ b/src/snippet.js @@ -1,15 +1,44 @@ /* eslint-disable */ -(function (window, document, tag, url, corsMode, integrity, sdkName, methods, placeholder, script, first) { +(function (window, document, tag, url, corsMode, integrity, sdkName, methods, classes, instanceAlias, placeholder, script, first) { var queueName = sdkName + '_q'; + var callsQueueName = sdkName + '_c'; window[sdkName] = window[sdkName] || {}; window[queueName] = window[queueName] || []; + window[callsQueueName] = window[callsQueueName] || []; - for (var i = 0; i < methods.length; i++) { + // creating wrappers for SDK functions + for (let i = 0; i < methods.length; i++) { placeholder(window[sdkName], window[queueName], methods[i]); } + // creating wrappers for SDK classes and their methods + for (let i = 0; i < classes.length; i++) { + var ctor = classes[i][0] + var classMethods = classes[i][1] + + var pretender + window[sdkName][ctor] = function (...args) { + pretender = this + window[callsQueueName].push(function () { + // calling real constructor + pretender[instanceAlias] = new window[sdkName][ctor](...args) + }) + return pretender + } + + for (let j = 0; j < classMethods.length; j++) { + const methodName = classMethods[j] + window[sdkName][ctor].prototype[methodName] = function (...args) { + window[callsQueueName].push(function () { + // calling real method + pretender[instanceAlias][methodName](...args) + }) + } + } + } + script = document.createElement(tag); first = document.getElementsByTagName(tag)[0]; script.async = true; @@ -21,8 +50,21 @@ } script.onload = function () { + // create all real objects and call their methods + for (var i = 0; i < window[callsQueueName].length; i++) { + window[callsQueueName][i]() + } + window[callsQueueName] = []; + + // create all real SDK functions for (var i = 0; i < window[queueName].length; i++) { - window[sdkName][window[queueName][i][0]].apply(window[sdkName], window[queueName][i][1]); + if (window[queueName][i][1][0][instanceAlias]) { + // if argument was an instance of some class, call function with real instance + // TODO: this doesn't support SDK functions with multiple parameters when some of them is a class instance + window[sdkName][window[queueName][i][0]](window[queueName][i][1][0][instanceAlias]) + } else { + window[sdkName][window[queueName][i][0]].apply(window[sdkName], window[queueName][i][1]); + } } window[queueName] = []; } @@ -60,6 +102,8 @@ 'showSmartBanner', 'hideSmartBanner', ], + [['ThirdPartySharing', ['addGranularOption', 'addPartnerSharingSetting']]], + '__realObj', function (context, queue, methodName) { context[methodName] = function () { queue.push([methodName, arguments]); From fcbb327ee8b698c16266ccb33cf8bbabd34ca03f Mon Sep 17 00:00:00 2001 From: Yara Matkova Date: Fri, 16 Aug 2024 12:01:49 +0200 Subject: [PATCH 69/70] docs: update CHANGELOG --- CHANGELOG.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 050ebb9..da592d9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,11 +1,11 @@ -### Version 5.7.0 ( DATE ) +### Version 5.7.0 (16th August 2024) #### Added - - -#### Fixed - +- Added asynchronous function `waitForWebUUID`, returning a Promise which resolves when `web_uuid` becomes available. +- Added asynchronous function `waitForAttribution`, returning a Promise which resolves when attribution data received from Adjust Backend. #### Changed +- [UrlStrategy reworked](https://dev.adjust.com/en/sdk/web/features/privacy#url-strategy). +- [Third Party Sharing reworked](https://dev.adjust.com/en/sdk/web/features/privacy). - Outdated Smart Banners removed. --- From 441e80ac5a3cf9fabe8c6dc03a09258e17143899 Mon Sep 17 00:00:00 2001 From: Yara Matkova Date: Fri, 16 Aug 2024 12:03:39 +0200 Subject: [PATCH 70/70] build: update prod files --- dist/INTEGRITY | 2 +- dist/adjust-latest.js | 846 +++++++++++++++++------------------- dist/adjust-latest.min.js | 2 +- dist/sdk.snippet-sri.min.js | 2 +- dist/sdk.snippet.min.js | 2 +- 5 files changed, 414 insertions(+), 440 deletions(-) diff --git a/dist/INTEGRITY b/dist/INTEGRITY index c130395..25f3862 100644 --- a/dist/INTEGRITY +++ b/dist/INTEGRITY @@ -1 +1 @@ -sha384-6ypaiRbayulK9Pc5tI+DbtfndaV381c5P1cjXBG9Z37D4lCW87Oxb/d81aXLKGiK \ No newline at end of file +sha384-WE6fJqvcE0mjcC/fPYooIQAOhsHpTDVYjC52i6Asn3LECEpjHyI5zUwD8/5esthg \ No newline at end of file diff --git a/dist/adjust-latest.js b/dist/adjust-latest.js index 063ead7..05ca403 100644 --- a/dist/adjust-latest.js +++ b/dist/adjust-latest.js @@ -137,6 +137,47 @@ function _objectWithoutProperties(source, excluded) { } return target; } +;// CONCATENATED MODULE: ./src/sdk/constants.ts +var SECOND = 1000; +var MINUTE = SECOND * 60; +var HOUR = MINUTE * 60; +var DAY = HOUR * 24; +var DISABLE_REASONS = /*#__PURE__*/function (DISABLE_REASONS) { + DISABLE_REASONS["REASON_GENERAL"] = "general"; + DISABLE_REASONS["REASON_GDPR"] = "gdpr"; + return DISABLE_REASONS; +}({}); +var HTTP_ERRORS = { + 'TRANSACTION_ERROR': 'XHR transaction failed due to an error', + 'SERVER_MALFORMED_RESPONSE': 'Response from server is malformed', + 'SERVER_INTERNAL_ERROR': 'Internal error occurred on the server', + 'SERVER_CANNOT_PROCESS': 'Server was not able to process the request, probably due to error coming from the client', + 'NO_CONNECTION': 'No internet connectivity', + 'SKIP': 'Skipping slower attempt', + 'MISSING_URL': 'Url is not provided' +}; +var STORAGE_TYPES = /*#__PURE__*/function (STORAGE_TYPES) { + STORAGE_TYPES["NO_STORAGE"] = "noStorage"; + STORAGE_TYPES["INDEXED_DB"] = "indexedDB"; + STORAGE_TYPES["LOCAL_STORAGE"] = "localStorage"; + return STORAGE_TYPES; +}({}); +var ENDPOINTS = { + default: 'adjust.com', + india: 'adjust.net.in', + china: 'adjust.world', + world: 'adjust.world', + EU: 'eu.adjust.com', + TR: 'tr.adjust.com', + US: 'us.adjust.com' +}; +var BASE_URL_PREFIX = 'https://app.'; +var GDPR_URL_PREFIX = 'https://gdpr.'; +var BASE_URL_NO_SUB_DOMAIN_PREFIX = 'https://'; +var PUB_SUB_EVENTS = { + WEB_UUID_CREATED: 'activity:web_uuid', + ATTRIBUTION_RECEIVED: 'activity:attribution' +}; ;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; @@ -197,84 +238,6 @@ function _nonIterableRest() { function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } -;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js - -function _arrayWithoutHoles(arr) { - if (Array.isArray(arr)) return _arrayLikeToArray(arr); -} -;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/iterableToArray.js -function _iterableToArray(iter) { - if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); -} -;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js -function _nonIterableSpread() { - throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); -} -;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js - - - - -function _toConsumableArray(arr) { - return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); -} -;// CONCATENATED MODULE: ./src/sdk/constants.js -var SECOND = 1000; -var MINUTE = SECOND * 60; -var HOUR = MINUTE * 60; -var DAY = HOUR * 24; -var REASON_GENERAL = 'general'; -var REASON_GDPR = 'gdpr'; -var HTTP_ERRORS = { - 'TRANSACTION_ERROR': 'XHR transaction failed due to an error', - 'SERVER_MALFORMED_RESPONSE': 'Response from server is malformed', - 'SERVER_INTERNAL_ERROR': 'Internal error occurred on the server', - 'SERVER_CANNOT_PROCESS': 'Server was not able to process the request, probably due to error coming from the client', - 'NO_CONNECTION': 'No internet connectivity', - 'SKIP': 'Skipping slower attempt', - 'MISSING_URL': 'Url is not provided' -}; -var STORAGE_TYPES = { - NO_STORAGE: 'noStorage', - INDEXED_DB: 'indexedDB', - LOCAL_STORAGE: 'localStorage' -}; -var ENDPOINTS = { - default: { - endpointName: 'Default', - app: 'https://app.adjust.com', - gdpr: 'https://gdpr.adjust.com' - }, - india: { - endpointName: 'Indian', - app: 'https://app.adjust.net.in', - gdpr: 'https://gdpr.adjust.net.in' - }, - china: { - endpointName: 'Chinese', - app: 'https://app.adjust.world', - gdpr: 'https://gdpr.adjust.world' - }, - EU: { - endpointName: 'EU', - app: 'https://app.eu.adjust.com', - gdpr: 'https://gdpr.eu.adjust.com' - }, - TR: { - endpointName: 'TR', - app: 'https://app.tr.adjust.com', - gdpr: 'https://gdpr.tr.adjust.com' - }, - US: { - endpointName: 'US', - app: 'https://app.us.adjust.com', - gdpr: 'https://gdpr.us.adjust.com' - } -}; -var PUB_SUB_EVENTS = { - WEB_UUID_CREATED: 'activity:web_uuid', - ATTRIBUTION_RECEIVED: 'activity:attribution' -}; ;// CONCATENATED MODULE: ./src/sdk/utilities.ts @@ -438,7 +401,7 @@ function isLocalStorageSupported() /*: boolean*/{ |}*/ var Globals = { namespace: "adjust-sdk" || 0, - version: "5.6.0" || 0, + version: "5.7.0" || 0, env: "production" }; /* harmony default export */ const globals = (Globals); @@ -586,142 +549,80 @@ var Logger = { error: _applyLevel('error', LEVEL_ERROR) }; /* harmony default export */ const logger = (Logger); -;// CONCATENATED MODULE: ./src/sdk/config.js - +;// CONCATENATED MODULE: ./src/sdk/config.ts -/*:: // -import { type BaseParamsT, type CustomConfigT, type InitOptionsT, type BaseParamsListT, type BaseParamsMandatoryListT, type CustomConfigListT } from './types';*/ +/** Base parameters set by client */ -/** - * Base parameters set by client - * - app token - * - environment - * - default tracker - * - external device ID - * - * @type {Object} - * @private - */ -var _baseParams /*: BaseParamsT*/ = {}; - -/** - * Custom config set by client - * - url override - * - event deduplication list limit - * - * @type {Object} - * @private - */ -var _customConfig /*: CustomConfigT*/ = {}; - -/** - * Mandatory fields to set for sdk initialization - * - * @type {string[]} - * @private - */ -var _mandatory /*: BaseParamsMandatoryListT*/ = ['appToken', 'environment']; +/** Custom config set by client */ +/*:: export type InitOptions = BaseParams & CustomConfig & { + attributionCallback: (eventName: string, attribution: Attribution) => unknown +}*/ +var _baseParams /*: BaseParams | null*/ = null; +var _customConfig /*: CustomConfig | null*/ = null; -/** - * Allowed params to be sent with each request - * - * @type {string[]} - * @private - */ -var _allowedParams /*: BaseParamsListT*/ = [].concat(_mandatory, ['defaultTracker', 'externalDeviceId']); +/** Mandatory fields to set for sdk initialization */ +var _mandatory /*: Array<(keyof MandatoryParams)>*/ = ['appToken', 'environment']; -/** - * Allowed configuration overrides - * - * @type {string[]} - * @private - */ -var _allowedConfig /*: CustomConfigListT*/ = ['customUrl', 'dataResidency', 'urlStrategy', 'eventDeduplicationListLimit', 'namespace']; +/** Allowed params to be sent with each request */ +var _allowedParams /*: Array<(keyof BaseParams)>*/ = [].concat(_mandatory, ['defaultTracker', 'externalDeviceId']); -/** - * Global configuration object used across the sdk - * - * @type {{ - * namespace: string, - * version: string, - * sessionWindow: number, - * sessionTimerWindow: number, - * requestValidityWindow: number - * }} - */ -var _baseConfig = { - sessionWindow: 30 * MINUTE, - sessionTimerWindow: 60 * SECOND, - requestValidityWindow: 28 * DAY -}; +/** Allowed configuration overrides */ +var _allowedConfig /*: Array<(keyof CustomConfig)>*/ = ['customUrl', 'dataResidency', 'urlStrategy', 'eventDeduplicationListLimit', 'namespace']; /** * Check of configuration has been initialized - * - * @returns {boolean} */ function isInitialised() /*: boolean*/{ return _mandatory.reduce(function (acc, key) { - return acc && !!_baseParams[key]; + return acc && !!_baseParams && !!_baseParams[key]; }, true); } -/** - * Get base params set by client - * - * @returns {Object} - */ -function getBaseParams() /*: BaseParamsT*/{ - return _objectSpread2({}, _baseParams); -} - /** * Set base params and custom config for the sdk to run - * - * @param {Object} options */ -function set(options /*: InitOptionsT*/) /*: void*/{ +function set(options /*: InitOptions*/) /*: void*/{ if (hasMissing(options)) { return; } - var filteredParams = [].concat(_toConsumableArray(_allowedParams), _allowedConfig).filter(function (key) { + _baseParams = _allowedParams.filter(function (key) { + return !!options[key]; + }).map(function (key) { + return [key, options[key]]; + }).reduce(function (acc, item) { + return reducer(acc, item); + }, {}); + _customConfig = _allowedConfig.filter(function (key) { return !!options[key]; }).map(function (key) { return [key, options[key]]; - }); - _baseParams = filteredParams.filter(function (_ref) { - var _ref2 = _slicedToArray(_ref, 1), - key = _ref2[0]; - return _allowedParams.indexOf(key) !== -1; - }).reduce(reducer, {}); - _customConfig = filteredParams.filter(function (_ref3) { - var _ref4 = _slicedToArray(_ref3, 1), - key = _ref4[0]; - return _allowedConfig.indexOf(key) !== -1; }).reduce(reducer, {}); } +/** + * Get base params set by client + */ +function getBaseParams() /*: Partial*/{ + return _baseParams ? _objectSpread2({}, _baseParams) // intentionally returns a copy + : {}; +} + /** * Get custom config set by client - * - * @returns {Object} */ -function getCustomConfig() /*: CustomConfigT*/{ - return _objectSpread2({}, _customConfig); +function getCustomConfig() /*: CustomConfig*/{ + return _customConfig ? _objectSpread2({}, _customConfig) // intentionally returns a copy + : {}; } /** * Check if there are missing mandatory parameters - * - * @param {Object} params - * @returns {boolean} - * @private */ -function hasMissing(params /*: BaseParamsT*/) /*: boolean*/{ +function hasMissing(params /*: BaseParams*/) /*: boolean*/{ var missing = _mandatory.filter(function (value) { return !params[value]; }); @@ -736,18 +637,21 @@ function hasMissing(params /*: BaseParamsT*/) /*: boolean*/{ * Restore config to its default state */ function destroy() /*: void*/{ - _baseParams = {}; - _customConfig = {}; + _baseParams = null; + _customConfig = null; } -var Config = _objectSpread2(_objectSpread2({}, _baseConfig), {}, { +var Config = { + sessionWindow: 30 * MINUTE, + sessionTimerWindow: 60 * SECOND, + requestValidityWindow: 28 * DAY, set: set, getBaseParams: getBaseParams, getCustomConfig: getCustomConfig, isInitialised: isInitialised, hasMissing: hasMissing, destroy: destroy -}); -/* harmony default export */ const config = (Config); +}; +/* harmony default export */ const sdk_config = (Config); ;// CONCATENATED MODULE: ./src/sdk/storage/scheme.ts @@ -907,7 +811,7 @@ var _preferencesScheme /*: StoreOptionsOptionalKey*/ = { keys: { reason: { key: 'r', - values: _defineProperty({}, REASON_GENERAL, 1) + values: _defineProperty({}, DISABLE_REASONS.REASON_GENERAL, 1) }, pending: { key: 'p', @@ -923,7 +827,7 @@ var _preferencesScheme /*: StoreOptionsOptionalKey*/ = { keys: { reason: { key: 'r', - values: _defineProperty(_defineProperty({}, REASON_GENERAL, 1), REASON_GDPR, 2) + values: _defineProperty(_defineProperty({}, DISABLE_REASONS.REASON_GENERAL, 1), DISABLE_REASONS.REASON_GDPR, 2) }, pending: { key: 'p', @@ -1618,7 +1522,7 @@ function _getTimeSpent() /*: number*/{ */ function _getSessionLength() /*: number*/{ var lastActive = _activityState.lastActive; - var withinWindow = timePassed(lastActive, Date.now()) < config.sessionWindow; + var withinWindow = timePassed(lastActive, Date.now()) < sdk_config.sessionWindow; var withOffset = _active || !_active && withinWindow; return (_activityState.sessionLength || 0) + (withOffset ? _getOffset() : 0); } @@ -1985,39 +1889,21 @@ var QuickStorage = /*#__PURE__*/function () { }]); }(); /* harmony default export */ const quick_storage = (new QuickStorage()); -;// CONCATENATED MODULE: ./src/sdk/preferences.js - +;// CONCATENATED MODULE: ./src/sdk/preferences.ts -/*:: type SdkDisabledT = {| - reason: REASON_GENERAL | REASON_GDPR, - pending: boolean -|}*/ -/*:: type ThirdPartySharingDisabledT = {| - reason: REASON_GENERAL, - pending: boolean -|}*/ -/*:: type PreferencesT = {| - thirdPartySharingDisabled?: ?ThirdPartySharingDisabledT, - sdkDisabled?: ?SdkDisabledT -|}*/ /** * Name of the store used by preferences - * - * @type {string} - * @private */ var _storeName /*: string*/ = storage_scheme.preferences.name; /** * Local reference to be used for recovering preserved state - * - * @type {Object} - * @private */ -var _preferences /*: ?PreferencesT*/ = _getPreferences(); +var _preferences /*: PreferencesT | null*/ = null; +_preferences = _getPreferences(); /** * Get preferences stored in the localStorage @@ -2025,7 +1911,7 @@ var _preferences /*: ?PreferencesT*/ = _getPreferences(); * @returns {Object} * @private */ -function _getPreferences() /*: ?PreferencesT*/{ +function _getPreferences() /*: PreferencesT | null*/{ if (!_preferences) { _setPreferences(); } @@ -2046,9 +1932,9 @@ function _setPreferences() /*: void*/{ * * @returns {Object|null} */ -function getDisabled() /*: ?SdkDisabledT*/{ +function getDisabled() /*: SdkDisabledT | null*/{ var preferences = _getPreferences(); - return preferences ? preferences.sdkDisabled : null; + return preferences && preferences.sdkDisabled || null; } /** @@ -2056,7 +1942,7 @@ function getDisabled() /*: ?SdkDisabledT*/{ * * @param {Object|null} value */ -function setDisabled(value /*: ?SdkDisabledT*/) /*: void*/{ +function setDisabled(value /*: SdkDisabledT | null*/) /*: void*/{ var sdkDisabled = value ? _objectSpread2({}, value) : null; quick_storage.stores[_storeName] = _objectSpread2(_objectSpread2({}, _getPreferences()), {}, { sdkDisabled: sdkDisabled @@ -2064,37 +1950,12 @@ function setDisabled(value /*: ?SdkDisabledT*/) /*: void*/{ _setPreferences(); } -/** - * Get current third-party-sharing disabled state - * - * @returns {Object} - * @private - */ -function getThirdPartySharing() /*: ?ThirdPartySharingDisabledT*/{ - var preferences = _getPreferences(); - return preferences ? preferences.thirdPartySharingDisabled : null; -} - -/** - * Set current third-party-sharing disabled state - * - * @param {Object=} value - * @private - */ -function setThirdPartySharing(value /*: ?ThirdPartySharingDisabledT*/) /*: void*/{ - var thirdPartySharingDisabled = value ? _objectSpread2({}, value) : null; - quick_storage.stores[_storeName] = _objectSpread2(_objectSpread2({}, _getPreferences()), {}, { - thirdPartySharingDisabled: thirdPartySharingDisabled - }); - _setPreferences(); -} - /** * Reload current preferences from localStorage if changed outside of current scope (e.g. tab) */ function reload() /*: void*/{ var stored /*: PreferencesT*/ = quick_storage.stores[_storeName] || {}; - var sdkDisabled /*: ?SdkDisabledT*/ = (_preferences || {}).sdkDisabled || null; + var sdkDisabled /*: SdkDisabledT | null*/ = (_preferences || {}).sdkDisabled || null; if (stored.sdkDisabled && !sdkDisabled) { publish('sdk:shutdown'); } @@ -2105,7 +1966,7 @@ function reload() /*: void*/{ * Recover preferences from memory if storage was lost */ function recover() /*: void*/{ - var stored /*: ?PreferencesT*/ = quick_storage.stores[_storeName]; + var stored /*: PreferencesT*/ = quick_storage.stores[_storeName]; if (!stored) { quick_storage.stores[_storeName] = _objectSpread2({}, _preferences); } @@ -2931,6 +2792,27 @@ _defineProperty(IndexedDBWrapper, "dbValidationName", 'validate-db-openable'); */ _defineProperty(IndexedDBWrapper, "isSupportedPromise", null); +;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js + +function _arrayWithoutHoles(arr) { + if (Array.isArray(arr)) return _arrayLikeToArray(arr); +} +;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/iterableToArray.js +function _iterableToArray(iter) { + if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); +} +;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js +function _nonIterableSpread() { + throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); +} +;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js + + + + +function _toConsumableArray(arr) { + return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); +} ;// CONCATENATED MODULE: ./src/sdk/storage/localstorage.ts @@ -3928,6 +3810,9 @@ function _encodeParam(_ref3 /*:: */) /*: string*/{ if (isObject(value)) { encodedValue = encodeURIComponent(JSON.stringify(value) || ''); } + if (key === 'granular_third_party_sharing_options' || key === 'partner_sharing_settings') { + return [encodedKey, encodedValue].join(encodeURIComponent('=')); + } return [encodedKey, encodedValue].join('='); } @@ -3961,7 +3846,7 @@ function _encodeParams(params /*: ParamsWithAttemptsT*/, defaultParams /*: Defau return "_".concat($1.toLowerCase()); }); }; - var allParams = entries(_objectSpread2(_objectSpread2(_objectSpread2({}, config.getBaseParams()), defaultParams), params)).map(function (_ref5 /*:: */) { + var allParams = entries(_objectSpread2(_objectSpread2(_objectSpread2({}, sdk_config.getBaseParams()), defaultParams), params)).map(function (_ref5 /*:: */) { var _ref6 = _slicedToArray(_ref5 /*:: */, 2), key = _ref6[0], value = _ref6[1]; @@ -4125,7 +4010,6 @@ function _interceptSuccess(result /*: HttpSuccessResponseT*/, url) /*: HttpSucce var isGdprRequest = isRequest(url, 'gdpr_forget_device'); var isAttributionRequest = isRequest(url, 'attribution'); var isSessionRequest = isRequest(url, 'session'); - var isThirdPartySharingOptOutRequest = isRequest(url, 'disable_third_party_sharing'); var optedOut = result.tracking_state === 'opted_out'; if (!isGdprRequest && optedOut) { publish('sdk:gdpr-forget-me'); @@ -4137,10 +4021,6 @@ function _interceptSuccess(result /*: HttpSuccessResponseT*/, url) /*: HttpSucce if (isSessionRequest) { publish('session:finished', result); } - if (isThirdPartySharingOptOutRequest) { - publish('sdk:third-party-sharing-opt-out'); - return result; - } return result; } @@ -4332,11 +4212,82 @@ function listeners_destroy() /*: void*/{ off(window, 'offline', _handleOffline); } +;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js + +function _createForOfIteratorHelper(o, allowArrayLike) { + var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; + if (!it) { + if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { + if (it) o = it; + var i = 0; + var F = function F() {}; + return { + s: F, + n: function n() { + if (i >= o.length) return { + done: true + }; + return { + done: false, + value: o[i++] + }; + }, + e: function e(_e) { + throw _e; + }, + f: F + }; + } + throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); + } + var normalCompletion = true, + didErr = false, + err; + return { + s: function s() { + it = it.call(o); + }, + n: function n() { + var step = it.next(); + normalCompletion = step.done; + return step; + }, + e: function e(_e2) { + didErr = true; + err = _e2; + }, + f: function f() { + try { + if (!normalCompletion && it["return"] != null) it["return"](); + } finally { + if (didErr) throw err; + } + } + }; +} ;// CONCATENATED MODULE: ./src/sdk/url-strategy.ts + +/*:: export interface UrlStrategyConfig { + /** The country or countries of data residence, or the endpoints to which you want to send SDK traffic. *-/ + domains: Array; + + /** Whether the source should prefix a subdomain. *-/ + useSubdomains: boolean; + + /** Whether the domain should be used for data residency. *-/ + isDataResidency?: boolean; +}*/ +function getDefaultUrlStrategyConfig(endpoints /*: Record*/) { + return { + domains: [endpoints.default, endpoints.world], + useSubdomains: true, + isDataResidency: false + }; +} var UrlStrategy = /*#__PURE__*/function (UrlStrategy) { UrlStrategy["Default"] = "default"; UrlStrategy["India"] = "india"; @@ -4354,53 +4305,111 @@ function incorrectOptionIgnoredMessage(higherPriority /*: string*/, lowerPriorit } /** - * Returns a map of base URLs or a list of endpoint names depending on SDK configuration + * In case if deprecated parameters or no urlStrategy provided returns the most appropriate UrlStrategyConfig, + * and `null` otherwise */ -function getEndpointPreference() /*: BaseUrlsMap | EndpointName[]*/{ - var _Config$getCustomConf = config.getCustomConfig(), +function transfromDeprecatedParamsToUrlStrategyConfig(endpoints /*: Record*/) /*: UrlStrategyConfig | null*/{ + var _Config$getCustomConf = sdk_config.getCustomConfig(), customUrl = _Config$getCustomConf.customUrl, urlStrategy = _Config$getCustomConf.urlStrategy, dataResidency = _Config$getCustomConf.dataResidency; if (customUrl) { // If custom URL is set then send all requests there + logger.warn('customUrl is deprecated, use urlStrategy instead'); if (dataResidency || urlStrategy) { incorrectOptionIgnoredMessage('customUrl', dataResidency ? 'dataResidency' : 'urlStrategy'); } return { - app: customUrl, - gdpr: customUrl + domains: [customUrl], + useSubdomains: false, + isDataResidency: false }; } if (dataResidency && urlStrategy) { incorrectOptionIgnoredMessage('dataResidency', 'urlStrategy'); } if (dataResidency) { - return [dataResidency]; + logger.warn('dataResidency is deprecated, use urlStrategy instead'); + return { + domains: [endpoints[dataResidency]], + useSubdomains: true, + isDataResidency: true + }; } - if (urlStrategy === UrlStrategy.India) { - return [UrlStrategy.India, UrlStrategy.Default]; + if (typeof urlStrategy === 'string') { + logger.warn('urlStrategy string literals (\'china\' and \'india\') are deprected, use UrlStartegyConfig instead'); + if (urlStrategy === UrlStrategy.India) { + return { + domains: [endpoints.india, endpoints.default], + useSubdomains: true, + isDataResidency: false + }; + } + if (urlStrategy === UrlStrategy.China) { + return { + domains: [endpoints.china, endpoints.default], + useSubdomains: true, + isDataResidency: false + }; + } } - if (urlStrategy === UrlStrategy.China) { - return [UrlStrategy.China, UrlStrategy.Default]; + if (!urlStrategy) { + return getDefaultUrlStrategyConfig(endpoints); } - return [UrlStrategy.Default, UrlStrategy.India, UrlStrategy.China]; + return null; } -var endpointMap /*: Record*/ = _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty({}, UrlStrategy.Default, ENDPOINTS.default), UrlStrategy.India, ENDPOINTS.india), UrlStrategy.China, ENDPOINTS.china), DataResidency.EU, ENDPOINTS.EU), DataResidency.TR, ENDPOINTS.TR), DataResidency.US, ENDPOINTS.US); -function getPreferredUrls(endpoints /*: Partial>*/) /*: BaseUrlsMap[]*/{ - var preference = getEndpointPreference(); - if (!Array.isArray(preference)) { - return [preference]; - } else { - var res = preference.map(function (strategy) { - return endpoints[strategy] || null; - }).filter(function (i) { - return /*: i is BaseUrlsMap*/!!i; - }); - return res; + +/** + * Checks if passed UrlStrategyConfig is valid and returns it, returns `DEFAULT_URL_STRATEGY_CONFIG` otherwise + */ +function validateUrlStrategyConfig(endpoints /*: Record*/) /*: UrlStrategyConfig*/{ + var _Config$getCustomConf2 = sdk_config.getCustomConfig(), + urlStrategy = _Config$getCustomConf2.urlStrategy; + if (urlStrategy && _typeof(urlStrategy) === 'object') { + var config = urlStrategy; + if (!config.domains || !Array.isArray(config.domains) || config.domains.length < 1) { + logger.warn('Invalid urlStartegy: `domains` should be a non-empty array'); + return getDefaultUrlStrategyConfig(endpoints); + } + return { + domains: config.domains, + useSubdomains: !!config.useSubdomains, + isDataResidency: !!config.isDataResidency + }; } + return getDefaultUrlStrategyConfig(endpoints); +} +function getUrlStrategyConfig(endpoints /*: Record*/) /*: UrlStrategyConfig*/{ + return transfromDeprecatedParamsToUrlStrategyConfig(endpoints) || validateUrlStrategyConfig(endpoints); +} +function getPreferredUrls(endpoints /*: Record*/) /*: BaseUrlsMap[]*/{ + var urlStrategyConfig /*: UrlStrategyConfig*/ = getUrlStrategyConfig(endpoints); + var urls = []; + + //if (urlStrategyConfig.isDataResidency) { } + var _iterator = _createForOfIteratorHelper(urlStrategyConfig.domains), + _step; + try { + for (_iterator.s(); !(_step = _iterator.n()).done;) { + var domain = _step.value; + var map = urlStrategyConfig.useSubdomains ? { + app: "".concat(BASE_URL_PREFIX).concat(domain), + gdpr: "".concat(GDPR_URL_PREFIX).concat(domain) + } : { + app: "".concat(BASE_URL_NO_SUB_DOMAIN_PREFIX).concat(domain), + gdpr: "".concat(BASE_URL_NO_SUB_DOMAIN_PREFIX).concat(domain) + }; + urls.push(map); + } + } catch (err) { + _iterator.e(err); + } finally { + _iterator.f(); + } + return urls; } function getBaseUrlsIterator() /*: BaseUrlsIterator*/{ - var endpoints /*: Partial>*/ = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : endpointMap; + var endpoints /*: Record*/ = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ENDPOINTS; var _urls = getPreferredUrls(endpoints); var _counter = 0; return { @@ -4920,17 +4929,10 @@ var Request = function Request() { }; }; /* harmony default export */ const request = (Request); -;// CONCATENATED MODULE: ./src/sdk/disable.js +;// CONCATENATED MODULE: ./src/sdk/disable.ts -/*:: type StatusT = 'on' | 'off' | 'paused'*/ -/*:: type ReasonT = REASON_GDPR | REASON_GENERAL*/ -/*:: type PendingT = boolean*/ -/*:: type ReasonMapT = {| - reason: ReasonT, - pending: PendingT -|}*/ /** * Get the disable action name depending on the reason * @@ -4939,7 +4941,7 @@ var Request = function Request() { * @private */ var _disableReason = function _disableReason(reason /*: ReasonT*/) { - return reason === REASON_GDPR ? 'GDPR disable' : 'disable'; + return reason === DISABLE_REASONS.REASON_GDPR ? 'GDPR disable' : 'disable'; }; /** @@ -4974,17 +4976,19 @@ var _logMessages = function _logMessages(reason /*: ReasonT*/) { function _disable(_ref /*:: */, expectedAction /*: 'start' | 'finish'*/) /*: boolean*/{ var reason = _ref /*:: */.reason, pending = _ref /*:: */.pending; - var disabled = getDisabled() || {}; - var action = expectedAction === 'start' && disabled.pending ? 'start' : 'finish'; - var shouldNotStart = expectedAction === 'start' && disabled.reason; - var shouldNotFinish = expectedAction === 'finish' && disabled.reason && !disabled.pending; + var _ref2 = getDisabled() || {}, + savedReason = _ref2.reason, + savedPending = _ref2.pending; + var action = expectedAction === 'start' && savedPending ? 'start' : 'finish'; + var shouldNotStart = expectedAction === 'start' && savedReason; + var shouldNotFinish = expectedAction === 'finish' && savedReason && !savedPending; if (shouldNotStart || shouldNotFinish) { - logger.log(_logMessages(disabled.reason)[action].inProgress); + logger.log(_logMessages(savedReason)[action].inProgress); return false; } logger.log(_logMessages(reason)[action].done); setDisabled({ - reason: reason || REASON_GENERAL, + reason: reason || DISABLE_REASONS.REASON_GENERAL, pending: pending }); return true; @@ -4997,11 +5001,11 @@ function _disable(_ref /*:: */, expectedAction /*: 'start' | 'finish'*/) /*: boo * @param {boolean} pending * @private */ -function disable(reason /*: ?ReasonT*/) /*: boolean*/{ - var pending /*: ?PendingT*/ = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; +function disable(reason /*: ReasonT*/) /*: boolean*/{ + var pending = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; return _disable({ reason: reason, - pending: pending || false + pending: pending }, 'start'); } @@ -5022,12 +5026,13 @@ function finish(reason /*: ReasonT*/) /*: boolean*/{ * Enable sdk if not GDPR forgotten */ function restore() /*: boolean*/{ - var disabled = getDisabled() || {}; - if (disabled.reason === REASON_GDPR) { + var _ref3 = getDisabled() || {}, + reason = _ref3.reason; + if (reason === DISABLE_REASONS.REASON_GDPR) { logger.log('Adjust SDK is disabled due to GDPR-Forget-Me request and it can not be re-enabled'); return false; } - if (!disabled.reason) { + if (!reason) { logger.log('Adjust SDK is already enabled'); return false; } @@ -5045,10 +5050,12 @@ function restore() /*: boolean*/{ * @returns {string} */ function disable_status() /*: StatusT*/{ - var disabled = getDisabled() || {}; - if (disabled.reason === REASON_GENERAL || disabled.reason === REASON_GDPR && !disabled.pending) { + var _ref4 = getDisabled() || {}, + reason = _ref4.reason, + pending = _ref4.pending; + if (reason === DISABLE_REASONS.REASON_GENERAL || reason === DISABLE_REASONS.REASON_GDPR && !pending) { return 'off'; - } else if (disabled.reason === REASON_GDPR && disabled.pending) { + } else if (reason === DISABLE_REASONS.REASON_GDPR && pending) { return 'paused'; } return 'on'; @@ -5088,9 +5095,7 @@ function _intercept(stored /*: ActivityStateMapT*/) /*: InterceptT*/{ }; } if (stored.uuid === 'unknown') { - disable({ - reason: REASON_GDPR - }); + disable(DISABLE_REASONS.REASON_GDPR); activity_state.destroy(); return { exists: true, @@ -5129,9 +5134,11 @@ function start() /*: Promise*/{ _starting = false; return activityState; }); - }).then(function (activityState /*: ActivityStateMapT*/) { + }).then(function (activityState /*: ActivityStateMapT | null*/) { if (activityState) { publish(PUB_SUB_EVENTS.WEB_UUID_CREATED, activityState.uuid); + } else { + publish(PUB_SUB_EVENTS.WEB_UUID_CREATED, 'gdpr_forgotten'); } return activityState; }); @@ -5472,7 +5479,7 @@ function setOffline(state /*: boolean*/) /*: void*/{ * @returns {Promise} */ function _cleanUp() /*: Promise*/{ - var upperBound = Date.now() - config.requestValidityWindow; + var upperBound = Date.now() - sdk_config.requestValidityWindow; return storage.deleteBulk(queue_storeName, upperBound, 'upperBound'); } @@ -5845,7 +5852,7 @@ function _startTimer() /*: void*/{ _idInterval = setInterval(function () { activity_state.updateSessionOffset(); return persist(); - }, config.sessionTimerWindow); + }, sdk_config.sessionTimerWindow); } /** @@ -5902,7 +5909,7 @@ function _checkSession() /*: Promise*/{ var lastInterval = activityState.lastInterval; var isEnqueued = activityState.sessionCount > 0; var currentWindow = lastInterval * SECOND; - if (!isEnqueued || isEnqueued && currentWindow >= config.sessionWindow) { + if (!isEnqueued || isEnqueued && currentWindow >= sdk_config.sessionWindow) { return _trackSession(); } publish('attribution:check'); @@ -6060,7 +6067,7 @@ function attribution_destroy() /*: void*/{ attribution_request.clear(); } -;// CONCATENATED MODULE: ./src/sdk/gdpr-forget-device.js +;// CONCATENATED MODULE: ./src/sdk/gdpr-forget-device.ts @@ -6107,7 +6114,7 @@ function forget(force /*: boolean*/) /*: boolean*/{ logger.log(gdpr_forget_device_logMessages[sdkStatus]); return false; } - if (!config.isInitialised()) { + if (!sdk_config.isInitialised()) { logger.log(gdpr_forget_device_logMessages.pending); return true; } @@ -6125,7 +6132,7 @@ function forget(force /*: boolean*/) /*: boolean*/{ * @returns {boolean} */ function gdpr_forget_device_disable() { - return disable(REASON_GDPR, true); + return disable(DISABLE_REASONS.REASON_GDPR, true); } /** @@ -6134,7 +6141,7 @@ function gdpr_forget_device_disable() { * @returns {boolean} */ function gdpr_forget_device_finish() { - return finish(REASON_GDPR); + return finish(DISABLE_REASONS.REASON_GDPR); } /** @@ -6154,124 +6161,89 @@ function gdpr_forget_device_destroy() /*: void*/{ gdpr_forget_device_request.clear(); } -;// CONCATENATED MODULE: ./src/sdk/third-party-sharing.js +;// CONCATENATED MODULE: ./src/sdk/track-third-party-sharing.ts -/*:: type ThirdPartySharingStatusT = 'pending' | 'on' | 'off'*/ -/** - * Log messages used in different scenarios - * - * @type {Object} - * @private - */ -var third_party_sharing_logMessages = { - running: 'Adjust SDK is running pending third-party sharing opt-out request', - delayed: 'Adjust SDK will run third-party sharing opt-out request after initialisation', - pending: 'Adjust SDK already queued third-party sharing opt-out request', - off: 'Third-party sharing opt-out is already done', - start: { - inProgress: 'Third-party sharing opt-out has already started', - done: 'Third-party sharing opt-out is now started' - }, - finish: { - inProgress: 'Third-party sharing opt-out has already finished', - done: 'Third-party sharing opt-out is now finished' - } -}; -/** - * Get the status of the third-party sharing - * - * @returns {string} - * @private - */ -function _status() /*: ThirdPartySharingStatusT*/{ - var disabled = getThirdPartySharing() || {}; - if (disabled.reason) { - return disabled.pending ? 'pending' : 'off'; - } - return 'on'; -} - -/** - * Request third-party sharing opt-out request - * - * @param {boolean} force - * @returns {boolean} - */ -function optOut(force /*: boolean*/) { - var status = _status(); - if (!force && status !== 'on') { - logger.log(third_party_sharing_logMessages[status]); - return false; +/*:: export interface ThirdPartySharingOptions { + isEnabled: boolean; + granularOptions: Record>; + partnerSharingSettings: Record>; +}*/ +var ThirdPartySharing = /*#__PURE__*/function () { + function ThirdPartySharing(isEnabled /*: boolean*/) { + _classCallCheck(this, ThirdPartySharing); + _defineProperty(this, "_granularOptions", {}); + _defineProperty(this, "_partnerSharingSettings", {}); + if (typeof isEnabled !== 'boolean') { + logger.warn("isEnabled should be boolean, converting ".concat(isEnabled, " results ").concat(!!isEnabled)); + } + this._isEnabled = !!isEnabled; } - if (!config.isInitialised()) { - logger.log(third_party_sharing_logMessages.delayed); - return true; + return _createClass(ThirdPartySharing, [{ + key: "isEnabled", + get: function get() /*: boolean*/{ + return this._isEnabled; + } + }, { + key: "granularOptions", + get: function get() /*: Record>*/{ + return this._granularOptions; + } + }, { + key: "partnerSharingSettings", + get: function get() /*: Record>*/{ + return this._partnerSharingSettings; + } + }, { + key: "addGranularOption", + value: function addGranularOption(partnerName /*: string*/, key /*: string*/, value /*: string*/) { + if (!partnerName || !key || value === undefined) { + logger.error('Cannot add granular option, partnerName, key and value are mandatory'); + return; + } + var pair = _defineProperty({}, key, value); + if (this.granularOptions[partnerName]) { + this.granularOptions[partnerName] = _objectSpread2(_objectSpread2({}, this.granularOptions[partnerName]), pair); + } else { + this.granularOptions[partnerName] = pair; + } + } + }, { + key: "addPartnerSharingSetting", + value: function addPartnerSharingSetting(partnerName /*: string*/, key /*: string*/, value /*: boolean*/) { + if (!partnerName || !key || value === undefined) { + logger.error('Cannot add partner sharing setting, partnerName, key and value are mandatory'); + return; + } + var pair = _defineProperty({}, key, value); + if (this.partnerSharingSettings[partnerName]) { + this.partnerSharingSettings[partnerName] = _objectSpread2(_objectSpread2({}, this.partnerSharingSettings[partnerName]), pair); + } else { + this.partnerSharingSettings[partnerName] = pair; + } + } + }]); +}(); +function trackThirdPartySharing(adjustThirdPartySharing /*: ThirdPartySharingOptions*/) { + if (!adjustThirdPartySharing || adjustThirdPartySharing.isEnabled === undefined) { + logger.error('Can not track third-party sharing without parameters'); + return; } + var params = { + sharing: adjustThirdPartySharing.isEnabled ? 'enable' : 'disable', + granularThirdPartySharingOptions: adjustThirdPartySharing.granularOptions, + partnerSharingSettings: adjustThirdPartySharing.partnerSharingSettings + }; push({ - url: '/disable_third_party_sharing', - method: 'POST' + url: '/third_party_sharing', + method: 'POST', + params: params }); - return true; } - -/** - * Start or finish thrid-party sharing disable process - * - * @param {boolean} pending - * @param {string} expectedAction - * @returns {boolean} - * @private - */ -function third_party_sharing_disable(pending /*: boolean*/, expectedAction /*: 'start' | 'finish'*/) /*: boolean*/{ - var disabled = getThirdPartySharing() || {}; - var action = expectedAction === 'start' && pending ? 'start' : 'finish'; - var shouldNotStart = expectedAction === 'start' && disabled.reason; - var shouldNotFinish = expectedAction === 'finish' && disabled.reason && !disabled.pending; - if (shouldNotStart || shouldNotFinish) { - logger.log(third_party_sharing_logMessages[action].inProgress); - return false; - } - logger.log(third_party_sharing_logMessages[action].done); - setThirdPartySharing({ - reason: REASON_GENERAL, - pending: pending - }); - return true; -} - -/** - * Start the third-party sharing disable process - * - * @returns {boolean} - */ -function sdk_third_party_sharing_disable() /*: boolean*/{ - return third_party_sharing_disable(true, 'start'); -} - -/** - * Finalize the third-party sharing process - * - * @returns {boolean} - */ -function third_party_sharing_finish() { - return third_party_sharing_disable(false, 'finish'); -} - -/** - * Check if there s pending third-party sharing opt-out request - */ -function third_party_sharing_check() /*: void*/{ - if (_status() === 'pending') { - logger.log(third_party_sharing_logMessages.running); - optOut(true); - } -} - ;// CONCATENATED MODULE: ./src/sdk/scheduler.js /*:: type TaskT = {| @@ -6422,7 +6394,7 @@ function _getEventDeduplicationIds() /*: Promise>*/{ * @private */ function _pushEventDeduplicationId(id /*: string*/) /*: Promise*/{ - var customLimit = config.getCustomConfig().eventDeduplicationListLimit; + var customLimit = sdk_config.getCustomConfig().eventDeduplicationListLimit; var limit = customLimit > 0 ? customLimit : DEFAULT_EVENT_DEDUPLICATION_LIST_LIMIT; return storage.count(event_storeName).then(function (count) { var chain = Promise.resolve(); @@ -6618,7 +6590,7 @@ function initSdk() /*: void*/{ logger.error('You already initiated your instance'); return; } - if (config.hasMissing(options)) { + if (sdk_config.hasMissing(options)) { return; } _isInitialising = true; @@ -6788,7 +6760,7 @@ function switchBackToOnlineMode() /*: void*/{ */ function stop() /*: void*/{ var done = disable(); - if (done && config.isInitialised()) { + if (done && sdk_config.isInitialised()) { _shutdown(); } } @@ -6812,17 +6784,35 @@ function gdprForgetMe() /*: void*/{ return; } done = gdpr_forget_device_disable(); - if (done && config.isInitialised()) { + if (done && sdk_config.isInitialised()) { _pause(); } } /** * Disable third party sharing + * + * @deprecated Use {@link trackThirdPartySharing} instead */ function disableThirdPartySharing() /*: void*/{ - _preCheck('disable third-party sharing', _handleDisableThirdPartySharing, { - schedule: true + main_trackThirdPartySharing({ + isEnabled: false + }); +} + +/** + * Track third party sharing + */ +function main_trackThirdPartySharing(adjustThirdPartySharing /*: ThirdPartySharingOptions*/) /*: void*/{ + var callback = function callback() { + return activity_state.waitForWebUUID() // ensure we have web_uuid to be sent with request + .then(function () { + return trackThirdPartySharing(adjustThirdPartySharing); + }); + }; + _preCheck('third-party sharing', callback, { + schedule: false, + optionalInit: true }); } @@ -6841,19 +6831,6 @@ function hideSmartBanner() /*: void*/{ logger.error('function `hideSmartBanner` is deprecated'); } -/** - * Handle third party sharing disable - * - * @private - */ -function _handleDisableThirdPartySharing() /*: void*/{ - var done = optOut(); - if (!done) { - return; - } - sdk_third_party_sharing_disable(); -} - /** * Handle GDPR-Forget-Me response * @@ -6873,7 +6850,7 @@ function _handleGdprForgetMe() /*: void*/{ * @private */ function _isInitialised() /*: boolean*/{ - return _isInitialising || config.isInitialised(); + return _isInitialising || sdk_config.isInitialised(); } /** @@ -6906,7 +6883,7 @@ function _shutdown(async) /*: void*/{ identity_destroy(); listeners_destroy(); storage.destroy(); - config.destroy(); + sdk_config.destroy(); } /** @@ -6933,9 +6910,6 @@ function main_continue(activityState /*: ActivityStateMapT*/) /*: Promise* logger.log("Adjust SDK is starting with web_uuid set to ".concat(activityState.uuid)); var isInstalled = activity_state.current.installed; gdpr_forget_device_check(); - if (!isInstalled) { - third_party_sharing_check(); - } var sdkStatus = disable_status(); var message = function message(rest) { return "Adjust SDK start has been interrupted ".concat(rest); @@ -6968,7 +6942,6 @@ function main_continue(activityState /*: ActivityStateMapT*/) /*: Promise* _isStarted = true; if (isInstalled) { _handleSdkInstalled(); - third_party_sharing_check(); } }); } @@ -7026,14 +6999,13 @@ function _start(options /*: InitOptionsT*/) /*: void*/{ logger.log('Adjust SDK is disabled, can not start the sdk'); return; } - config.set(options); + sdk_config.set(options); register(); subscribe('sdk:installed', _handleSdkInstalled); subscribe('sdk:shutdown', function () { return _shutdown(true); }); subscribe('sdk:gdpr-forget-me', _handleGdprForgetMe); - subscribe('sdk:third-party-sharing-opt-out', third_party_sharing_finish); subscribe('attribution:check', function (e, result) { return check(result); }); @@ -7134,6 +7106,8 @@ var Adjust = { restart: restart, gdprForgetMe: gdprForgetMe, disableThirdPartySharing: disableThirdPartySharing, + trackThirdPartySharing: main_trackThirdPartySharing, + ThirdPartySharing: ThirdPartySharing, initSmartBanner: initSmartBanner, showSmartBanner: showSmartBanner, hideSmartBanner: hideSmartBanner, diff --git a/dist/adjust-latest.min.js b/dist/adjust-latest.min.js index 6b38953..3be11e3 100644 --- a/dist/adjust-latest.min.js +++ b/dist/adjust-latest.min.js @@ -1 +1 @@ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.Adjust=t():e.Adjust=t()}(self,(()=>(()=>{"use strict";var e={d:(t,n)=>{for(var r in n)e.o(n,r)&&!e.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:n[r]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t)},t={};function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}function r(e){var t=function(e,t){if("object"!=n(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var o=r.call(e,t||"default");if("object"!=n(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==n(t)?t:t+""}function o(e,t,n){return(t=r(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function s(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);nyr});var f=1e3,m=60*f,p=60*m,h=24*p,v="general",g="gdpr",y={TRANSACTION_ERROR:"XHR transaction failed due to an error",SERVER_MALFORMED_RESPONSE:"Response from server is malformed",SERVER_INTERNAL_ERROR:"Internal error occurred on the server",SERVER_CANNOT_PROCESS:"Server was not able to process the request, probably due to error coming from the client",NO_CONNECTION:"No internet connectivity",SKIP:"Skipping slower attempt",MISSING_URL:"Url is not provided"},b={NO_STORAGE:"noStorage",INDEXED_DB:"indexedDB",LOCAL_STORAGE:"localStorage"},k={endpointName:"Default",app:"https://app.adjust.com",gdpr:"https://gdpr.adjust.com"},w={endpointName:"Indian",app:"https://app.adjust.net.in",gdpr:"https://gdpr.adjust.net.in"},P={endpointName:"Chinese",app:"https://app.adjust.world",gdpr:"https://gdpr.adjust.world"},S={endpointName:"EU",app:"https://app.eu.adjust.com",gdpr:"https://gdpr.eu.adjust.com"},D={endpointName:"TR",app:"https://app.tr.adjust.com",gdpr:"https://gdpr.tr.adjust.com"},I={endpointName:"US",app:"https://app.us.adjust.com",gdpr:"https://gdpr.us.adjust.com"},x={WEB_UUID_CREATED:"activity:web_uuid",ATTRIBUTION_RECEIVED:"activity:attribution"};function N(e){return!Object.keys(e).length&&e.constructor===Object}function O(e){return"object"===n(e)&&null!==e&&!(e instanceof Array)}function A(e){try{return O(JSON.parse(e))}catch(e){return!1}}function E(e,t,n){function r(e){return Array.isArray(t)?t.every((function(t){return e[t]===n[t]})):e[t]===n}for(var o=0;o0&&void 0!==arguments[0]?arguments[0]:[]).reduce((function(e,t){return a(a({},e),{},o({},t.key,t.value))}),{})}function C(){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:[]).filter((function(t){return-1!==e.indexOf(t)}))}function R(e,t){return new RegExp("\\/".concat(t,"(\\/.*|\\?.*){0,1}$")).test(e)}function T(e,t){var n=l(t,2),r=n[0],i=n[1];return a(a({},e),{},o({},r,i))}function _(e){return Object.keys(e).map((function(t){return[t,e[t]]}))}function B(e){return Object.keys(e).map((function(t){return e[t]}))}function U(e){return O(e)?!N(e):!!e||0===e}function K(){try{var e=(new Date).toString(),t=window.localStorage;t.setItem(e,e);var n=t.getItem(e)===e;return t.removeItem(e),!(!n||!t)}catch(e){return!1}}const L={namespace:"adjust-sdk",version:"5.6.0",env:"production"};var q="error",M="warning",F="info",G="verbose",W=o(o(o(o(o({},"none",-1),q,0),M,1),F,2),G,3),V={log:" ",info:" ",warn:" ",error:""},H={development:G,production:q,test:G},Y=J(),z="";function J(){return H[L.env]||q}function Q(e,t){var n;if(!(W[Y]2?u-2:0),c=2;c2&&void 0!==arguments[2]?arguments[2]:[]).map((function(n){return Ee(e,t,n)}))}function Ce(e,t,n){var r=Se[t][Te(e,Oe.right)],o=r.fields[r.keyPath],i=n instanceof Array?n.slice():[n],a=(fe(o)?o.composite:[r.keyPath]).map((function(e,t){var n=r.fields[e];return Ae(le(n)?n.values:null,i[t])}));return 1===a.length?a[0]:a}function Re(e){return Se.values[e]||e}function Te(e,t){return(Se.storeNames[t][e]||{}).name||e}function _e(e,t){return{name:t.name,message:t.message.replace('"'.concat(e,'"'),Te(e,Oe.right))}}function Be(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Ue(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:1,n=e+"",r=1;r<=t;r+=1)e0?"-":"+")+Le(Math.floor(Math.abs(t)/60))+Le(Math.abs(t)%60)}(t);return"".concat(n,"T").concat(r,"Z").concat(o)}function Me(e,t){return isNaN(e)||isNaN(t)?0:Math.abs(t-e)}var Fe={},Ge=[];function We(e,t){var n="id"+Math.random().toString(36).substring(2,16),r={id:n,cb:t};return Fe[e]||(Fe[e]=[]),Fe[e].push(r),n}function Ve(e,t){Fe[e]&&Fe[e].forEach((function(n){"function"==typeof n.cb&&Ge.push(setTimeout((function(){return n.cb(e,t)})))}))}var He={},Ye=!1,ze=!1;function Je(){He=Ye?a({},arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}):{}}function Qe(){Ye&&(He.lastInterval=function(){var e=He.lastActive;if(e)return Math.round(Me(e,Date.now())/f);return-1}(),He.lastActive=Date.now())}function Xe(e){He=a(a({},He),e)}function Ze(){ze=!0}function $e(){var e=He.lastActive;return Math.round(Me(e,Date.now())/f)}function et(){return(He.timeSpent||0)+(ze?$e():0)}function tt(){var e=Me(He.lastActive,Date.now())=0?He.lastInterval:0,n={timeSpent:He.timeSpent||0,sessionLength:He.sessionLength||0,sessionCount:He.sessionCount||1,lastInterval:t||0};return e&&R(e,"event")&&(n.eventCount=He.eventCount),n},updateParams:function(e,t){if(Ye){var n={};n.timeSpent=et(),n.sessionLength=tt(),R(e,"session")&&(n.sessionCount=(He.sessionCount||0)+1),R(e,"event")&&(n.eventCount=(He.eventCount||0)+1),Xe(n),t||Qe()}},updateInstalled:function(){Ye&&(He.installed||Xe({installed:!0}))},updateSessionOffset:nt,updateSessionLength:function(){Ye&&(Xe({sessionLength:tt()}),Qe())},resetSessionOffset:function(){Ye&&Xe({timeSpent:0,sessionLength:0})},updateLastActive:Qe,destroy:function(){He={},Ye=!1,ze=!1},getAttribution:function(){return Ye?He.attribution?He.attribution:(Z.log("No attribution data yet"),null):null},getWebUUID:function(){return Ye?He.uuid:null},waitForAttribution:function(){return He.attribution?Promise.resolve(He.attribution):new Promise((function(e){return We(x.ATTRIBUTION_RECEIVED,(function(t,n){return e(n)}))}))},waitForWebUUID:function(){return He.uuid?Promise.resolve(He.uuid):new Promise((function(e){return We(x.WEB_UUID_CREATED,(function(t,n){return e(n)}))}))}};var ot=function(){return Ke((function e(){Be(this,e),o(this,"items",{})}),[{key:"getItem",value:function(e){return Object.prototype.hasOwnProperty.call(this.items,e)?this.items[e]:null}},{key:"removeItem",value:function(e){delete this.items[e]}},{key:"setItem",value:function(e,t){this.items[e]=t}}])}();const it=new(function(){return Ke((function e(){var t=this;Be(this,e),o(this,"defaultName",L.namespace),o(this,"storageName",this.defaultName),o(this,"storeNames",Se.storeNames.left),this.storesMap={},K()?this.storage=window.localStorage:this.storage=new ot;var n=this.read.bind(this),r=this.write.bind(this);B(this.storeNames).forEach((function(e){var o=e.name;Object.defineProperty(t.storesMap,o,{get:function(){return n(o)},set:function(e){r(o,e)}})})),Object.freeze(this.storesMap)}),[{key:"read",value:function(e){var t=this.storage.getItem("".concat(this.storageName,".").concat(e)),n=t?JSON.parse(t):null;return e===se.Preferences&&n?Ee(se.Preferences,Oe.right,n):n}},{key:"write",value:function(e,t){t?this.storage.setItem("".concat(this.storageName,".").concat(e),JSON.stringify(t instanceof Array?t:Ee(se.Preferences,Oe.left,t))):this.storage.removeItem("".concat(this.storageName,".").concat(e))}},{key:"clear",value:function(){this.deleteData()}},{key:"deleteData",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];B(this.storeNames).forEach((function(n){!t&&n.permanent||e.storage.removeItem("".concat(e.storageName,".").concat(n.name))}))}},{key:"setCustomName",value:function(e){var t=this;if(e&&e.length){var n="".concat(L.namespace,"-").concat(e);B(this.storeNames).forEach((function(e){var r=e.name,o=t.storage.getItem("".concat(t.storageName,".").concat(r));o&&t.storage.setItem("".concat(n,".").concat(r),o)})),this.deleteData(!0),this.storageName=n}}},{key:"stores",get:function(){return this.storesMap}}])}());var at=pe.preferences.name,ut=st();function st(){return ut||ct(),ut?a({},ut):null}function ct(){ut=it.stores[at]}function lt(){var e=st();return e?e.sdkDisabled:null}function dt(e){var t=e?a({},e):null;it.stores[at]=a(a({},st()),{},{sdkDisabled:t}),ct()}function ft(){var e=st();return e?e.thirdPartySharingDisabled:null}function mt(){var e=it.stores[at]||{},t=(ut||{}).sdkDisabled||null;e.sdkDisabled&&!t&&Ve("sdk:shutdown"),ct()}function pt(){it.stores[at]||(it.stores[at]=a({},ut))}var ht=function(e){return e.add="add",e.put="put",e.get="get",e.list="list",e.clear="clear",e.delete="delete",e}(ht||{}),vt=function(e){return e.readonly="readonly",e.readwrite="readwrite",e}(vt||{}),gt=function(){function e(){Be(this,e),o(this,"dbDefaultName",L.namespace),o(this,"dbName",this.dbDefaultName),o(this,"dbVersion",1),o(this,"indexedDbConnection",null),o(this,"notSupportedError",{name:"IDBNotSupported",message:"IndexedDB is not supported"}),o(this,"databaseOpenError",{name:"CannotOpenDatabaseError",message:"Cannot open a database"}),o(this,"noConnectionError",{name:"NoDatabaseConnection",message:"Cannot open a transaction"});var t=e.getIndexedDB();if(!t)throw this.notSupportedError;this.idbFactory=t}return Ke(e,[{key:"setCustomName",value:function(e){return e&&e.length>0?(this.dbName="".concat(L.namespace,"-").concat(e),this.migrateDb(this.dbDefaultName,this.dbName)):Promise.resolve()}},{key:"openDatabase",value:function(t,n,r){var o=this;return e.isSupported().then((function(e){return e?new Promise((function(e,i){var a=o.idbFactory.open(t,r);n&&(a.onupgradeneeded=function(e){return n(e,i)}),a.onsuccess=function(t){var n=t.target.result;n?e(n):i(o.databaseOpenError)},a.onerror=i})):Promise.reject(o.notSupportedError)}))}},{key:"databaseExists",value:function(e){var t=this;return new Promise((function(n){var r=!0;t.openDatabase(e,(function(){r=!1})).then((function(n){if(n.close(),!r)return t.deleteDatabaseByName(e)})).then((function(){return n(r)}))}))}},{key:"cloneData",value:function(e,t){var n=this;return B(Se.storeNames.left).map((function(e){return e.name})).filter((function(e){return"p"!==e})).map((function(r){return function(){return o=r,i=n.indexedDbConnection,n.indexedDbConnection=e,n.getAll(o).then((function(e){if(n.indexedDbConnection=t,!(e.length<1))return n.addBulk(o,e,!0)})).then((function(){n.indexedDbConnection=i}));var o,i}})).reduce((function(e,t){return e.then(t)}),Promise.resolve())}},{key:"migrateDb",value:function(e,t){var n=this;return this.databaseExists(e).then((function(r){return r?Promise.all([n.openDatabase(e,n.handleUpgradeNeeded,n.dbVersion),n.openDatabase(t,n.handleUpgradeNeeded,n.dbVersion)]).then((function(t){var r=l(t,2),o=r[0],i=r[1];return n.cloneData(o,i).then((function(){return n.indexedDbConnection=i,o.close(),n.deleteDatabaseByName(e)}))})).then((function(){return Z.info("Database migration finished")})):n.openDatabase(t,n.handleUpgradeNeeded,n.dbVersion).then((function(e){n.indexedDbConnection=e}))}))}},{key:"handleUpgradeNeeded",value:function(e,t){var n=e.target.result;e.target.transaction.onerror=t,e.target.transaction.onabort=t;var r=Se.storeNames.left,o=rt.current||{},i=o&&!N(o);_(r).filter((function(e){return!l(e,2)[1].permanent})).forEach((function(e){var t=l(e,2),r=t[0],a=t[1].name,u=Se.right[r],s=n.createObjectStore(a,{keyPath:u.keyPath,autoIncrement:u.autoIncrement||!1});if(u.index&&s.createIndex("".concat(u.index,"Index"),u.index),a===ue.ActivityState&&i)return s.add(Ee(r,Oe.left,o)),void Z.info("Activity state has been recovered");var c=it.stores[a];c&&(c.forEach((function(e){return s.add(e)})),Z.info("Migration from localStorage done for ".concat(r," store")))})),pt(),it.clear()}},{key:"open",value:function(){var e=this;return this.indexedDbConnection?Promise.resolve({success:!0}):this.openDatabase(this.dbName,this.handleUpgradeNeeded,this.dbVersion).then((function(t){return e.indexedDbConnection=t,e.indexedDbConnection.onclose=function(){return e.destroy},{success:!0}}))}},{key:"getTransactionStore",value:function(e,t,n){var r,o=e.storeName,i=e.mode,a=n.transaction([o],i),u=a.objectStore(o),s=Se.right[Te(o,Oe.right)];return s.index&&(r=u.index("".concat(s.index,"Index"))),a.onerror=t,a.onabort=t,{transaction:a,store:u,index:r,options:s}}},{key:"overrideError",value:function(e,t){var n=t.target.error;return e({name:n.name,message:n.message})}},{key:"getCompositeKeys",value:function(e){var t=e.fields[e.keyPath];return fe(t)?t.composite:null}},{key:"targetIsObject",value:function(e){return O(e)}},{key:"prepareTarget",value:function(e,t,n){if(n===ht.clear||!t)return null;var r=this.getCompositeKeys(e);return-1!==[ht.add,ht.put].indexOf(n)?this.targetIsObject(t)?r?a(o({},e.keyPath,r.map((function(e){return t[e]})).join("")),t):t:null:t instanceof Array?t.join(""):t}},{key:"prepareResult",value:function(e,t){var n=this.getCompositeKeys(e);return n&&this.targetIsObject(t)?n.map((function(e){return t[e]})):null}},{key:"initRequest",value:function(e){var t=this,n=e.storeName,r=e.target,o=void 0===r?null:r,i=e.action,a=e.mode,u=void 0===a?vt.readonly:a;return this.open().then((function(){return new Promise((function(e,r){if(t.indexedDbConnection){var a=t.getTransactionStore({storeName:n,mode:u},r,t.indexedDbConnection),s=a.store,c=a.options,l=s[i](t.prepareTarget(c,o,i)),d=t.prepareResult(c,o);l.onsuccess=function(){i!==ht.get||l.result?e(d||l.result||o):r({name:"NotRecordFoundError",message:'Requested record not found in "'.concat(n,'" store')})},l.onerror=function(e){return t.overrideError(r,e)}}else r(t.noConnectionError)}))}))}},{key:"initBulkRequest",value:function(e){var t=this,n=e.storeName,r=e.target,o=e.action,i=e.mode,a=void 0===i?vt.readwrite:i;return!r||r&&!r.length?Promise.reject({name:"NoTargetDefined",message:"No array provided to perform ".concat(o,' bulk operation into "').concat(n,'" store')}):this.open().then((function(){return new Promise((function(e,i){if(t.indexedDbConnection){var u=t.getTransactionStore({storeName:n,mode:a},i,t.indexedDbConnection),s=u.transaction,c=u.store,l=u.options,d=new Array,f=r[0];s.oncomplete=function(){return e(d)};!function e(n){n.onerror=function(e){return t.overrideError(i,e)},n.onsuccess=function(){d.push(t.prepareResult(l,f)||n.result),f=r[d.length],d.length1&&void 0!==arguments[1]&&arguments[1];return this.openCursor({storeName:e,action:ht.list,firstOnly:t})}},{key:"getFirst",value:function(e){return this.getAll(e,!0).then((function(e){return e.length?e[0]:void 0}))}},{key:"getItem",value:function(e,t){return this.initRequest({storeName:e,target:t,action:ht.get})}},{key:"filterBy",value:function(e,t){var n=IDBKeyRange.only(t);return this.openCursor({storeName:e,action:ht.list,range:n})}},{key:"addItem",value:function(e,t){return this.initRequest({storeName:e,target:t,action:ht.add,mode:vt.readwrite})}},{key:"addBulk",value:function(e,t,n){return this.initBulkRequest({storeName:e,target:t,action:n?ht.put:ht.add,mode:vt.readwrite})}},{key:"updateItem",value:function(e,t){return this.initRequest({storeName:e,target:t,action:ht.put,mode:vt.readwrite})}},{key:"deleteItem",value:function(e,t){return this.initRequest({storeName:e,target:t,action:ht.delete,mode:vt.readwrite})}},{key:"deleteBulk",value:function(e,t,n){var r=n?IDBKeyRange[n](t):IDBKeyRange.only(t);return this.openCursor({storeName:e,action:ht.delete,range:r,mode:vt.readwrite})}},{key:"trimItems",value:function(e,t){var n=this,r=Se.right[Te(e,Oe.right)];return this.getAll(e).then((function(e){return e.length?e[t-1]:null})).then((function(t){return t?n.deleteBulk(e,t[r.keyPath],xe.UpperBound):[]}))}},{key:"count",value:function(e){var t=this;return this.open().then((function(){return new Promise((function(n,r){if(t.indexedDbConnection){var o=t.getTransactionStore({storeName:e,mode:vt.readonly},r,t.indexedDbConnection).store.count();o.onsuccess=function(){return n(o.result)},o.onerror=function(e){return t.overrideError(r,e)}}else r(t.noConnectionError)}))}))}},{key:"clear",value:function(e){return this.initRequest({storeName:e,action:ht.clear,mode:vt.readwrite})}},{key:"destroy",value:function(){this.indexedDbConnection&&this.indexedDbConnection.close(),this.indexedDbConnection=null}},{key:"deleteDatabase",value:function(){return this.destroy(),this.deleteDatabaseByName(this.dbName)}}],[{key:"tryOpen",value:function(t){return new Promise((function(n){try{var r=t.open(e.dbValidationName);r.onsuccess=function(){r.result.close(),t.deleteDatabase(e.dbValidationName),n(!0)},r.onerror=function(){return n(!1)}}catch(e){n(!1)}}))}},{key:"isSupported",value:function(){if(e.isSupportedPromise)return e.isSupportedPromise;var t="IndexedDB is not supported in this browser";return e.isSupportedPromise=new Promise((function(n){var r=e.getIndexedDB(),o=!!navigator.platform&&/iPad|iPhone|iPod/.test(navigator.platform);!r||o?(Z.warn(t),n(!1)):n(e.tryOpen(r).then((function(e){return e||Z.warn(t),e})))})),e.isSupportedPromise}},{key:"getIndexedDB",value:function(){return window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB}}])}();o(gt,"dbValidationName","validate-db-openable"),o(gt,"isSupportedPromise",null);var yt=function(){function e(){Be(this,e)}return Ke(e,[{key:"open",value:function(){return e.isSupported().then((function(e){if(!e)return{status:"error",error:{name:"LSNotSupported",message:"LocalStorage is not supported"}};var t=Se.storeNames.left,n=rt.current||{},r=n&&!N(n);return _(t).filter((function(e){return!l(e,2)[1].permanent})).forEach((function(e){var t=l(e,2),o=t[0],i=t[1].name;i!==ue.ActivityState||it.stores[i]?it.stores[i]||(it.stores[i]=[]):it.stores[i]=r?[Ee(o,Oe.left,n)]:[]})),pt(),{status:"success"}}))}},{key:"getCompositeKeys",value:function(e){var t=e.fields[e.keyPath];return fe(t)?t.composite:null}},{key:"getKeys",value:function(e){var t=Te(e,Oe.right),n=Se.right[t];return this.getCompositeKeys(n)||[n.keyPath]}},{key:"nextIndex",value:function(e){return"number"==typeof e?e+1:void 0}},{key:"initRequest",value:function(e,t){var n=this,r=e.storeName,o=e.id,i=e.item,u=Se.right[Te(r,Oe.right)];return this.open().then((function(e){return"error"===e.status?Promise.reject(e.error):new Promise((function(e,s){var c,l=it.stores[r],d=n.getKeys(r),f=(l[l.length-1]||{})[u.keyPath]||0;if(o){var m=Array.isArray(o)?o.slice():[o];c=d.map((function(e,t){return[e,m[t]]})).reduce(T,{})}else c=a({},i);var p=c?E(l,d,c):0;return t(e,s,{keys:d,items:l,index:p,options:u,lastId:f})}))}))}},{key:"sort",value:function(e,t,n){var r=d(e),o=t.slice().reverse();return r.sort((function(e,t){return o.reduce((function(r,o){return r||function(e,t,r){var o=n?n===e[r]:e[r]e[r]:e[r]>t[r];return o?-1:i?1:0}(e,t,o)}),0)}))}},{key:"prepareTarget",value:function(e,t,n){var r=this.getCompositeKeys(e);return r?a(o({},e.keyPath,r.map((function(e){return t[e]})).join("")),t):e.autoIncrement&&n?a(o({},e.keyPath,n),t):a({},t)}},{key:"prepareResult",value:function(e,t){var n=this.getCompositeKeys(e);return n?n.map((function(e){return t[e]})).filter((function(e){return!Ne(e)})):t[e.keyPath]}},{key:"getAll",value:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return this.open().then((function(r){return"error"===r.status?Promise.reject(r.error):new Promise((function(r,o){var i=it.stores[e];i instanceof Array?r(n?[i[0]]:t.sort(i,t.getKeys(e))):o({name:"NotFoundError",message:"No objectStore named ".concat(e," in this database")})}))}))}},{key:"getFirst",value:function(e){return this.getAll(e,!0).then((function(e){return e.length?e[0]:void 0}))}},{key:"getItem",value:function(e,t){var n=this;return this.initRequest({storeName:e,id:t},(function(t,r,o){var i=o.items,a=o.index,u=o.options;-1===a?r({name:"NotRecordFoundError",message:'Requested record not found in "'.concat(e,'" store')}):t(n.prepareTarget(u,i[a]))}))}},{key:"filterBy",value:function(e,t){return this.getAll(e).then((function(n){return n.filter((function(n){var r=Se.right[Te(e,Oe.right)];return(r.index&&n[r.index])===t}))}))}},{key:"addItem",value:function(e,t){var n=this;return this.initRequest({storeName:e,item:t},(function(r,o,i){var a=i.items,u=i.index,s=i.options,c=i.lastId;-1!==u?o({name:"ConstraintError",message:'Constraint was not satisfied, trying to add existing item into "'.concat(e,'" store')}):(a.push(n.prepareTarget(s,t,n.nextIndex(c))),it.stores[e]=a,r(n.prepareResult(s,t)))}))}},{key:"addBulk",value:function(e,t,n){var r=this;return this.initRequest({storeName:e},(function(o,i,a){var u=a.keys,s=a.items,c=a.options,l=a.lastId;if(!t||t&&!t.length)i({name:"NoTargetDefined",message:'No array provided to perform add bulk operation into "'.concat(e,'" store')});else{var f=l,m=t.map((function(e){return r.prepareTarget(c,e,f=r.nextIndex(f))})),p=m.filter((function(e){return-1!==E(s,u,e)})).map((function(e){return e[c.keyPath]})),h=n?s.filter((function(e){return-1===p.indexOf(e[c.keyPath])})):d(s);if(p.length&&!n)i({name:"ConstraintError",message:'Constraint was not satisfied, trying to add existing items into "'.concat(e,'" store')});else it.stores[e]=r.sort([].concat(d(h),d(m)),u),o(t.map((function(e){return r.prepareResult(c,e)})))}}))}},{key:"updateItem",value:function(e,t){var n=this;return this.initRequest({storeName:e,item:t},(function(r,o,i){var a=i.items,u=i.index,s=i.options,c=i.lastId,l=-1===u?n.nextIndex(c):void 0,d=n.prepareTarget(s,t,l);-1===u?a.push(d):a.splice(u,1,d),it.stores[e]=a,r(n.prepareResult(s,t))}))}},{key:"deleteItem",value:function(e,t){return this.initRequest({storeName:e,id:t},(function(n,r,o){var i=o.items,a=o.index;-1!==a&&(i.splice(a,1),it.stores[e]=i),n(t)}))}},{key:"findMax",value:function(e,t,n){if(!e.length)return-1;for(var r={index:-1,value:"string"==typeof n?"":0},o=0;o=r.value&&(r={value:e[o][t],index:o})}return r.index}},{key:"deleteBulk",value:function(e,t,n){var r=this;return this.getAll(e).then((function(o){var i=r.getKeys(e),a=Se.right[Te(e,Oe.right)].index||i[0],u=n?null:t,s=r.sort(o,i,u),c=r.findMax(s,a,t);if(-1===c)return[];var l=n===xe.LowerBound?c:0,d=n&&n!==xe.UpperBound?s.length:c+1,f=s.splice(l,d).map((function(e){return 1===i.length?e[a]:i.map((function(t){return e[t]}))}));return it.stores[e]=s,f}))}},{key:"trimItems",value:function(e,t){var n=this,r=Te(e,Oe.right),o=Se.right[r];return this.getAll(e).then((function(e){return e.length?e[t-1]:null})).then((function(t){return t?n.deleteBulk(e,t[o.keyPath],xe.UpperBound):[]}))}},{key:"count",value:function(e){return this.open().then((function(t){if("error"===t.status)return Promise.reject(t.error);var n=it.stores[e];return Promise.resolve(n instanceof Array?n.length:1)}))}},{key:"clear",value:function(e){return this.open().then((function(t){return"error"===t.status?Promise.reject(t.error):new Promise((function(t){it.stores[e]=[],t()}))}))}},{key:"destroy",value:function(){}},{key:"deleteDatabase",value:function(){}}],[{key:"isSupported",value:function(){return e.isSupportedPromise||(e.isSupportedPromise=new Promise((function(e){var t=K();t||Z.warn("LocalStorage is not supported in this browser"),e(t)}))),e.isSupportedPromise}}])}();o(yt,"isSupportedPromise",null);var bt,kt=function(e){return e[e.noStorage=b.NO_STORAGE]="noStorage",e[e.indexedDB=b.INDEXED_DB]="indexedDB",e[e.localStorage=b.LOCAL_STORAGE]="localStorage",e}(kt||{}),wt={getAll:function(e,t,n){return e.getAll(t,n).then((function(e){return je(t,Oe.right,e)}))},getFirst:function(e,t){return e.getFirst(t).then((function(e){return Ee(t,Oe.right,e)}))},getItem:function(e,t,n){return e.getItem(t,Ce(t,Oe.left,n)).then((function(e){return Ee(t,Oe.right,e)})).catch((function(e){return Promise.reject(_e(t,e))}))},filterBy:function(e,t,n){return e.filterBy(t,Re(n)).then((function(e){return je(t,Oe.right,e)}))},addItem:function(e,t,n){var r=Ee(t,Oe.left,n);return e.addItem(t,r).then((function(e){return Ce(t,Oe.right,e)})).catch((function(e){return Promise.reject(_e(t,e))}))},addBulk:function(e,t,n,r){var o=je(t,Oe.left,n);return e.addBulk(t,o,r).then((function(e){return e.map((function(e){return Ce(t,Oe.right,e)}))})).catch((function(e){return Promise.reject(_e(t,e))}))},updateItem:function(e,t,n){var r=Ee(t,Oe.left,n);return e.updateItem(t,r).then((function(e){return Ce(t,Oe.right,e)}))},deleteItem:function(e,t,n){return e.deleteItem(t,Ce(t,Oe.left,n)).then((function(e){return Ce(t,Oe.right,e)}))},deleteBulk:function(e,t,n,r){return e.deleteBulk(t,Re(n),r).then((function(e){return e.map((function(e){return Ce(t,Oe.right,e)}))}))},trimItems:function(e,t,n){return e.trimItems(t,n)},count:function(e,t){return e.count(t)},clear:function(e,t){return e.clear(t)},destroy:function(e){return e.destroy()},deleteDatabase:function(e){return e.deleteDatabase()}};var Pt=null;function St(e){var t=null;return null!==Pt?Pt:Pt=Promise.all([gt.isSupported(),yt.isSupported()]).then((function(n){var r=l(n,2),o=r[0],i=r[1];if(it.setCustomName(e),o){bt=kt.indexedDB;var a=new gt;return a.setCustomName(e).then((function(){return t=a}))}return i?(bt=kt.localStorage,t=new yt,Promise.resolve(t)):(Z.error("There is no storage available, app will run with minimum set of features"),bt=kt.noStorage,t=null,Promise.resolve(t))})).then((function(){return{type:bt,storage:t}}))}const Dt=a({init:St,getType:function(){return bt}},(It=_(wt).map((function(e){var t=l(e,2),n=t[0],r=t[1];return[n,function(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),o=1;o2&&void 0!==arguments[2]&&arguments[2]?"CONTINUE":"RETRY",response:A(e.responseText)?JSON.parse(e.responseText):e.responseText,message:y[t],code:t}}function Ot(e,t){var n=e.slice(0,e.length-t.length-1).split("").reduce((function(e){return e.concat(" ")}),"");return"".concat(t).concat(n,":")}function At(e,t){var n="REQUEST PARAMETERS:",r=function(e){return e.replace(/([A-Z])/g,(function(e){return"_".concat(e.toLowerCase())}))},o=_(a(a(a({},ie.getBaseParams()),t),e)).map((function(e){var t=l(e,2),n=t[0],o=t[1];return[r(n),o]}));return Z.log(n),o.filter((function(e){return U(l(e,2)[1])})).map((function(e){var t=l(e,2),r=t[0],o=t[1];return Z.log(Ot(n,r),o),function(e){var t=l(e,2),n=t[0],r=t[1],o=encodeURIComponent(n),i=r;return"string"==typeof r&&(i=encodeURIComponent(r)),O(r)&&(i=encodeURIComponent(JSON.stringify(r)||"")),[o,i].join("=")}([r,o])})).join("&")}function Et(e,t,n){var r=n.xhr,o=n.url;if(4===r.readyState){var i=r.status>=200&&r.status<300,a=A(r.responseText);if(0!==r.status)return a?t(i?function(e,t){var n=JSON.parse(e.responseText),r={status:"success",adid:n.adid,timestamp:n.timestamp,ask_in:n.ask_in,retry_in:n.retry_in,continue_in:n.continue_in,tracking_state:n.tracking_state,attribution:void 0,message:void 0};return R(t,"attribution")&&(r.attribution=n.attribution,r.message=n.message),_(r).filter((function(e){return!!l(e,2)[1]})).reduce(T,{})}(r,o):Nt(r,"SERVER_CANNOT_PROCESS",!0)):e(Nt(r,i?"SERVER_MALFORMED_RESPONSE":"SERVER_INTERNAL_ERROR"));e(Nt(r,"NO_CONNECTION"))}}function jt(e,t){var n=e.endpoint,r=e.url,o=e.method,i=void 0===o?"GET":o,a=e.params,u=function(e,t){var n=e.endpoint,r=e.url,o=e.method,i=At(e.params,t);return{fullUrl:n+r+("GET"===o?"?".concat(i):""),encodedParams:i}}({endpoint:n,url:r,method:i,params:void 0===a?{}:a},t),s=u.fullUrl,c=u.encodedParams;return new Promise((function(e,t){var n=new XMLHttpRequest;n.open(i,s,!0),function(e,t){var n="REQUEST HEADERS:",r=[["Client-SDK","js".concat(L.version)],["Content-Type","POST"===t?"application/x-www-form-urlencoded":"application/json"]];Z.log(n),r.forEach((function(t){var r=l(t,2),o=r[0],i=r[1];e.setRequestHeader(o,i),Z.log(Ot(n,o),i)}))}(n,i),n.onreadystatechange=function(){return Et(t,e,{xhr:n,url:r})},n.onerror=function(){return t(Nt(n,"TRANSACTION_ERROR"))},n.send("GET"===i?void 0:c)}))}function Ct(e,t){return"success"===e.status?function(e,t){var n=R(t,"gdpr_forget_device"),r=R(t,"attribution"),o=R(t,"session"),i=R(t,"disable_third_party_sharing"),a="opted_out"===e.tracking_state;if(!n&&a)return Ve("sdk:gdpr-forget-me"),e;r||n||a||!e.ask_in||Ve("attribution:check",e);o&&Ve("session:finished",e);if(i)return Ve("sdk:third-party-sharing-opt-out"),e;return e}(e,t):e}var Rt={long:{delay:2*m,maxDelay:h,minRange:.5,maxRange:1},short:{delay:200,maxDelay:p,minRange:.5,maxRange:1},test:{delay:100,maxDelay:300}};function Tt(e,t){var n,r,o=Rt[t=t||"long"],i=o.delay*Math.pow(2,e-1);return i=Math.min(i,o.maxDelay),o.minRange&&o.maxRange&&(i*=(n=o.minRange,r=o.maxRange,Math.random()*(r-n)+n)),Math.round(i)}var _t=navigator.onLine;function Bt(){_t=!0}function Ut(){_t=!1}function Kt(e,t,n){e.addEventListener&&e.addEventListener(t,n,!1)}function Lt(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)}var qt=function(e){return e.Default="default",e.India="india",e.China="china",e}(qt||{}),Mt=function(e){return e.EU="EU",e.TR="TR",e.US="US",e}(Mt||{});function Ft(e,t){Z.warn("Both ".concat(e," and ").concat(t," are set in config, ").concat(t," will be ignored"))}var Gt=o(o(o(o(o(o({},qt.Default,k),qt.India,w),qt.China,P),Mt.EU,S),Mt.TR,D),Mt.US,I);function Wt(e){var t,n,r,o,i=(t=ie.getCustomConfig(),n=t.customUrl,r=t.urlStrategy,o=t.dataResidency,n?((o||r)&&Ft("customUrl",o?"dataResidency":"urlStrategy"),{app:n,gdpr:n}):(o&&r&&Ft("dataResidency","urlStrategy"),o?[o]:r===qt.India?[qt.India,qt.Default]:r===qt.China?[qt.China,qt.Default]:[qt.Default,qt.India,qt.China]));return Array.isArray(i)?i.map((function(t){return e[t]||null})).filter((function(e){return!!e})):[i]}var Vt=150,Ht=2147483647,Yt=60*f;const zt=function(){var e,t,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=n.url,o=n.method,i=void 0===o?"GET":o,u=n.params,s=void 0===u?{}:u,c=n.continueCb,d=n.strategy,f=n.wait,m={url:r,method:i,params:s,continueCb:c},p=r,h=i,v=a({},s),g=c,b=d,k=function(){e.reset(),t=e.next()},w=function(e,t){return e["/gdpr_forget_device"===t?"gdpr":"app"]},P=null,S={request:0,connection:0},D=x(f),I=null;function x(e){return(e=e||Vt)>Ht?Ht:e}function O(n){var r=n.wait,o=n.retrying;return e||(e=function(){var e=Wt(arguments.length>0&&void 0!==arguments[0]?arguments[0]:Gt),t=0;return{next:function(){return t0&&void 0!==arguments[0]?arguments[0]:{},t=e.url,n=e.method,r=e.params,o=void 0===r?{}:r,i=e.continueCb,u=e.wait;return function(e){var t=e.url,n=e.method,r=e.params,o=e.continueCb;t&&(p=t),n&&(h=n),N(r)||(v=a({},r)),v=a({createdAt:qe()},v),"function"==typeof o&&(g=o)}({url:t,method:n,params:o,continueCb:i}),O({wait:u})},isRunning:function(){return!!P},clear:B}};var Jt=function(e){return e===g?"GDPR disable":"disable"},Qt=function(e){return{start:{inProgress:"Adjust SDK ".concat(Jt(e)," process has already started"),done:"Adjust SDK ".concat(Jt(e)," process is now started")},finish:{inProgress:"Adjust SDK ".concat(Jt(e)," process has already finished"),done:"Adjust SDK ".concat(Jt(e)," process is now finished")}}};function Xt(e,t){var n=e.reason,r=e.pending,o=lt()||{},i="start"===t&&o.pending?"start":"finish",a="start"===t&&o.reason,u="finish"===t&&o.reason&&!o.pending;return a||u?(Z.log(Qt(o.reason)[i].inProgress),!1):(Z.log(Qt(n)[i].done),dt({reason:n||v,pending:r}),!0)}function Zt(e){return Xt({reason:e,pending:arguments.length>1&&void 0!==arguments[1]&&arguments[1]||!1},"start")}function $t(){var e=lt()||{};return e.reason===v||e.reason===g&&!e.pending?"off":e.reason===g&&e.pending?"paused":"on"}var en=ae.ActivityState,tn=!1;function nn(e){return e?"unknown"===e.uuid?(Zt({reason:g}),rt.destroy(),{exists:!0,stored:null}):(rt.init(e),{exists:!0,stored:e}):{exists:!1}}function rn(){return"off"!==$t()&&rt.isStarted()}function on(){if(!rn())return Promise.resolve(null);var e=a(a({},rt.current),{},{lastActive:Date.now()});return Dt.updateItem(en,e).then((function(){return rt.current=e}))}var an=zt({strategy:"long",continueCb:function(e,t){var n=e&&e.continue_in||null;return cn.pause=n?{timestamp:Date.now(),wait:n}:null,Dt.getFirst(sn).then((function(e){return e?Dt.deleteItem(sn,e.timestamp):null})).then((function(){return t(),cn.running=!1,mn({wait:n})}))}}),un=!1,sn="queue",cn={running:!1,timestamp:null,pause:null};function ln(){var e=Date.now();return cn.timestamp&&e<=cn.timestamp&&(e=cn.timestamp+1),cn.timestamp=e,e}function dn(e){var t=e.url,n=e.method,r=e.params,o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=o.auto,u=o.timestamp;rt.updateParams(t,i);var s=_(r||{}).filter((function(e){return U(l(e,2)[1])})).reduce(T,{}),c={timestamp:ln(),url:t,method:n,params:a(a({},rt.getParams(t)),s)};return u&&(c.createdAt=u),Dt.addItem(sn,c).then((function(){return function(e){return R(e,"session")&&rt.resetSessionOffset(),rt.updateLastActive(),on()}(t)})).then((function(){return cn.running?{}:mn()}))}function fn(){var e=cn.pause||{},t=e.timestamp,n=e.wait,r=Date.now()-(t||0);return r0&&void 0!==arguments[0]?arguments[0]:{},t=e.cleanUp,n=e.wait;if(cn.running)return Promise.resolve({});cn.running=!0;var r=Promise.resolve({});return t&&(r=r.then(hn)),r.then((function(){return Dt.getFirst(sn)})).then((function(e){return function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.timestamp,n=e.createdAt,r=e.url,o=e.method,i=e.params,u=arguments.length>1?arguments[1]:void 0,s=rt.current||{},c="/session"===r&&!s.installed;return un&&!c||!r&&!o&&!i?(cn.running=!1,Promise.resolve({})):an.send({url:r,method:o,params:a(a({},i),{},{createdAt:qe(n||t)}),wait:u||fn()})}(e,n)}))}function pn(e){if(void 0!==e)if(e!==un){var t=un;un=e,!e&&t&&mn(),Z.info("The app is now in ".concat(e?"offline":"online"," mode"))}else Z.error("The app is already in ".concat(e?"offline":"online"," mode"));else Z.error("State not provided, true or false has to be defined")}function hn(){var e=Date.now()-ie.requestValidityWindow;return Dt.deleteBulk(sn,e,"upperBound")}var vn="globalParams",gn={short:"No type provided",long:"Global parameter type not provided, `callback` or `partner` types are available"};function yn(e){return(e||[]).map((function(e){return{key:e.key,value:e.value}}))}function bn(){return Promise.all([Dt.filterBy(vn,"callback"),Dt.filterBy(vn,"partner")]).then((function(e){var t=l(e,2),n=t[0],r=t[1];return{callbackParams:yn(n),partnerParams:yn(r)}}))}function kn(e,t){if(void 0===t)return Z.error(gn.long),Promise.reject({message:gn.short});var n=j(e),r=Object.keys(n).map((function(e){return{key:e,value:n[e],type:t}}));return Promise.all([Dt.filterBy(vn,t),Dt.addBulk(vn,r,!0)]).then((function(e){var n=l(e,2),o=n[0],i=n[1],a=C(o.map((function(e){return e.key})),i.map((function(e){return e[0]})));return Z.log("Following ".concat(t," parameters have been saved: ").concat(r.map((function(e){return"".concat(e.key,":").concat(e.value)})).join(", "))),a.length&&Z.log("Keys: ".concat(a.join(", ")," already existed so their values have been updated")),i}))}function wn(e,t){return void 0===t?(Z.error(gn.long),Promise.reject({message:gn.short})):Dt.deleteItem(vn,[e,t]).then((function(n){return Z.log("".concat(e," ").concat(t," parameter has been deleted")),n}))}function Pn(e){return void 0===e?(Z.error(gn.long),Promise.reject({message:gn.short})):Dt.deleteBulk(vn,e).then((function(t){return Z.log("All ".concat(e," parameters have been deleted")),t}))}var Sn,Dn,In,xn=!1,Nn=document;function On(){return In=function(){var e=document;if(void 0!==e.hidden)return{hidden:"hidden",visibilityChange:"visibilitychange"};for(var t=_({mozHidden:"mozvisibilitychange",msHidden:"msvisibilitychange",oHidden:"ovisibilitychange",webkitHidden:"webkitvisibilitychange"}),n=0;n0;return!n||n&&t*f>=ie.sessionWindow?bn().then((function(e){var t,n,r;dn({url:"/session",method:"POST",params:(t=e,n=t.callbackParams,r=t.partnerParams,{callbackParams:n.length?j(n):null,partnerParams:r.length?j(r):null})},{auto:!0})})):(Ve("attribution:check"),on())}var Bn=zt({url:"/attribution",strategy:"short",continueCb:function(e,t,n){if(!e||e&&"error"===e.status)return t(),Promise.resolve({state:"unknown"});if(!e.ask_in)return t(),function(e){if(N(e)||!function(e){var t=e.adid,n=void 0===t?"":t,r=e.attribution,o=void 0===r?{}:r;return!!n&&!!C(Un,Object.keys(o)).length}(e)||function(e){var t=e.adid,n=e.attribution,r=rt.current.attribution||{},o=n&&Un.some((function(e){return r[e]!==n[e]}));return!o&&t===r.adid}(e))return Promise.resolve({state:"same"});var t=_(e.attribution).filter((function(e){var t=l(e,1)[0];return-1!==Un.indexOf(t)})).reduce(T,{adid:e.adid});return rt.current=a(a({},rt.current),{},{attribution:t}),on().then((function(){return Ve("attribution:change",t),Ve(x.ATTRIBUTION_RECEIVED,t),Z.info("Attribution has been updated"),{state:"changed"}}))}(e);return n(e.ask_in)}}),Un=["tracker_token","tracker_name","network","campaign","adgroup","creative","click_label","state"];var Kn=zt({url:"/gdpr_forget_device",method:"POST",strategy:"short"}),Ln={running:"Adjust SDK is running pending GDPR Forget Me request",pending:"Adjust SDK will run GDPR Forget Me request after initialisation",paused:"Adjust SDK is already prepared to send GDPR Forget Me request",off:"Adjust SDK is already disabled"};function qn(e){var t=$t();return e||"on"===t?ie.isInitialised()?(Kn.send({params:a({},rt.getParams())}).then((function(){Ve("sdk:gdpr-forget-me")})),!0):(Z.log(Ln.pending),!0):(Z.log(Ln[t]),!1)}function Mn(){return Xt({reason:g,pending:!1},"finish")}var Fn={running:"Adjust SDK is running pending third-party sharing opt-out request",delayed:"Adjust SDK will run third-party sharing opt-out request after initialisation",pending:"Adjust SDK already queued third-party sharing opt-out request",off:"Third-party sharing opt-out is already done",start:{inProgress:"Third-party sharing opt-out has already started",done:"Third-party sharing opt-out is now started"},finish:{inProgress:"Third-party sharing opt-out has already finished",done:"Third-party sharing opt-out is now finished"}};function Gn(){var e=ft()||{};return e.reason?e.pending?"pending":"off":"on"}function Wn(e){var t=Gn();return e||"on"===t?ie.isInitialised()?(dn({url:"/disable_third_party_sharing",method:"POST"}),!0):(Z.log(Fn.delayed),!0):(Z.log(Fn[t]),!1)}function Vn(e,t){var n,r,o=ft()||{},i="start"===t&&e?"start":"finish",u="start"===t&&o.reason,s="finish"===t&&o.reason&&!o.pending;return u||s?(Z.log(Fn[i].inProgress),!1):(Z.log(Fn[i].done),r=(n={reason:v,pending:e})?a({},n):null,it.stores[at]=a(a({},st()),{},{thirdPartySharingDisabled:r}),ct(),!0)}function Hn(){return Vn(!1,"finish")}function Yn(){"pending"===Gn()&&(Z.log(Fn.running),Wn(!0))}var zn=[];function Jn(e,t){zn.push({method:e,description:t,timestamp:Date.now()})}var Qn=10,Xn="eventDeduplication";function Zn(e,t){var n,r,o=t.callbackParams,i=t.partnerParams,u={},s=a({eventToken:e.eventToken,deduplicationId:e.deduplicationId},(n=e.revenue,r=e.currency,isNaN(n)||(n=parseFloat(n))<0||!r?{}:{revenue:n.toFixed(5),currency:r})),c=a(a({},j(o)),j(e.callbackParams)),l=a(a({},j(i)),j(e.partnerParams));return N(c)||(u.callbackParams=c),N(l)||(u.partnerParams=l),a(a({},s),u)}function $n(e){return e?Dt.getAll(Xn).then((function(e){return e.map((function(e){return e.id}))})).then((function(t){return-1===t.indexOf(e)?function(e){var t=ie.getCustomConfig().eventDeduplicationListLimit,n=t>0?t:Qn;return Dt.count(Xn).then((function(e){var t=Promise.resolve();if(e>=n){var r=e-n+1;Z.log("Event deduplication list limit has been reached. Oldest ids are about to be removed (".concat(r," of them)")),t=Dt.trimItems(Xn,r)}return t})).then((function(){return Z.info("New event deduplication id is added to the list: ".concat(e)),Dt.addItem(Xn,{id:e})}))}(e):Promise.reject({message:"Event won't be tracked, since it was previously tracked with the same deduplication id ".concat(e)})})):Promise.resolve()}function er(e){return{clickTime:qe(),source:"web_referrer",referrer:decodeURIComponent(e)}}function tr(e,t){var n;(n=e||window.location.search.substring(1).split("&").map((function(e){return e.split("=")})).reduce(T,{}).adjust_referrer)&&dn({url:"/sdk_click",method:"POST",params:er(n)},{timestamp:t})}var nr=["logLevel","logOutput"],rr=null,or=!1,ir=!1,ar=!1;function ur(){Wn()&&Vn(!0,"start")}function sr(){var e;"paused"===$t()&&(Mn(),Promise.all([(e={uuid:"unknown"},rt.current=e,Dt.clear(en).then((function(){return Dt.addItem(en,e)}))),Dt.clear(vn),Dt.clear(sn)]).then(fr))}function cr(){return or||ie.isInitialised()}function lr(){or=!1,ir=!1,zn=[],an.clear(),cn.running=!1,cn.timestamp=null,cn.pause=null,xn=!1,rt.toBackground(),Tn(),In&&(clearTimeout(Dn),Lt(Nn,In.visibilityChange,jn),Kt(Nn,In.visibilityChange,Cn)),Bn.clear()}function dr(e){e&&Z.log("Adjust SDK has been shutdown due to asynchronous disable"),lr(),Ge.forEach(clearTimeout),Ge=[],Fe={},rt.destroy(),Lt(window,"online",Bt),Lt(window,"offline",Ut),Dt.destroy(),ie.destroy()}function fr(){ar=!1,dr(),Kn.clear(),rr=null,Z.log("Adjust SDK instance has been destroyed")}function mr(e){Z.log("Adjust SDK is starting with web_uuid set to ".concat(e.uuid));var t=rt.current.installed;"paused"===$t()&&(Z.log(Ln.running),qn(!0)),t||Yn();var n=$t(),r=function(e){return"Adjust SDK start has been interrupted ".concat(e)};return"off"===n?(dr(),Promise.reject({interrupted:!0,message:r("due to complete async disable")})):"paused"===n?(lr(),Promise.reject({interrupted:!0,message:r("due to partial async disable")})):ir?Promise.reject({interrupted:!0,message:r("due to multiple synchronous start attempt")}):(mn({cleanUp:!0}),On().then((function(){or=!1,ir=!0,t&&(pr(),Yn())})))}function pr(){var e;ar=!0,zn.forEach((function(e){"function"==typeof e.method&&(Z.log("Delayed ".concat(e.description," task is running now")),e.method(e.timestamp))})),zn=[],(e="sdk:installed")&&_(Fe).some((function(t){var n=l(t,2)[1];return n.some((function(t,r){t.id===e&&n.splice(r,1)}))}))}function hr(e){if(e.interrupted)Z.log(e.message);else if(dr(),Z.error("Adjust SDK start has been canceled due to an error",e),e.stack)throw e}function vr(e){"off"!==$t()?(ie.set(e),Kt(window,"online",Bt),Kt(window,"offline",Ut),We("sdk:installed",pr),We("sdk:shutdown",(function(){return dr(!0)})),We("sdk:gdpr-forget-me",sr),We("sdk:third-party-sharing-opt-out",Hn),We("attribution:check",(function(e,t){return n=t,r=rt.current,(o=(n||{}).ask_in)||!r.attribution&&r.installed?(Bn.send({params:a({initiatedBy:n?"backend":"sdk"},rt.getParams()),wait:o}),rt.updateSessionOffset(),on()):Promise.resolve(r);var n,r,o})),"function"==typeof e.attributionCallback&&We("attribution:change",e.attributionCallback),(tn?Promise.reject({interrupted:!0,message:"Adjust SDK start already in progress"}):(tn=!0,Dt.getFirst(en).then(nn).then((function(e){if(e.exists)return tn=!1,e.stored;var t,n=N(rt.current)?{uuid:(t=Date.now(),"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,(function(e){var n=(t+16*Math.random())%16|0;return t=Math.floor(t/16),("x"===e?n:11&n).toString(16)})))}:rt.current;return Dt.addItem(en,n).then((function(){return rt.init(n),mt(),tn=!1,n}))})).then((function(e){return e&&Ve(x.WEB_UUID_CREATED,e.uuid),e})))).then(mr).then(tr).catch(hr)):Z.log("Adjust SDK is disabled, can not start the sdk")}function gr(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=n.schedule,o=n.waitForInitFinished,i=n.optionalInit;if(Dt.getType()!==b.NO_STORAGE)if("on"===$t())if(i||cr()||!o){if("function"==typeof t){if(!r||ar&&ir||!i&&!cr())return t();Jn(t,e),Z.log("Running ".concat(e," is delayed until Adjust SDK is up"))}}else Z.error("Adjust SDK can not ".concat(e,", sdk instance is not initialized"));else Z.log("Adjust SDK is disabled, can not ".concat(e));else Z.log("Adjust SDK can not ".concat(e,", no storage available"))}const yr={initSdk:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.logLevel,n=e.logOutput,r=u(e,nr);Z.setLogLevel(t,n),cr()?Z.error("You already initiated your instance"):ie.hasMissing(r)||(or=!0,Dt.init(r.namespace).then((function(e){e.type!==b.NO_STORAGE?(Z.info("Available storage is ".concat(e.type)),rr=a({},r),vr(r)):Z.error("Adjust SDK can not start, there is no storage available")})))},getAttribution:function(){return gr("get attribution",(function(){return rt.getAttribution()}))},getWebUUID:function(){return gr("get web_uuid",(function(){return rt.getWebUUID()}))},waitForAttribution:function(){return gr("get attribution",(function(){return rt.waitForAttribution()}),{schedule:!1})},waitForWebUUID:function(){return gr("get web_uuid",(function(){return rt.waitForWebUUID()}),{schedule:!1})},setReferrer:function(e){e&&"string"==typeof e?gr("setting reftag",(function(t){return tr(e,t)}),{schedule:!0,waitForInitFinished:!0,optionalInit:!0}):Z.error("You must provide a string referrer")},trackEvent:function(e){return function(e){if(Dt.getType()===b.NO_STORAGE){var t="Adjust SDK can not track event, no storage available";return Z.log(t),Promise.reject(t)}if("on"!==$t()){var n="Adjust SDK is disabled, can not track event";return Z.log(n),Promise.reject(n)}if(!cr()){var r="Adjust SDK can not track event, sdk instance is not initialized";return Z.error(r),Promise.reject(r)}return new Promise((function(t){var n=function(n){return t(function(e,t){if(!e||e&&(N(e)||!e.eventToken)){var n="You must provide event token in order to track event";return Z.error(n),Promise.reject(n)}return $n(e.deduplicationId).then(bn).then((function(n){return dn({url:"/event",method:"POST",params:Zn(e,n)},{timestamp:t})})).catch((function(e){return e&&e.message&&Z.error(e.message),Promise.reject(e)}))}(e,n))};!ar||!ir&&cr()?(Jn(n,"track event"),Z.log("Running track event is delayed until Adjust SDK is up")):n()}))}(e)},addGlobalCallbackParameters:function(e){gr("add global callback parameters",(function(){return kn(e,"callback")}))},addGlobalPartnerParameters:function(e){gr("add global partner parameters",(function(){return kn(e,"partner")}))},removeGlobalCallbackParameter:function(e){gr("remove global callback parameter",(function(){return wn(e,"callback")}))},removeGlobalPartnerParameter:function(e){gr("remove global partner parameter",(function(){return wn(e,"partner")}))},clearGlobalCallbackParameters:function(){gr("remove all global callback parameters",(function(){return Pn("callback")}))},clearGlobalPartnerParameters:function(){gr("remove all global partner parameters",(function(){return Pn("partner")}))},switchToOfflineMode:function(){gr("set offline mode",(function(){return pn(!0)}))},switchBackToOnlineMode:function(){gr("set online mode",(function(){return pn(!1)}))},stop:function(){Zt()&&ie.isInitialised()&&dr()},restart:function(){var e;((e=lt()||{}).reason===g?(Z.log("Adjust SDK is disabled due to GDPR-Forget-Me request and it can not be re-enabled"),!1):e.reason?(Z.log("Adjust SDK has been enabled"),dt(null),!0):(Z.log("Adjust SDK is already enabled"),!1))&&rr&&vr(rr)},gdprForgetMe:function(){var e=qn();e&&(e=Zt(g,!0))&&ie.isInitialised()&&lr()},disableThirdPartySharing:function(){gr("disable third-party sharing",ur,{schedule:!0})},initSmartBanner:function(){Z.error("function `initSmartBanner` is deprecated")},showSmartBanner:function(){Z.error("function `showSmartBanner` is deprecated")},hideSmartBanner:function(){Z.error("function `hideSmartBanner` is deprecated")},__testonly__:{destroy:fr,clearDatabase:function(){return Dt.deleteDatabase()}},__internal__:{restartAfterAsyncEnable:function(){Z.log("Adjust SDK has been restarted due to asynchronous enable"),rr&&vr(rr)}}};return t=t.default})())); \ No newline at end of file +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.Adjust=t():e.Adjust=t()}(self,(()=>(()=>{"use strict";var e={d:(t,n)=>{for(var r in n)e.o(n,r)&&!e.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:n[r]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t)},t={};function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}function r(e){var t=function(e,t){if("object"!=n(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var o=r.call(e,t||"default");if("object"!=n(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==n(t)?t:t+""}function o(e,t,n){return(t=r(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}e.d(t,{default:()=>ur});var s=1e3,c=60*s,l=60*c,d=24*l,f=function(e){return e.REASON_GENERAL="general",e.REASON_GDPR="gdpr",e}({}),m={TRANSACTION_ERROR:"XHR transaction failed due to an error",SERVER_MALFORMED_RESPONSE:"Response from server is malformed",SERVER_INTERNAL_ERROR:"Internal error occurred on the server",SERVER_CANNOT_PROCESS:"Server was not able to process the request, probably due to error coming from the client",NO_CONNECTION:"No internet connectivity",SKIP:"Skipping slower attempt",MISSING_URL:"Url is not provided"},p=function(e){return e.NO_STORAGE="noStorage",e.INDEXED_DB="indexedDB",e.LOCAL_STORAGE="localStorage",e}({}),v={default:"adjust.com",india:"adjust.net.in",china:"adjust.world",world:"adjust.world",EU:"eu.adjust.com",TR:"tr.adjust.com",US:"us.adjust.com"},h="https://app.",g="https://gdpr.",y="https://",b={WEB_UUID_CREATED:"activity:web_uuid",ATTRIBUTION_RECEIVED:"activity:attribution"};function k(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n0&&void 0!==arguments[0]?arguments[0]:[]).reduce((function(e,t){return a(a({},e),{},o({},t.key,t.value))}),{})}function I(){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:[]).filter((function(t){return-1!==e.indexOf(t)}))}function R(e,t){return new RegExp("\\/".concat(t,"(\\/.*|\\?.*){0,1}$")).test(e)}function A(e,t){var n=w(t,2),r=n[0],i=n[1];return a(a({},e),{},o({},r,i))}function x(e){return Object.keys(e).map((function(t){return[t,e[t]]}))}function C(e){return Object.keys(e).map((function(t){return e[t]}))}function j(e){return D(e)?!P(e):!!e||0===e}function T(){try{var e=(new Date).toString(),t=window.localStorage;t.setItem(e,e);var n=t.getItem(e)===e;return t.removeItem(e),!(!n||!t)}catch(e){return!1}}const _={namespace:"adjust-sdk",version:"5.7.0",env:"production"};var B="error",U="warning",L="info",K="verbose",q=o(o(o(o(o({},"none",-1),B,0),U,1),L,2),K,3),G={log:" ",info:" ",warn:" ",error:""},M={development:K,production:B,test:K},F=V(),W="";function V(){return M[_.env]||B}function H(e,t){var n;if(!(q[F]2?u-2:0),c=2;c2&&void 0!==arguments[2]?arguments[2]:[]).map((function(n){return Ne(e,t,n)}))}function Oe(e,t,n){var r=be[t][Re(e,Pe.right)],o=r.fields[r.keyPath],i=n instanceof Array?n.slice():[n],a=(se(o)?o.composite:[r.keyPath]).map((function(e,t){var n=r.fields[e];return De(ae(n)?n.values:null,i[t])}));return 1===a.length?a[0]:a}function Ie(e){return be.values[e]||e}function Re(e,t){return(be.storeNames[t][e]||{}).name||e}function Ae(e,t){return{name:t.name,message:t.message.replace('"'.concat(e,'"'),Re(e,Pe.right))}}function xe(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Ce(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:1,n=e+"",r=1;r<=t;r+=1)e0?"-":"+")+Te(Math.floor(Math.abs(t)/60))+Te(Math.abs(t)%60)}(t);return"".concat(n,"T").concat(r,"Z").concat(o)}function Be(e,t){return isNaN(e)||isNaN(t)?0:Math.abs(t-e)}var Ue={},Le=[];function Ke(e,t){var n="id"+Math.random().toString(36).substring(2,16),r={id:n,cb:t};return Ue[e]||(Ue[e]=[]),Ue[e].push(r),n}function qe(e,t){Ue[e]&&Ue[e].forEach((function(n){"function"==typeof n.cb&&Le.push(setTimeout((function(){return n.cb(e,t)})))}))}var Ge={},Me=!1,Fe=!1;function We(){Ge=Me?a({},arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}):{}}function Ve(){Me&&(Ge.lastInterval=function(){var e=Ge.lastActive;if(e)return Math.round(Be(e,Date.now())/s);return-1}(),Ge.lastActive=Date.now())}function He(e){Ge=a(a({},Ge),e)}function Ye(){Fe=!0}function ze(){var e=Ge.lastActive;return Math.round(Be(e,Date.now())/s)}function Je(){return(Ge.timeSpent||0)+(Fe?ze():0)}function Qe(){var e=Be(Ge.lastActive,Date.now())=0?Ge.lastInterval:0,n={timeSpent:Ge.timeSpent||0,sessionLength:Ge.sessionLength||0,sessionCount:Ge.sessionCount||1,lastInterval:t||0};return e&&R(e,"event")&&(n.eventCount=Ge.eventCount),n},updateParams:function(e,t){if(Me){var n={};n.timeSpent=Je(),n.sessionLength=Qe(),R(e,"session")&&(n.sessionCount=(Ge.sessionCount||0)+1),R(e,"event")&&(n.eventCount=(Ge.eventCount||0)+1),He(n),t||Ve()}},updateInstalled:function(){Me&&(Ge.installed||He({installed:!0}))},updateSessionOffset:Xe,updateSessionLength:function(){Me&&(He({sessionLength:Qe()}),Ve())},resetSessionOffset:function(){Me&&He({timeSpent:0,sessionLength:0})},updateLastActive:Ve,destroy:function(){Ge={},Me=!1,Fe=!1},getAttribution:function(){return Me?Ge.attribution?Ge.attribution:(z.log("No attribution data yet"),null):null},getWebUUID:function(){return Me?Ge.uuid:null},waitForAttribution:function(){return Ge.attribution?Promise.resolve(Ge.attribution):new Promise((function(e){return Ke(b.ATTRIBUTION_RECEIVED,(function(t,n){return e(n)}))}))},waitForWebUUID:function(){return Ge.uuid?Promise.resolve(Ge.uuid):new Promise((function(e){return Ke(b.WEB_UUID_CREATED,(function(t,n){return e(n)}))}))}};var $e=function(){return je((function e(){xe(this,e),o(this,"items",{})}),[{key:"getItem",value:function(e){return Object.prototype.hasOwnProperty.call(this.items,e)?this.items[e]:null}},{key:"removeItem",value:function(e){delete this.items[e]}},{key:"setItem",value:function(e,t){this.items[e]=t}}])}();const et=new(function(){return je((function e(){var t=this;xe(this,e),o(this,"defaultName",_.namespace),o(this,"storageName",this.defaultName),o(this,"storeNames",be.storeNames.left),this.storesMap={},T()?this.storage=window.localStorage:this.storage=new $e;var n=this.read.bind(this),r=this.write.bind(this);C(this.storeNames).forEach((function(e){var o=e.name;Object.defineProperty(t.storesMap,o,{get:function(){return n(o)},set:function(e){r(o,e)}})})),Object.freeze(this.storesMap)}),[{key:"read",value:function(e){var t=this.storage.getItem("".concat(this.storageName,".").concat(e)),n=t?JSON.parse(t):null;return e===oe.Preferences&&n?Ne(oe.Preferences,Pe.right,n):n}},{key:"write",value:function(e,t){t?this.storage.setItem("".concat(this.storageName,".").concat(e),JSON.stringify(t instanceof Array?t:Ne(oe.Preferences,Pe.left,t))):this.storage.removeItem("".concat(this.storageName,".").concat(e))}},{key:"clear",value:function(){this.deleteData()}},{key:"deleteData",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];C(this.storeNames).forEach((function(n){!t&&n.permanent||e.storage.removeItem("".concat(e.storageName,".").concat(n.name))}))}},{key:"setCustomName",value:function(e){var t=this;if(e&&e.length){var n="".concat(_.namespace,"-").concat(e);C(this.storeNames).forEach((function(e){var r=e.name,o=t.storage.getItem("".concat(t.storageName,".").concat(r));o&&t.storage.setItem("".concat(n,".").concat(r),o)})),this.deleteData(!0),this.storageName=n}}},{key:"stores",get:function(){return this.storesMap}}])}());var tt=le.preferences.name,nt=null;function rt(){return nt||ot(),nt?a({},nt):null}function ot(){nt=et.stores[tt]}function it(){var e=rt();return e&&e.sdkDisabled||null}function at(e){var t=e?a({},e):null;et.stores[tt]=a(a({},rt()),{},{sdkDisabled:t}),ot()}function ut(){var e=et.stores[tt]||{},t=(nt||{}).sdkDisabled||null;e.sdkDisabled&&!t&&qe("sdk:shutdown"),ot()}function st(){et.stores[tt]||(et.stores[tt]=a({},nt))}nt=rt();var ct=function(e){return e.add="add",e.put="put",e.get="get",e.list="list",e.clear="clear",e.delete="delete",e}(ct||{}),lt=function(e){return e.readonly="readonly",e.readwrite="readwrite",e}(lt||{}),dt=function(){function e(){xe(this,e),o(this,"dbDefaultName",_.namespace),o(this,"dbName",this.dbDefaultName),o(this,"dbVersion",1),o(this,"indexedDbConnection",null),o(this,"notSupportedError",{name:"IDBNotSupported",message:"IndexedDB is not supported"}),o(this,"databaseOpenError",{name:"CannotOpenDatabaseError",message:"Cannot open a database"}),o(this,"noConnectionError",{name:"NoDatabaseConnection",message:"Cannot open a transaction"});var t=e.getIndexedDB();if(!t)throw this.notSupportedError;this.idbFactory=t}return je(e,[{key:"setCustomName",value:function(e){return e&&e.length>0?(this.dbName="".concat(_.namespace,"-").concat(e),this.migrateDb(this.dbDefaultName,this.dbName)):Promise.resolve()}},{key:"openDatabase",value:function(t,n,r){var o=this;return e.isSupported().then((function(e){return e?new Promise((function(e,i){var a=o.idbFactory.open(t,r);n&&(a.onupgradeneeded=function(e){return n(e,i)}),a.onsuccess=function(t){var n=t.target.result;n?e(n):i(o.databaseOpenError)},a.onerror=i})):Promise.reject(o.notSupportedError)}))}},{key:"databaseExists",value:function(e){var t=this;return new Promise((function(n){var r=!0;t.openDatabase(e,(function(){r=!1})).then((function(n){if(n.close(),!r)return t.deleteDatabaseByName(e)})).then((function(){return n(r)}))}))}},{key:"cloneData",value:function(e,t){var n=this;return C(be.storeNames.left).map((function(e){return e.name})).filter((function(e){return"p"!==e})).map((function(r){return function(){return o=r,i=n.indexedDbConnection,n.indexedDbConnection=e,n.getAll(o).then((function(e){if(n.indexedDbConnection=t,!(e.length<1))return n.addBulk(o,e,!0)})).then((function(){n.indexedDbConnection=i}));var o,i}})).reduce((function(e,t){return e.then(t)}),Promise.resolve())}},{key:"migrateDb",value:function(e,t){var n=this;return this.databaseExists(e).then((function(r){return r?Promise.all([n.openDatabase(e,n.handleUpgradeNeeded,n.dbVersion),n.openDatabase(t,n.handleUpgradeNeeded,n.dbVersion)]).then((function(t){var r=w(t,2),o=r[0],i=r[1];return n.cloneData(o,i).then((function(){return n.indexedDbConnection=i,o.close(),n.deleteDatabaseByName(e)}))})).then((function(){return z.info("Database migration finished")})):n.openDatabase(t,n.handleUpgradeNeeded,n.dbVersion).then((function(e){n.indexedDbConnection=e}))}))}},{key:"handleUpgradeNeeded",value:function(e,t){var n=e.target.result;e.target.transaction.onerror=t,e.target.transaction.onabort=t;var r=be.storeNames.left,o=Ze.current||{},i=o&&!P(o);x(r).filter((function(e){return!w(e,2)[1].permanent})).forEach((function(e){var t=w(e,2),r=t[0],a=t[1].name,u=be.right[r],s=n.createObjectStore(a,{keyPath:u.keyPath,autoIncrement:u.autoIncrement||!1});if(u.index&&s.createIndex("".concat(u.index,"Index"),u.index),a===re.ActivityState&&i)return s.add(Ne(r,Pe.left,o)),void z.info("Activity state has been recovered");var c=et.stores[a];c&&(c.forEach((function(e){return s.add(e)})),z.info("Migration from localStorage done for ".concat(r," store")))})),st(),et.clear()}},{key:"open",value:function(){var e=this;return this.indexedDbConnection?Promise.resolve({success:!0}):this.openDatabase(this.dbName,this.handleUpgradeNeeded,this.dbVersion).then((function(t){return e.indexedDbConnection=t,e.indexedDbConnection.onclose=function(){return e.destroy},{success:!0}}))}},{key:"getTransactionStore",value:function(e,t,n){var r,o=e.storeName,i=e.mode,a=n.transaction([o],i),u=a.objectStore(o),s=be.right[Re(o,Pe.right)];return s.index&&(r=u.index("".concat(s.index,"Index"))),a.onerror=t,a.onabort=t,{transaction:a,store:u,index:r,options:s}}},{key:"overrideError",value:function(e,t){var n=t.target.error;return e({name:n.name,message:n.message})}},{key:"getCompositeKeys",value:function(e){var t=e.fields[e.keyPath];return se(t)?t.composite:null}},{key:"targetIsObject",value:function(e){return D(e)}},{key:"prepareTarget",value:function(e,t,n){if(n===ct.clear||!t)return null;var r=this.getCompositeKeys(e);return-1!==[ct.add,ct.put].indexOf(n)?this.targetIsObject(t)?r?a(o({},e.keyPath,r.map((function(e){return t[e]})).join("")),t):t:null:t instanceof Array?t.join(""):t}},{key:"prepareResult",value:function(e,t){var n=this.getCompositeKeys(e);return n&&this.targetIsObject(t)?n.map((function(e){return t[e]})):null}},{key:"initRequest",value:function(e){var t=this,n=e.storeName,r=e.target,o=void 0===r?null:r,i=e.action,a=e.mode,u=void 0===a?lt.readonly:a;return this.open().then((function(){return new Promise((function(e,r){if(t.indexedDbConnection){var a=t.getTransactionStore({storeName:n,mode:u},r,t.indexedDbConnection),s=a.store,c=a.options,l=s[i](t.prepareTarget(c,o,i)),d=t.prepareResult(c,o);l.onsuccess=function(){i!==ct.get||l.result?e(d||l.result||o):r({name:"NotRecordFoundError",message:'Requested record not found in "'.concat(n,'" store')})},l.onerror=function(e){return t.overrideError(r,e)}}else r(t.noConnectionError)}))}))}},{key:"initBulkRequest",value:function(e){var t=this,n=e.storeName,r=e.target,o=e.action,i=e.mode,a=void 0===i?lt.readwrite:i;return!r||r&&!r.length?Promise.reject({name:"NoTargetDefined",message:"No array provided to perform ".concat(o,' bulk operation into "').concat(n,'" store')}):this.open().then((function(){return new Promise((function(e,i){if(t.indexedDbConnection){var u=t.getTransactionStore({storeName:n,mode:a},i,t.indexedDbConnection),s=u.transaction,c=u.store,l=u.options,d=new Array,f=r[0];s.oncomplete=function(){return e(d)};!function e(n){n.onerror=function(e){return t.overrideError(i,e)},n.onsuccess=function(){d.push(t.prepareResult(l,f)||n.result),f=r[d.length],d.length1&&void 0!==arguments[1]&&arguments[1];return this.openCursor({storeName:e,action:ct.list,firstOnly:t})}},{key:"getFirst",value:function(e){return this.getAll(e,!0).then((function(e){return e.length?e[0]:void 0}))}},{key:"getItem",value:function(e,t){return this.initRequest({storeName:e,target:t,action:ct.get})}},{key:"filterBy",value:function(e,t){var n=IDBKeyRange.only(t);return this.openCursor({storeName:e,action:ct.list,range:n})}},{key:"addItem",value:function(e,t){return this.initRequest({storeName:e,target:t,action:ct.add,mode:lt.readwrite})}},{key:"addBulk",value:function(e,t,n){return this.initBulkRequest({storeName:e,target:t,action:n?ct.put:ct.add,mode:lt.readwrite})}},{key:"updateItem",value:function(e,t){return this.initRequest({storeName:e,target:t,action:ct.put,mode:lt.readwrite})}},{key:"deleteItem",value:function(e,t){return this.initRequest({storeName:e,target:t,action:ct.delete,mode:lt.readwrite})}},{key:"deleteBulk",value:function(e,t,n){var r=n?IDBKeyRange[n](t):IDBKeyRange.only(t);return this.openCursor({storeName:e,action:ct.delete,range:r,mode:lt.readwrite})}},{key:"trimItems",value:function(e,t){var n=this,r=be.right[Re(e,Pe.right)];return this.getAll(e).then((function(e){return e.length?e[t-1]:null})).then((function(t){return t?n.deleteBulk(e,t[r.keyPath],Se.UpperBound):[]}))}},{key:"count",value:function(e){var t=this;return this.open().then((function(){return new Promise((function(n,r){if(t.indexedDbConnection){var o=t.getTransactionStore({storeName:e,mode:lt.readonly},r,t.indexedDbConnection).store.count();o.onsuccess=function(){return n(o.result)},o.onerror=function(e){return t.overrideError(r,e)}}else r(t.noConnectionError)}))}))}},{key:"clear",value:function(e){return this.initRequest({storeName:e,action:ct.clear,mode:lt.readwrite})}},{key:"destroy",value:function(){this.indexedDbConnection&&this.indexedDbConnection.close(),this.indexedDbConnection=null}},{key:"deleteDatabase",value:function(){return this.destroy(),this.deleteDatabaseByName(this.dbName)}}],[{key:"tryOpen",value:function(t){return new Promise((function(n){try{var r=t.open(e.dbValidationName);r.onsuccess=function(){r.result.close(),t.deleteDatabase(e.dbValidationName),n(!0)},r.onerror=function(){return n(!1)}}catch(e){n(!1)}}))}},{key:"isSupported",value:function(){if(e.isSupportedPromise)return e.isSupportedPromise;var t="IndexedDB is not supported in this browser";return e.isSupportedPromise=new Promise((function(n){var r=e.getIndexedDB(),o=!!navigator.platform&&/iPad|iPhone|iPod/.test(navigator.platform);!r||o?(z.warn(t),n(!1)):n(e.tryOpen(r).then((function(e){return e||z.warn(t),e})))})),e.isSupportedPromise}},{key:"getIndexedDB",value:function(){return window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB}}])}();function ft(e){return function(e){if(Array.isArray(e))return k(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||S(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}o(dt,"dbValidationName","validate-db-openable"),o(dt,"isSupportedPromise",null);var mt=function(){function e(){xe(this,e)}return je(e,[{key:"open",value:function(){return e.isSupported().then((function(e){if(!e)return{status:"error",error:{name:"LSNotSupported",message:"LocalStorage is not supported"}};var t=be.storeNames.left,n=Ze.current||{},r=n&&!P(n);return x(t).filter((function(e){return!w(e,2)[1].permanent})).forEach((function(e){var t=w(e,2),o=t[0],i=t[1].name;i!==re.ActivityState||et.stores[i]?et.stores[i]||(et.stores[i]=[]):et.stores[i]=r?[Ne(o,Pe.left,n)]:[]})),st(),{status:"success"}}))}},{key:"getCompositeKeys",value:function(e){var t=e.fields[e.keyPath];return se(t)?t.composite:null}},{key:"getKeys",value:function(e){var t=Re(e,Pe.right),n=be.right[t];return this.getCompositeKeys(n)||[n.keyPath]}},{key:"nextIndex",value:function(e){return"number"==typeof e?e+1:void 0}},{key:"initRequest",value:function(e,t){var n=this,r=e.storeName,o=e.id,i=e.item,u=be.right[Re(r,Pe.right)];return this.open().then((function(e){return"error"===e.status?Promise.reject(e.error):new Promise((function(e,s){var c,l=et.stores[r],d=n.getKeys(r),f=(l[l.length-1]||{})[u.keyPath]||0;if(o){var m=Array.isArray(o)?o.slice():[o];c=d.map((function(e,t){return[e,m[t]]})).reduce(A,{})}else c=a({},i);var p=c?E(l,d,c):0;return t(e,s,{keys:d,items:l,index:p,options:u,lastId:f})}))}))}},{key:"sort",value:function(e,t,n){var r=ft(e),o=t.slice().reverse();return r.sort((function(e,t){return o.reduce((function(r,o){return r||function(e,t,r){var o=n?n===e[r]:e[r]e[r]:e[r]>t[r];return o?-1:i?1:0}(e,t,o)}),0)}))}},{key:"prepareTarget",value:function(e,t,n){var r=this.getCompositeKeys(e);return r?a(o({},e.keyPath,r.map((function(e){return t[e]})).join("")),t):e.autoIncrement&&n?a(o({},e.keyPath,n),t):a({},t)}},{key:"prepareResult",value:function(e,t){var n=this.getCompositeKeys(e);return n?n.map((function(e){return t[e]})).filter((function(e){return!we(e)})):t[e.keyPath]}},{key:"getAll",value:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return this.open().then((function(r){return"error"===r.status?Promise.reject(r.error):new Promise((function(r,o){var i=et.stores[e];i instanceof Array?r(n?[i[0]]:t.sort(i,t.getKeys(e))):o({name:"NotFoundError",message:"No objectStore named ".concat(e," in this database")})}))}))}},{key:"getFirst",value:function(e){return this.getAll(e,!0).then((function(e){return e.length?e[0]:void 0}))}},{key:"getItem",value:function(e,t){var n=this;return this.initRequest({storeName:e,id:t},(function(t,r,o){var i=o.items,a=o.index,u=o.options;-1===a?r({name:"NotRecordFoundError",message:'Requested record not found in "'.concat(e,'" store')}):t(n.prepareTarget(u,i[a]))}))}},{key:"filterBy",value:function(e,t){return this.getAll(e).then((function(n){return n.filter((function(n){var r=be.right[Re(e,Pe.right)];return(r.index&&n[r.index])===t}))}))}},{key:"addItem",value:function(e,t){var n=this;return this.initRequest({storeName:e,item:t},(function(r,o,i){var a=i.items,u=i.index,s=i.options,c=i.lastId;-1!==u?o({name:"ConstraintError",message:'Constraint was not satisfied, trying to add existing item into "'.concat(e,'" store')}):(a.push(n.prepareTarget(s,t,n.nextIndex(c))),et.stores[e]=a,r(n.prepareResult(s,t)))}))}},{key:"addBulk",value:function(e,t,n){var r=this;return this.initRequest({storeName:e},(function(o,i,a){var u=a.keys,s=a.items,c=a.options,l=a.lastId;if(!t||t&&!t.length)i({name:"NoTargetDefined",message:'No array provided to perform add bulk operation into "'.concat(e,'" store')});else{var d=l,f=t.map((function(e){return r.prepareTarget(c,e,d=r.nextIndex(d))})),m=f.filter((function(e){return-1!==E(s,u,e)})).map((function(e){return e[c.keyPath]})),p=n?s.filter((function(e){return-1===m.indexOf(e[c.keyPath])})):ft(s);if(m.length&&!n)i({name:"ConstraintError",message:'Constraint was not satisfied, trying to add existing items into "'.concat(e,'" store')});else et.stores[e]=r.sort([].concat(ft(p),ft(f)),u),o(t.map((function(e){return r.prepareResult(c,e)})))}}))}},{key:"updateItem",value:function(e,t){var n=this;return this.initRequest({storeName:e,item:t},(function(r,o,i){var a=i.items,u=i.index,s=i.options,c=i.lastId,l=-1===u?n.nextIndex(c):void 0,d=n.prepareTarget(s,t,l);-1===u?a.push(d):a.splice(u,1,d),et.stores[e]=a,r(n.prepareResult(s,t))}))}},{key:"deleteItem",value:function(e,t){return this.initRequest({storeName:e,id:t},(function(n,r,o){var i=o.items,a=o.index;-1!==a&&(i.splice(a,1),et.stores[e]=i),n(t)}))}},{key:"findMax",value:function(e,t,n){if(!e.length)return-1;for(var r={index:-1,value:"string"==typeof n?"":0},o=0;o=r.value&&(r={value:e[o][t],index:o})}return r.index}},{key:"deleteBulk",value:function(e,t,n){var r=this;return this.getAll(e).then((function(o){var i=r.getKeys(e),a=be.right[Re(e,Pe.right)].index||i[0],u=n?null:t,s=r.sort(o,i,u),c=r.findMax(s,a,t);if(-1===c)return[];var l=n===Se.LowerBound?c:0,d=n&&n!==Se.UpperBound?s.length:c+1,f=s.splice(l,d).map((function(e){return 1===i.length?e[a]:i.map((function(t){return e[t]}))}));return et.stores[e]=s,f}))}},{key:"trimItems",value:function(e,t){var n=this,r=Re(e,Pe.right),o=be.right[r];return this.getAll(e).then((function(e){return e.length?e[t-1]:null})).then((function(t){return t?n.deleteBulk(e,t[o.keyPath],Se.UpperBound):[]}))}},{key:"count",value:function(e){return this.open().then((function(t){if("error"===t.status)return Promise.reject(t.error);var n=et.stores[e];return Promise.resolve(n instanceof Array?n.length:1)}))}},{key:"clear",value:function(e){return this.open().then((function(t){return"error"===t.status?Promise.reject(t.error):new Promise((function(t){et.stores[e]=[],t()}))}))}},{key:"destroy",value:function(){}},{key:"deleteDatabase",value:function(){}}],[{key:"isSupported",value:function(){return e.isSupportedPromise||(e.isSupportedPromise=new Promise((function(e){var t=T();t||z.warn("LocalStorage is not supported in this browser"),e(t)}))),e.isSupportedPromise}}])}();o(mt,"isSupportedPromise",null);var pt,vt=function(e){return e[e.noStorage=p.NO_STORAGE]="noStorage",e[e.indexedDB=p.INDEXED_DB]="indexedDB",e[e.localStorage=p.LOCAL_STORAGE]="localStorage",e}(vt||{}),ht={getAll:function(e,t,n){return e.getAll(t,n).then((function(e){return Ee(t,Pe.right,e)}))},getFirst:function(e,t){return e.getFirst(t).then((function(e){return Ne(t,Pe.right,e)}))},getItem:function(e,t,n){return e.getItem(t,Oe(t,Pe.left,n)).then((function(e){return Ne(t,Pe.right,e)})).catch((function(e){return Promise.reject(Ae(t,e))}))},filterBy:function(e,t,n){return e.filterBy(t,Ie(n)).then((function(e){return Ee(t,Pe.right,e)}))},addItem:function(e,t,n){var r=Ne(t,Pe.left,n);return e.addItem(t,r).then((function(e){return Oe(t,Pe.right,e)})).catch((function(e){return Promise.reject(Ae(t,e))}))},addBulk:function(e,t,n,r){var o=Ee(t,Pe.left,n);return e.addBulk(t,o,r).then((function(e){return e.map((function(e){return Oe(t,Pe.right,e)}))})).catch((function(e){return Promise.reject(Ae(t,e))}))},updateItem:function(e,t,n){var r=Ne(t,Pe.left,n);return e.updateItem(t,r).then((function(e){return Oe(t,Pe.right,e)}))},deleteItem:function(e,t,n){return e.deleteItem(t,Oe(t,Pe.left,n)).then((function(e){return Oe(t,Pe.right,e)}))},deleteBulk:function(e,t,n,r){return e.deleteBulk(t,Ie(n),r).then((function(e){return e.map((function(e){return Oe(t,Pe.right,e)}))}))},trimItems:function(e,t,n){return e.trimItems(t,n)},count:function(e,t){return e.count(t)},clear:function(e,t){return e.clear(t)},destroy:function(e){return e.destroy()},deleteDatabase:function(e){return e.deleteDatabase()}};var gt=null;function yt(e){var t=null;return null!==gt?gt:gt=Promise.all([dt.isSupported(),mt.isSupported()]).then((function(n){var r=w(n,2),o=r[0],i=r[1];if(et.setCustomName(e),o){pt=vt.indexedDB;var a=new dt;return a.setCustomName(e).then((function(){return t=a}))}return i?(pt=vt.localStorage,t=new mt,Promise.resolve(t)):(z.error("There is no storage available, app will run with minimum set of features"),pt=vt.noStorage,t=null,Promise.resolve(t))})).then((function(){return{type:pt,storage:t}}))}const bt=a({init:yt,getType:function(){return pt}},(kt=x(ht).map((function(e){var t=w(e,2),n=t[0],r=t[1];return[n,function(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),o=1;o2&&void 0!==arguments[2]&&arguments[2]?"CONTINUE":"RETRY",response:N(e.responseText)?JSON.parse(e.responseText):e.responseText,message:m[t],code:t}}function Pt(e,t){var n=e.slice(0,e.length-t.length-1).split("").reduce((function(e){return e.concat(" ")}),"");return"".concat(t).concat(n,":")}function Dt(e,t){var n="REQUEST PARAMETERS:",r=function(e){return e.replace(/([A-Z])/g,(function(e){return"_".concat(e.toLowerCase())}))},o=x(a(a(a({},te.getBaseParams()),t),e)).map((function(e){var t=w(e,2),n=t[0],o=t[1];return[r(n),o]}));return z.log(n),o.filter((function(e){return j(w(e,2)[1])})).map((function(e){var t=w(e,2),r=t[0],o=t[1];return z.log(Pt(n,r),o),function(e){var t=w(e,2),n=t[0],r=t[1],o=encodeURIComponent(n),i=r;return"string"==typeof r&&(i=encodeURIComponent(r)),D(r)&&(i=encodeURIComponent(JSON.stringify(r)||"")),[o,i].join("granular_third_party_sharing_options"===n||"partner_sharing_settings"===n?encodeURIComponent("="):"=")}([r,o])})).join("&")}function Nt(e,t,n){var r=n.xhr,o=n.url;if(4===r.readyState){var i=r.status>=200&&r.status<300,a=N(r.responseText);if(0!==r.status)return a?t(i?function(e,t){var n=JSON.parse(e.responseText),r={status:"success",adid:n.adid,timestamp:n.timestamp,ask_in:n.ask_in,retry_in:n.retry_in,continue_in:n.continue_in,tracking_state:n.tracking_state,attribution:void 0,message:void 0};return R(t,"attribution")&&(r.attribution=n.attribution,r.message=n.message),x(r).filter((function(e){return!!w(e,2)[1]})).reduce(A,{})}(r,o):wt(r,"SERVER_CANNOT_PROCESS",!0)):e(wt(r,i?"SERVER_MALFORMED_RESPONSE":"SERVER_INTERNAL_ERROR"));e(wt(r,"NO_CONNECTION"))}}function Et(e,t){var n=e.endpoint,r=e.url,o=e.method,i=void 0===o?"GET":o,a=e.params,u=function(e,t){var n=e.endpoint,r=e.url,o=e.method,i=Dt(e.params,t);return{fullUrl:n+r+("GET"===o?"?".concat(i):""),encodedParams:i}}({endpoint:n,url:r,method:i,params:void 0===a?{}:a},t),s=u.fullUrl,c=u.encodedParams;return new Promise((function(e,t){var n=new XMLHttpRequest;n.open(i,s,!0),function(e,t){var n="REQUEST HEADERS:",r=[["Client-SDK","js".concat(_.version)],["Content-Type","POST"===t?"application/x-www-form-urlencoded":"application/json"]];z.log(n),r.forEach((function(t){var r=w(t,2),o=r[0],i=r[1];e.setRequestHeader(o,i),z.log(Pt(n,o),i)}))}(n,i),n.onreadystatechange=function(){return Nt(t,e,{xhr:n,url:r})},n.onerror=function(){return t(wt(n,"TRANSACTION_ERROR"))},n.send("GET"===i?void 0:c)}))}function Ot(e,t){return"success"===e.status?function(e,t){var n=R(t,"gdpr_forget_device"),r=R(t,"attribution"),o=R(t,"session"),i="opted_out"===e.tracking_state;if(!n&&i)return qe("sdk:gdpr-forget-me"),e;r||n||i||!e.ask_in||qe("attribution:check",e);o&&qe("session:finished",e);return e}(e,t):e}var It={long:{delay:2*c,maxDelay:d,minRange:.5,maxRange:1},short:{delay:200,maxDelay:l,minRange:.5,maxRange:1},test:{delay:100,maxDelay:300}};function Rt(e,t){var n,r,o=It[t=t||"long"],i=o.delay*Math.pow(2,e-1);return i=Math.min(i,o.maxDelay),o.minRange&&o.maxRange&&(i*=(n=o.minRange,r=o.maxRange,Math.random()*(r-n)+n)),Math.round(i)}var At=navigator.onLine;function xt(){At=!0}function Ct(){At=!1}function jt(e,t,n){e.addEventListener&&e.addEventListener(t,n,!1)}function Tt(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)}function _t(e){return{domains:[e.default,e.world],useSubdomains:!0,isDataResidency:!1}}var Bt=function(e){return e.Default="default",e.India="india",e.China="china",e}(Bt||{});function Ut(e,t){z.warn("Both ".concat(e," and ").concat(t," are set in config, ").concat(t," will be ignored"))}function Lt(e){return function(e){var t=te.getCustomConfig(),n=t.customUrl,r=t.urlStrategy,o=t.dataResidency;if(n)return z.warn("customUrl is deprecated, use urlStrategy instead"),(o||r)&&Ut("customUrl",o?"dataResidency":"urlStrategy"),{domains:[n],useSubdomains:!1,isDataResidency:!1};if(o&&r&&Ut("dataResidency","urlStrategy"),o)return z.warn("dataResidency is deprecated, use urlStrategy instead"),{domains:[e[o]],useSubdomains:!0,isDataResidency:!0};if("string"==typeof r){if(z.warn("urlStrategy string literals ('china' and 'india') are deprected, use UrlStartegyConfig instead"),r===Bt.India)return{domains:[e.india,e.default],useSubdomains:!0,isDataResidency:!1};if(r===Bt.China)return{domains:[e.china,e.default],useSubdomains:!0,isDataResidency:!1}}return r?null:_t(e)}(e)||function(e){var t=te.getCustomConfig().urlStrategy;if(t&&"object"===n(t)){var r=t;return!r.domains||!Array.isArray(r.domains)||r.domains.length<1?(z.warn("Invalid urlStartegy: `domains` should be a non-empty array"),_t(e)):{domains:r.domains,useSubdomains:!!r.useSubdomains,isDataResidency:!!r.isDataResidency}}return _t(e)}(e)}function Kt(e){var t,n=Lt(e),r=[],o=function(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=S(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0,o=function(){};return{s:o,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,a=!0,u=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return a=e.done,e},e:function(e){u=!0,i=e},f:function(){try{a||null==n.return||n.return()}finally{if(u)throw i}}}}(n.domains);try{for(o.s();!(t=o.n()).done;){var i=t.value,a=n.useSubdomains?{app:"".concat(h).concat(i),gdpr:"".concat(g).concat(i)}:{app:"".concat(y).concat(i),gdpr:"".concat(y).concat(i)};r.push(a)}}catch(e){o.e(e)}finally{o.f()}return r}var qt=150,Gt=2147483647,Mt=60*s;const Ft=function(){var e,t,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=n.url,o=n.method,i=void 0===o?"GET":o,u=n.params,s=void 0===u?{}:u,c=n.continueCb,l=n.strategy,d=n.wait,f={url:r,method:i,params:s,continueCb:c},p=r,h=i,g=a({},s),y=c,b=l,k=function(){e.reset(),t=e.next()},S=function(e,t){return e["/gdpr_forget_device"===t?"gdpr":"app"]},D=null,N={request:0,connection:0},E=I(d),O=null;function I(e){return(e=e||qt)>Gt?Gt:e}function R(n){var r=n.wait,o=n.retrying;return e||(e=function(){var e=Kt(arguments.length>0&&void 0!==arguments[0]?arguments[0]:v),t=0;return{next:function(){return t0&&void 0!==arguments[0]?arguments[0]:{},t=e.url,n=e.method,r=e.params,o=void 0===r?{}:r,i=e.continueCb,u=e.wait;return function(e){var t=e.url,n=e.method,r=e.params,o=e.continueCb;t&&(p=t),n&&(h=n),P(r)||(g=a({},r)),g=a({createdAt:_e()},g),"function"==typeof o&&(y=o)}({url:t,method:n,params:o,continueCb:i}),R({wait:u})},isRunning:function(){return!!D},clear:L}};var Wt=function(e){return e===f.REASON_GDPR?"GDPR disable":"disable"},Vt=function(e){return{start:{inProgress:"Adjust SDK ".concat(Wt(e)," process has already started"),done:"Adjust SDK ".concat(Wt(e)," process is now started")},finish:{inProgress:"Adjust SDK ".concat(Wt(e)," process has already finished"),done:"Adjust SDK ".concat(Wt(e)," process is now finished")}}};function Ht(e,t){var n=e.reason,r=e.pending,o=it()||{},i=o.reason,a=o.pending,u="start"===t&&a?"start":"finish";return"start"===t&&i||"finish"===t&&i&&!a?(z.log(Vt(i)[u].inProgress),!1):(z.log(Vt(n)[u].done),at({reason:n||f.REASON_GENERAL,pending:r}),!0)}function Yt(e){return Ht({reason:e,pending:arguments.length>1&&void 0!==arguments[1]&&arguments[1]},"start")}function zt(){var e=it()||{},t=e.reason,n=e.pending;return t===f.REASON_GENERAL||t===f.REASON_GDPR&&!n?"off":t===f.REASON_GDPR&&n?"paused":"on"}var Jt=ne.ActivityState,Qt=!1;function Xt(e){return e?"unknown"===e.uuid?(Yt(f.REASON_GDPR),Ze.destroy(),{exists:!0,stored:null}):(Ze.init(e),{exists:!0,stored:e}):{exists:!1}}function Zt(){return"off"!==zt()&&Ze.isStarted()}function $t(){if(!Zt())return Promise.resolve(null);var e=a(a({},Ze.current),{},{lastActive:Date.now()});return bt.updateItem(Jt,e).then((function(){return Ze.current=e}))}var en=Ft({strategy:"long",continueCb:function(e,t){var n=e&&e.continue_in||null;return rn.pause=n?{timestamp:Date.now(),wait:n}:null,bt.getFirst(nn).then((function(e){return e?bt.deleteItem(nn,e.timestamp):null})).then((function(){return t(),rn.running=!1,sn({wait:n})}))}}),tn=!1,nn="queue",rn={running:!1,timestamp:null,pause:null};function on(){var e=Date.now();return rn.timestamp&&e<=rn.timestamp&&(e=rn.timestamp+1),rn.timestamp=e,e}function an(e){var t=e.url,n=e.method,r=e.params,o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=o.auto,u=o.timestamp;Ze.updateParams(t,i);var s=x(r||{}).filter((function(e){return j(w(e,2)[1])})).reduce(A,{}),c={timestamp:on(),url:t,method:n,params:a(a({},Ze.getParams(t)),s)};return u&&(c.createdAt=u),bt.addItem(nn,c).then((function(){return function(e){return R(e,"session")&&Ze.resetSessionOffset(),Ze.updateLastActive(),$t()}(t)})).then((function(){return rn.running?{}:sn()}))}function un(){var e=rn.pause||{},t=e.timestamp,n=e.wait,r=Date.now()-(t||0);return r0&&void 0!==arguments[0]?arguments[0]:{},t=e.cleanUp,n=e.wait;if(rn.running)return Promise.resolve({});rn.running=!0;var r=Promise.resolve({});return t&&(r=r.then(ln)),r.then((function(){return bt.getFirst(nn)})).then((function(e){return function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.timestamp,n=e.createdAt,r=e.url,o=e.method,i=e.params,u=arguments.length>1?arguments[1]:void 0,s=Ze.current||{},c="/session"===r&&!s.installed;return tn&&!c||!r&&!o&&!i?(rn.running=!1,Promise.resolve({})):en.send({url:r,method:o,params:a(a({},i),{},{createdAt:_e(n||t)}),wait:u||un()})}(e,n)}))}function cn(e){if(void 0!==e)if(e!==tn){var t=tn;tn=e,!e&&t&&sn(),z.info("The app is now in ".concat(e?"offline":"online"," mode"))}else z.error("The app is already in ".concat(e?"offline":"online"," mode"));else z.error("State not provided, true or false has to be defined")}function ln(){var e=Date.now()-te.requestValidityWindow;return bt.deleteBulk(nn,e,"upperBound")}var dn="globalParams",fn={short:"No type provided",long:"Global parameter type not provided, `callback` or `partner` types are available"};function mn(e){return(e||[]).map((function(e){return{key:e.key,value:e.value}}))}function pn(){return Promise.all([bt.filterBy(dn,"callback"),bt.filterBy(dn,"partner")]).then((function(e){var t=w(e,2),n=t[0],r=t[1];return{callbackParams:mn(n),partnerParams:mn(r)}}))}function vn(e,t){if(void 0===t)return z.error(fn.long),Promise.reject({message:fn.short});var n=O(e),r=Object.keys(n).map((function(e){return{key:e,value:n[e],type:t}}));return Promise.all([bt.filterBy(dn,t),bt.addBulk(dn,r,!0)]).then((function(e){var n=w(e,2),o=n[0],i=n[1],a=I(o.map((function(e){return e.key})),i.map((function(e){return e[0]})));return z.log("Following ".concat(t," parameters have been saved: ").concat(r.map((function(e){return"".concat(e.key,":").concat(e.value)})).join(", "))),a.length&&z.log("Keys: ".concat(a.join(", ")," already existed so their values have been updated")),i}))}function hn(e,t){return void 0===t?(z.error(fn.long),Promise.reject({message:fn.short})):bt.deleteItem(dn,[e,t]).then((function(n){return z.log("".concat(e," ").concat(t," parameter has been deleted")),n}))}function gn(e){return void 0===e?(z.error(fn.long),Promise.reject({message:fn.short})):bt.deleteBulk(dn,e).then((function(t){return z.log("All ".concat(e," parameters have been deleted")),t}))}var yn,bn,kn,Sn=!1,wn=document;function Pn(){return kn=function(){var e=document;if(void 0!==e.hidden)return{hidden:"hidden",visibilityChange:"visibilitychange"};for(var t=x({mozHidden:"mozvisibilitychange",msHidden:"msvisibilitychange",oHidden:"ovisibilitychange",webkitHidden:"webkitvisibilitychange"}),n=0;n0;return!n||n&&t*s>=te.sessionWindow?pn().then((function(e){var t,n,r;an({url:"/session",method:"POST",params:(t=e,n=t.callbackParams,r=t.partnerParams,{callbackParams:n.length?O(n):null,partnerParams:r.length?O(r):null})},{auto:!0})})):(qe("attribution:check"),$t())}var xn=Ft({url:"/attribution",strategy:"short",continueCb:function(e,t,n){if(!e||e&&"error"===e.status)return t(),Promise.resolve({state:"unknown"});if(!e.ask_in)return t(),function(e){if(P(e)||!function(e){var t=e.adid,n=void 0===t?"":t,r=e.attribution,o=void 0===r?{}:r;return!!n&&!!I(Cn,Object.keys(o)).length}(e)||function(e){var t=e.adid,n=e.attribution,r=Ze.current.attribution||{},o=n&&Cn.some((function(e){return r[e]!==n[e]}));return!o&&t===r.adid}(e))return Promise.resolve({state:"same"});var t=x(e.attribution).filter((function(e){var t=w(e,1)[0];return-1!==Cn.indexOf(t)})).reduce(A,{adid:e.adid});return Ze.current=a(a({},Ze.current),{},{attribution:t}),$t().then((function(){return qe("attribution:change",t),qe(b.ATTRIBUTION_RECEIVED,t),z.info("Attribution has been updated"),{state:"changed"}}))}(e);return n(e.ask_in)}}),Cn=["tracker_token","tracker_name","network","campaign","adgroup","creative","click_label","state"];var jn=Ft({url:"/gdpr_forget_device",method:"POST",strategy:"short"}),Tn={running:"Adjust SDK is running pending GDPR Forget Me request",pending:"Adjust SDK will run GDPR Forget Me request after initialisation",paused:"Adjust SDK is already prepared to send GDPR Forget Me request",off:"Adjust SDK is already disabled"};function _n(e){var t=zt();return e||"on"===t?te.isInitialised()?(jn.send({params:a({},Ze.getParams())}).then((function(){qe("sdk:gdpr-forget-me")})),!0):(z.log(Tn.pending),!0):(z.log(Tn[t]),!1)}function Bn(){return Ht({reason:f.REASON_GDPR,pending:!1},"finish")}var Un=[];function Ln(e,t){Un.push({method:e,description:t,timestamp:Date.now()})}var Kn=10,qn="eventDeduplication";function Gn(e,t){var n,r,o=t.callbackParams,i=t.partnerParams,u={},s=a({eventToken:e.eventToken,deduplicationId:e.deduplicationId},(n=e.revenue,r=e.currency,isNaN(n)||(n=parseFloat(n))<0||!r?{}:{revenue:n.toFixed(5),currency:r})),c=a(a({},O(o)),O(e.callbackParams)),l=a(a({},O(i)),O(e.partnerParams));return P(c)||(u.callbackParams=c),P(l)||(u.partnerParams=l),a(a({},s),u)}function Mn(e){return e?bt.getAll(qn).then((function(e){return e.map((function(e){return e.id}))})).then((function(t){return-1===t.indexOf(e)?function(e){var t=te.getCustomConfig().eventDeduplicationListLimit,n=t>0?t:Kn;return bt.count(qn).then((function(e){var t=Promise.resolve();if(e>=n){var r=e-n+1;z.log("Event deduplication list limit has been reached. Oldest ids are about to be removed (".concat(r," of them)")),t=bt.trimItems(qn,r)}return t})).then((function(){return z.info("New event deduplication id is added to the list: ".concat(e)),bt.addItem(qn,{id:e})}))}(e):Promise.reject({message:"Event won't be tracked, since it was previously tracked with the same deduplication id ".concat(e)})})):Promise.resolve()}function Fn(e){return{clickTime:_e(),source:"web_referrer",referrer:decodeURIComponent(e)}}function Wn(e,t){var n;(n=e||window.location.search.substring(1).split("&").map((function(e){return e.split("=")})).reduce(A,{}).adjust_referrer)&&an({url:"/sdk_click",method:"POST",params:Fn(n)},{timestamp:t})}var Vn=["logLevel","logOutput"],Hn=null,Yn=!1,zn=!1,Jn=!1;function Qn(e){ar("third-party sharing",(function(){return Ze.waitForWebUUID().then((function(){return function(e){e&&void 0!==e.isEnabled?an({url:"/third_party_sharing",method:"POST",params:{sharing:e.isEnabled?"enable":"disable",granularThirdPartySharingOptions:e.granularOptions,partnerSharingSettings:e.partnerSharingSettings}}):z.error("Can not track third-party sharing without parameters")}(e)}))}),{schedule:!1,optionalInit:!0})}function Xn(){var e;"paused"===zt()&&(Bn(),Promise.all([(e={uuid:"unknown"},Ze.current=e,bt.clear(Jt).then((function(){return bt.addItem(Jt,e)}))),bt.clear(dn),bt.clear(nn)]).then(tr))}function Zn(){return Yn||te.isInitialised()}function $n(){Yn=!1,zn=!1,Un=[],en.clear(),rn.running=!1,rn.timestamp=null,rn.pause=null,Sn=!1,Ze.toBackground(),Rn(),kn&&(clearTimeout(bn),Tt(wn,kn.visibilityChange,En),jt(wn,kn.visibilityChange,On)),xn.clear()}function er(e){e&&z.log("Adjust SDK has been shutdown due to asynchronous disable"),$n(),Le.forEach(clearTimeout),Le=[],Ue={},Ze.destroy(),Tt(window,"online",xt),Tt(window,"offline",Ct),bt.destroy(),te.destroy()}function tr(){Jn=!1,er(),jn.clear(),Hn=null,z.log("Adjust SDK instance has been destroyed")}function nr(e){z.log("Adjust SDK is starting with web_uuid set to ".concat(e.uuid));var t=Ze.current.installed;"paused"===zt()&&(z.log(Tn.running),_n(!0));var n=zt(),r=function(e){return"Adjust SDK start has been interrupted ".concat(e)};return"off"===n?(er(),Promise.reject({interrupted:!0,message:r("due to complete async disable")})):"paused"===n?($n(),Promise.reject({interrupted:!0,message:r("due to partial async disable")})):zn?Promise.reject({interrupted:!0,message:r("due to multiple synchronous start attempt")}):(sn({cleanUp:!0}),Pn().then((function(){Yn=!1,zn=!0,t&&rr()})))}function rr(){var e;Jn=!0,Un.forEach((function(e){"function"==typeof e.method&&(z.log("Delayed ".concat(e.description," task is running now")),e.method(e.timestamp))})),Un=[],(e="sdk:installed")&&x(Ue).some((function(t){var n=w(t,2)[1];return n.some((function(t,r){t.id===e&&n.splice(r,1)}))}))}function or(e){if(e.interrupted)z.log(e.message);else if(er(),z.error("Adjust SDK start has been canceled due to an error",e),e.stack)throw e}function ir(e){"off"!==zt()?(te.set(e),jt(window,"online",xt),jt(window,"offline",Ct),Ke("sdk:installed",rr),Ke("sdk:shutdown",(function(){return er(!0)})),Ke("sdk:gdpr-forget-me",Xn),Ke("attribution:check",(function(e,t){return n=t,r=Ze.current,(o=(n||{}).ask_in)||!r.attribution&&r.installed?(xn.send({params:a({initiatedBy:n?"backend":"sdk"},Ze.getParams()),wait:o}),Ze.updateSessionOffset(),$t()):Promise.resolve(r);var n,r,o})),"function"==typeof e.attributionCallback&&Ke("attribution:change",e.attributionCallback),(Qt?Promise.reject({interrupted:!0,message:"Adjust SDK start already in progress"}):(Qt=!0,bt.getFirst(Jt).then(Xt).then((function(e){if(e.exists)return Qt=!1,e.stored;var t,n=P(Ze.current)?{uuid:(t=Date.now(),"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,(function(e){var n=(t+16*Math.random())%16|0;return t=Math.floor(t/16),("x"===e?n:11&n).toString(16)})))}:Ze.current;return bt.addItem(Jt,n).then((function(){return Ze.init(n),ut(),Qt=!1,n}))})).then((function(e){return qe(b.WEB_UUID_CREATED,e?e.uuid:"gdpr_forgotten"),e})))).then(nr).then(Wn).catch(or)):z.log("Adjust SDK is disabled, can not start the sdk")}function ar(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=n.schedule,o=n.waitForInitFinished,i=n.optionalInit;if(bt.getType()!==p.NO_STORAGE)if("on"===zt())if(i||Zn()||!o){if("function"==typeof t){if(!r||Jn&&zn||!i&&!Zn())return t();Ln(t,e),z.log("Running ".concat(e," is delayed until Adjust SDK is up"))}}else z.error("Adjust SDK can not ".concat(e,", sdk instance is not initialized"));else z.log("Adjust SDK is disabled, can not ".concat(e));else z.log("Adjust SDK can not ".concat(e,", no storage available"))}const ur={initSdk:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.logLevel,n=e.logOutput,r=u(e,Vn);z.setLogLevel(t,n),Zn()?z.error("You already initiated your instance"):te.hasMissing(r)||(Yn=!0,bt.init(r.namespace).then((function(e){e.type!==p.NO_STORAGE?(z.info("Available storage is ".concat(e.type)),Hn=a({},r),ir(r)):z.error("Adjust SDK can not start, there is no storage available")})))},getAttribution:function(){return ar("get attribution",(function(){return Ze.getAttribution()}))},getWebUUID:function(){return ar("get web_uuid",(function(){return Ze.getWebUUID()}))},waitForAttribution:function(){return ar("get attribution",(function(){return Ze.waitForAttribution()}),{schedule:!1})},waitForWebUUID:function(){return ar("get web_uuid",(function(){return Ze.waitForWebUUID()}),{schedule:!1})},setReferrer:function(e){e&&"string"==typeof e?ar("setting reftag",(function(t){return Wn(e,t)}),{schedule:!0,waitForInitFinished:!0,optionalInit:!0}):z.error("You must provide a string referrer")},trackEvent:function(e){return function(e){if(bt.getType()===p.NO_STORAGE){var t="Adjust SDK can not track event, no storage available";return z.log(t),Promise.reject(t)}if("on"!==zt()){var n="Adjust SDK is disabled, can not track event";return z.log(n),Promise.reject(n)}if(!Zn()){var r="Adjust SDK can not track event, sdk instance is not initialized";return z.error(r),Promise.reject(r)}return new Promise((function(t){var n=function(n){return t(function(e,t){if(!e||e&&(P(e)||!e.eventToken)){var n="You must provide event token in order to track event";return z.error(n),Promise.reject(n)}return Mn(e.deduplicationId).then(pn).then((function(n){return an({url:"/event",method:"POST",params:Gn(e,n)},{timestamp:t})})).catch((function(e){return e&&e.message&&z.error(e.message),Promise.reject(e)}))}(e,n))};!Jn||!zn&&Zn()?(Ln(n,"track event"),z.log("Running track event is delayed until Adjust SDK is up")):n()}))}(e)},addGlobalCallbackParameters:function(e){ar("add global callback parameters",(function(){return vn(e,"callback")}))},addGlobalPartnerParameters:function(e){ar("add global partner parameters",(function(){return vn(e,"partner")}))},removeGlobalCallbackParameter:function(e){ar("remove global callback parameter",(function(){return hn(e,"callback")}))},removeGlobalPartnerParameter:function(e){ar("remove global partner parameter",(function(){return hn(e,"partner")}))},clearGlobalCallbackParameters:function(){ar("remove all global callback parameters",(function(){return gn("callback")}))},clearGlobalPartnerParameters:function(){ar("remove all global partner parameters",(function(){return gn("partner")}))},switchToOfflineMode:function(){ar("set offline mode",(function(){return cn(!0)}))},switchBackToOnlineMode:function(){ar("set online mode",(function(){return cn(!1)}))},stop:function(){Yt()&&te.isInitialised()&&er()},restart:function(){var e;((e=(it()||{}).reason)===f.REASON_GDPR?(z.log("Adjust SDK is disabled due to GDPR-Forget-Me request and it can not be re-enabled"),!1):e?(z.log("Adjust SDK has been enabled"),at(null),!0):(z.log("Adjust SDK is already enabled"),!1))&&Hn&&ir(Hn)},gdprForgetMe:function(){var e=_n();e&&(e=Yt(f.REASON_GDPR,!0))&&te.isInitialised()&&$n()},disableThirdPartySharing:function(){Qn({isEnabled:!1})},trackThirdPartySharing:Qn,ThirdPartySharing:function(){return je((function e(t){xe(this,e),o(this,"_granularOptions",{}),o(this,"_partnerSharingSettings",{}),"boolean"!=typeof t&&z.warn("isEnabled should be boolean, converting ".concat(t," results ").concat(!!t)),this._isEnabled=!!t}),[{key:"isEnabled",get:function(){return this._isEnabled}},{key:"granularOptions",get:function(){return this._granularOptions}},{key:"partnerSharingSettings",get:function(){return this._partnerSharingSettings}},{key:"addGranularOption",value:function(e,t,n){if(e&&t&&void 0!==n){var r=o({},t,n);this.granularOptions[e]?this.granularOptions[e]=a(a({},this.granularOptions[e]),r):this.granularOptions[e]=r}else z.error("Cannot add granular option, partnerName, key and value are mandatory")}},{key:"addPartnerSharingSetting",value:function(e,t,n){if(e&&t&&void 0!==n){var r=o({},t,n);this.partnerSharingSettings[e]?this.partnerSharingSettings[e]=a(a({},this.partnerSharingSettings[e]),r):this.partnerSharingSettings[e]=r}else z.error("Cannot add partner sharing setting, partnerName, key and value are mandatory")}}])}(),initSmartBanner:function(){z.error("function `initSmartBanner` is deprecated")},showSmartBanner:function(){z.error("function `showSmartBanner` is deprecated")},hideSmartBanner:function(){z.error("function `hideSmartBanner` is deprecated")},__testonly__:{destroy:tr,clearDatabase:function(){return bt.deleteDatabase()}},__internal__:{restartAfterAsyncEnable:function(){z.log("Adjust SDK has been restarted due to asynchronous enable"),Hn&&ir(Hn)}}};return t=t.default})())); \ No newline at end of file diff --git a/dist/sdk.snippet-sri.min.js b/dist/sdk.snippet-sri.min.js index 22dc7a2..eb9abf8 100644 --- a/dist/sdk.snippet-sri.min.js +++ b/dist/sdk.snippet-sri.min.js @@ -1 +1 @@ -!function(a,e,t,r,n,o,i,l,s,c,d){var m=i+"_q";a[i]=a[i]||{},a[m]=a[m]||[];for(var b=0;b