Skip to content

Commit

Permalink
- Started refactoring of sender/transport api
Browse files Browse the repository at this point in the history
fixed few issues with publishers bundle

Changed transports api

Changed closure compilation  logic
commit_hash:d0216d9bd5e5011f515bcf0dc9e2dad06e689f28
  • Loading branch information
Stanislavsky34200 committed Oct 28, 2024
1 parent f4f2678 commit 3de0fb2
Show file tree
Hide file tree
Showing 29 changed files with 290 additions and 188 deletions.
12 changes: 7 additions & 5 deletions .mapping.json
Original file line number Diff line number Diff line change
Expand Up @@ -155,10 +155,6 @@
"src/providers/debugConsole/debugConsole.ts":"metrika/frontend/watch/public/src/providers/debugConsole/debugConsole.ts",
"src/providers/debugConsole/debugEnabled.ts":"metrika/frontend/watch/public/src/providers/debugConsole/debugEnabled.ts",
"src/providers/debugConsole/index.ts":"metrika/frontend/watch/public/src/providers/debugConsole/index.ts",
"src/providers/debugEvents/debugRequest.ts":"metrika/frontend/watch/public/src/providers/debugEvents/debugRequest.ts",
"src/providers/debugEvents/index.ts":"metrika/frontend/watch/public/src/providers/debugEvents/index.ts",
"src/providers/debugEvents/types.ts":"metrika/frontend/watch/public/src/providers/debugEvents/types.ts",
"src/providers/debugEvents/wrapLoggerFunction.ts":"metrika/frontend/watch/public/src/providers/debugEvents/wrapLoggerFunction.ts",
"src/providers/destruct/__tests__/destruct.spec.ts":"metrika/frontend/watch/public/src/providers/destruct/__tests__/destruct.spec.ts",
"src/providers/destruct/const.ts":"metrika/frontend/watch/public/src/providers/destruct/const.ts",
"src/providers/destruct/destruct.ts":"metrika/frontend/watch/public/src/providers/destruct/destruct.ts",
Expand Down Expand Up @@ -287,6 +283,7 @@
"src/sender/middleware/__test__/middleware.spec.ts":"metrika/frontend/watch/public/src/sender/middleware/__test__/middleware.spec.ts",
"src/sender/middleware/__test__/returnFullHost.spec.ts":"metrika/frontend/watch/public/src/sender/middleware/__test__/returnFullHost.spec.ts",
"src/sender/middleware/index.ts":"metrika/frontend/watch/public/src/sender/middleware/index.ts",
"src/sender/middleware/manualMiddlewareSender.ts":"metrika/frontend/watch/public/src/sender/middleware/manualMiddlewareSender.ts",
"src/sender/middleware/middleware.ts":"metrika/frontend/watch/public/src/sender/middleware/middleware.ts",
"src/sender/middleware/returnFullHost.ts":"metrika/frontend/watch/public/src/sender/middleware/returnFullHost.ts",
"src/sender/types.ts":"metrika/frontend/watch/public/src/sender/types.ts",
Expand Down Expand Up @@ -326,6 +323,7 @@
"src/transport/jsonp/__tests__/jsonp.spec.ts":"metrika/frontend/watch/public/src/transport/jsonp/__tests__/jsonp.spec.ts",
"src/transport/jsonp/index.ts":"metrika/frontend/watch/public/src/transport/jsonp/index.ts",
"src/transport/jsonp/jsonp.ts":"metrika/frontend/watch/public/src/transport/jsonp/jsonp.ts",
"src/transport/transportsMap.ts":"metrika/frontend/watch/public/src/transport/transportsMap.ts",
"src/transport/types.ts":"metrika/frontend/watch/public/src/transport/types.ts",
"src/transport/watchModes.ts":"metrika/frontend/watch/public/src/transport/watchModes.ts",
"src/transport/xhr/__tests__/xhr.spec.ts":"metrika/frontend/watch/public/src/transport/xhr/__tests__/xhr.spec.ts",
Expand Down Expand Up @@ -392,7 +390,7 @@
"src/utils/counterOptions/counterOptions.ts":"metrika/frontend/watch/public/src/utils/counterOptions/counterOptions.ts",
"src/utils/counterOptions/getCounterKey.ts":"metrika/frontend/watch/public/src/utils/counterOptions/getCounterKey.ts",
"src/utils/counterOptions/index.ts":"metrika/frontend/watch/public/src/utils/counterOptions/index.ts",
"src/utils/counterOptions/originalOptionsState.ts":"metrika/frontend/watch/public/src/utils/counterOptions/originalOptionsState.ts",
"src/utils/counterOptions/saveCounterOptions.ts":"metrika/frontend/watch/public/src/utils/counterOptions/saveCounterOptions.ts",
"src/utils/counterOptions/types.ts":"metrika/frontend/watch/public/src/utils/counterOptions/types.ts",
"src/utils/counterSettings/const.ts":"metrika/frontend/watch/public/src/utils/counterSettings/const.ts",
"src/utils/counterSettings/counterSettings.ts":"metrika/frontend/watch/public/src/utils/counterSettings/counterSettings.ts",
Expand All @@ -401,6 +399,10 @@
"src/utils/dataLayerObserver/__tests__/dataLayerObserver.spec.ts":"metrika/frontend/watch/public/src/utils/dataLayerObserver/__tests__/dataLayerObserver.spec.ts",
"src/utils/dataLayerObserver/dataLayerObserver.ts":"metrika/frontend/watch/public/src/utils/dataLayerObserver/dataLayerObserver.ts",
"src/utils/dataLayerObserver/index.ts":"metrika/frontend/watch/public/src/utils/dataLayerObserver/index.ts",
"src/utils/debugEvents/debugRequest.ts":"metrika/frontend/watch/public/src/utils/debugEvents/debugRequest.ts",
"src/utils/debugEvents/index.ts":"metrika/frontend/watch/public/src/utils/debugEvents/index.ts",
"src/utils/debugEvents/types.ts":"metrika/frontend/watch/public/src/utils/debugEvents/types.ts",
"src/utils/debugEvents/wrapLoggerFunction.ts":"metrika/frontend/watch/public/src/utils/debugEvents/wrapLoggerFunction.ts",
"src/utils/decoder/__tests__/decoder.spec.ts":"metrika/frontend/watch/public/src/utils/decoder/__tests__/decoder.spec.ts",
"src/utils/decoder/decoder.ts":"metrika/frontend/watch/public/src/utils/decoder/decoder.ts",
"src/utils/decoder/index.ts":"metrika/frontend/watch/public/src/utils/decoder/index.ts",
Expand Down
1 change: 0 additions & 1 deletion features.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@
},
{
"code": "DEBUG_EVENTS_FEATURE",
"path": "debugEvents",
"desc": "Creates dataLayer bus for debugging purposes"
},
{
Expand Down
33 changes: 16 additions & 17 deletions src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,7 @@ import {
ProviderResultPromised,
MetrikaCounterConstructor,
} from 'src/types';
import {
normalizeOptions,
getCounterKey,
normalizeOriginalOptions,
} from 'src/utils/counterOptions';
import { normalizeOptions, getCounterKey } from 'src/utils/counterOptions';
import {
bindArgs,
firstArg,
Expand All @@ -32,8 +28,12 @@ import {
TRACK_HASH_FEATURE,
TELEMETRY_FEATURE,
STACK_PROXY_FEATURE,
DEBUG_EVENTS_FEATURE,
} from 'generated/features';
import { optionsKeysMap } from 'src/providers/counterOptions';
import {
getOriginalOptions,
optionsKeysMap,
} from 'src/providers/counterOptions';
import { flags } from '@inject';
import { telemetryCallCountDecorator } from 'src/utils/methodDecorators/telCallCount';
import {
Expand All @@ -60,7 +60,8 @@ import { throwFunction } from './utils/errorLogger/throwFunction';
import { yaNamespace, ASYNC_PROVIDERS_MAX_EXEC_TIME } from './const';
import { stackProxy } from './providers/stackProxy/stackProxy';
import { DUPLICATE_COUNTERS_CONSOLE_MESSAGE } from './providers/consoleRenderer/dictionary';
import { saveOriginalOptions } from './utils/counterOptions/originalOptionsState';
import { saveCounterOptions } from './utils/counterOptions/saveCounterOptions';
import { dispatchDebuggerEvent } from './utils/debugEvents';

type CounterMethod = keyof CounterObject;
const globalConfig = getGlobalStorage(window);
Expand Down Expand Up @@ -190,16 +191,7 @@ const MetrikaCounter: MetrikaCounterConstructor = function MetrikaCounter(
return counters[counterKey];
}

saveOriginalOptions(
ctx,
counterKey,
normalizeOriginalOptions(
counterId,
counterParams,
counterType,
counterDefer,
),
);
saveCounterOptions(ctx, counterKey, counterOptions);
counters[counterKey] = this;
globalConfig.setVal(COUNTERS_GLOBAL_KEY, counters);
globalConfig.setSafe('counter', this);
Expand Down Expand Up @@ -235,6 +227,13 @@ const MetrikaCounter: MetrikaCounterConstructor = function MetrikaCounter(
);

cForEach(callProvider, providersSync);
if (flags[DEBUG_EVENTS_FEATURE]) {
dispatchDebuggerEvent(ctx, {
['counterKey']: getCounterKey(counterOptions),
['name']: 'counter',
['data']: getOriginalOptions(counterOptions),
});
}

return undefined;
})();
Expand Down
2 changes: 1 addition & 1 deletion src/middleware/params/__tests__/params.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import { SenderInfo } from 'src/sender/SenderInfo';
import * as storage from 'src/storage/global';
import * as config from 'src/config';
import * as json from 'src/utils/json';
import * as debug from 'src/providers/debugEvents';
import * as debug from 'src/utils/debugEvents';
import { getRange } from 'src/utils/array';
import { paramsMiddleware } from '../params';

Expand Down
2 changes: 1 addition & 1 deletion src/middleware/params/params.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { DEBUG_EVENTS_FEATURE, TURBO_PARAMS_FEATURE } from 'generated/features';
import { DEFER_KEY, PAGE_VIEW_BR_KEY, REQUEST_BODY_KEY } from 'src/api/watch';
import { config } from 'src/config';
import { MiddlewareGetter } from 'src/middleware/types';
import { dispatchDebuggerEvent } from 'src/providers/debugEvents';
import { dispatchDebuggerEvent } from 'src/utils/debugEvents';
import { METHOD_NAME_PARAMS } from 'src/providers/params/const';
import type { SenderInfo } from 'src/sender/SenderInfo';
import { cFilter, cForEach, head, indexOfWin } from 'src/utils/array';
Expand Down
15 changes: 9 additions & 6 deletions src/middleware/providerMiddlewares.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { cForEach, cMap, head } from 'src/utils/array';
import { cForEach, cMap, head, isArray } from 'src/utils/array';
import {
MiddlewareGetter,
Middleware,
Expand Down Expand Up @@ -36,7 +36,9 @@ export const addCommonMiddleware = bindArg(
/**
* A mapping between providers and corresponding middleware chains.
*/
export const providerMiddlewareList: ProvidersMap<MiddlewareWeightTuple[]> = {
export const providerMiddlewareList: Partial<
ProvidersMap<MiddlewareWeightTuple[]>
> = {
[HIT_PROVIDER]: commonMiddlewares,
};

Expand All @@ -53,16 +55,17 @@ addCommonMiddleware(prepareUrlMiddleware, -100);
/**
* Gets middlewares of specified provider
* @param ctx - Current window
* @param provider - The provider whose middlewares will be returned
* @param providerOrMiddlewares - The provider whose middlewares will be returned, or middlewares list to be to be supplemented with universal middlewares
* @param opt - Counter options on initialization
*/
export const getProviderMiddlewares = (
ctx: Window,
provider: Provider,
providerOrMiddlewares: Provider | MiddlewareWeightTuple[],
opt: CounterOptions,
) => {
const middlewareList =
providerMiddlewareList[provider] || commonMiddlewares;
const middlewareList = isArray(providerOrMiddlewares)
? providerOrMiddlewares
: providerMiddlewareList[providerOrMiddlewares] || commonMiddlewares;
const returnMiddlewares = cMap(head, middlewareList);
cForEach(
(middleware) => returnMiddlewares.unshift(middleware),
Expand Down
2 changes: 1 addition & 1 deletion src/providers/clicks/clicks.ts
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ import {
import { flags } from '@inject';
import { DEBUG_EVENTS_FEATURE } from 'generated/features';
import { toZeroOrOne } from 'src/utils/boolean';
import { dispatchDebuggerEvent } from 'src/utils/debugEvents';
import {
INTERNAL_LINK_STORAGE_KEY,
MAX_LEN_INTERNAL_LINK,
Expand All @@ -72,7 +73,6 @@ import type {
AddFileExtensionHandler,
} from './types';
import { textFromLink } from './getTextFromLink';
import { dispatchDebuggerEvent } from '../debugEvents';
import {
EMPTY_LINK_CONSOLE_MESSAGE,
LINK_CLICK_CONSOLE_MESSAGE,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
import * as sinon from 'sinon';
import * as chai from 'chai';
import * as eventsUtils from 'src/utils/debugEvents';
import { DebuggerEvent } from 'src/utils/debugEvents/types';
import { useConsoleRendererRaw } from '../consoleRenderer';
import * as observerUtils from '../../../utils/dataLayerObserver';
import * as consoleUtils from '../../../utils/console';
import * as eventsUtils from '../../debugEvents';
import {
CONSOLE_DICTIONARY,
EMPTY_LINK_CONSOLE_MESSAGE,
PAGE_VIEW_CONSOLE_MESSAGE,
} from '../dictionary';
import { DebuggerEvent } from '../../debugEvents/types';

describe('consoleRenderer', () => {
const sandbox = sinon.createSandbox();
Expand Down
2 changes: 1 addition & 1 deletion src/providers/consoleRenderer/consoleRenderer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import { cMap } from 'src/utils/array';
import { has } from 'src/utils/object';
import { isString } from 'src/utils/string';
import { globalMemoWin } from 'src/utils/function';
import { getEvents } from '../debugEvents';
import { getEvents } from 'src/utils/debugEvents';
import { CONSOLE_DICTIONARY, variableRegex } from './dictionary';

export const getMessage = (
Expand Down
2 changes: 1 addition & 1 deletion src/providers/debugConsole/__tests__/debugConsole.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import {
} from 'generated/features';
import * as inject from '@inject';
import { noop } from 'src/utils/function';
import * as debuggerEventsUtils from 'src/providers/debugEvents';
import * as debuggerEventsUtils from 'src/utils/debugEvents';
import { DebugConsole } from '../debugConsole';
import { DEBUG_URL_PARAM } from '../const';

Expand Down
2 changes: 1 addition & 1 deletion src/providers/debugConsole/debugConsole.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import {
import { flags } from '@inject';
import { CounterOptions, getCounterKey } from 'src/utils/counterOptions';
import { isCounterKeySilent } from 'src/utils/isCounterSilent';
import { dispatchDebuggerEvent } from 'src/providers/debugEvents';
import { dispatchDebuggerEvent } from 'src/utils/debugEvents';
import { isArray } from 'src/utils/array';

/**
Expand Down
14 changes: 7 additions & 7 deletions src/providers/destruct/__tests__/destruct.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,23 +2,23 @@ import * as chai from 'chai';
import * as sinon from 'sinon';
import * as globalStorage from 'src/storage/global';
import { CounterOptions } from 'src/utils/counterOptions';
import * as optionsUtils from 'src/utils/counterOptions/originalOptionsState';
import * as optionsUtils from 'src/utils/counterOptions/saveCounterOptions';
import { destruct } from '../destruct';

describe('destruct provider', () => {
const sandbox = sinon.createSandbox();
let deleteOriginalOptions: sinon.SinonStub<
Parameters<typeof optionsUtils.deleteOriginalOptions>,
ReturnType<typeof optionsUtils.deleteOriginalOptions>
let deleteCounterOptions: sinon.SinonStub<
Parameters<typeof optionsUtils.deleteCounterOptions>,
ReturnType<typeof optionsUtils.deleteCounterOptions>
>;
const gs = {
getVal: sandbox.stub(),
};

beforeEach(() => {
deleteOriginalOptions = sandbox.stub(
deleteCounterOptions = sandbox.stub(
optionsUtils,
'deleteOriginalOptions',
'deleteCounterOptions',
);
sandbox.stub(globalStorage, 'getGlobalStorage').returns(gs as any);
});
Expand Down Expand Up @@ -51,7 +51,7 @@ describe('destruct provider', () => {
destructor();

sinon.assert.calledOnceWithExactly(
deleteOriginalOptions,
deleteCounterOptions,
windowStub,
counterKey,
);
Expand Down
4 changes: 2 additions & 2 deletions src/providers/destruct/destruct.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { CounterOptions, getCounterKey } from 'src/utils/counterOptions';
import { cForEach } from 'src/utils/array';
import type { AnyFunc } from 'src/utils/function/types';
import { isFunction } from 'src/utils/object';
import { deleteOriginalOptions } from 'src/utils/counterOptions/originalOptionsState';
import { deleteCounterOptions } from 'src/utils/counterOptions/saveCounterOptions';
import { DestructHandler } from './const';

type UnsubscribeCallbacks = (AnyFunc | undefined)[];
Expand Down Expand Up @@ -32,7 +32,7 @@ export const destruct = ctxErrorLogger(
errorLogger(ctx, `dest.fr.${index}`, cb)(),
unsubscribeMethods,
);
deleteOriginalOptions(ctx, getCounterKey(counterOptions));
deleteCounterOptions(ctx, getCounterKey(counterOptions));
delete globalConfig.getVal<{ [key: string]: unknown }>('counters')[
getCounterKey(counterOptions)
];
Expand Down
2 changes: 1 addition & 1 deletion src/providers/ecommerce/ecommerce.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ import {
import { getCounterSettings } from 'src/utils/counterSettings';
import { isString } from 'src/utils/string';
import { getGlobalStorage } from 'src/storage/global';
import { dispatchDebuggerEvent } from 'src/providers/debugEvents';
import { dispatchDebuggerEvent } from 'src/utils/debugEvents';
import {
handleTagManagerEcommerce,
handleEcommerce,
Expand Down
2 changes: 1 addition & 1 deletion src/providers/ecommerce/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import { convertToString } from 'src/utils/string';
import { ecommerce } from './ecommerce';
import { ECOMMERCE_PARAMS_KEY } from './const';

declare module 'src/providers/debugEvents/types' {
declare module 'src/utils/debugEvents/types' {
export type EcommerceEvent = DebuggerEventGeneric<
'ecommerce',
Record<string, any>
Expand Down
2 changes: 1 addition & 1 deletion src/providers/goal/goal.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import { getLoggerFn } from 'src/providers/debugConsole/debugConsole';
import { isFunction } from 'src/utils/object';
import { flags } from '@inject';
import { DEBUG_EVENTS_FEATURE } from 'generated/features';
import { dispatchDebuggerEvent } from 'src/utils/debugEvents';
import { getArtificialState } from '../artificialHit/artificialHit';
import {
GOAL_PROVIDER,
Expand All @@ -23,7 +24,6 @@ import {
METHOD_NAME_GOAL,
} from './const';

import { dispatchDebuggerEvent } from '../debugEvents';
import { GOAL_REACH_CONSOLE_MESSAGE } from '../consoleRenderer/dictionary';

const getGoalLocation = (
Expand Down
4 changes: 1 addition & 3 deletions src/providers/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,4 @@ export interface PROVIDERS {

export type Provider = PROVIDERS[keyof PROVIDERS];

export type ProvidersMap<T> = {
[provider in Provider]?: T;
};
export type ProvidersMap<T> = Partial<Record<Provider, T>>;
2 changes: 1 addition & 1 deletion src/sender/default/default.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import {
debugLogRequest,
logRequestFailure,
logRequestSuccess,
} from 'src/providers/debugEvents/debugRequest';
} from 'src/utils/debugEvents/debugRequest';
import { CONTENT_TYPE_HEADER } from './const';
import { createQuery } from './query';

Expand Down
40 changes: 40 additions & 0 deletions src/sender/middleware/manualMiddlewareSender.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
import { getProviderMiddlewares } from 'src/middleware';
import { MiddlewareWeightTuple } from 'src/middleware/types';
import { Provider } from 'src/providers/index';
import { getTransportList } from 'src/transport';
import { TransportId } from 'src/transport/transportsMap';
import { CounterOptions } from 'src/utils/counterOptions';
import { InternalSenderInfo, SenderInfo } from 'src/sender/SenderInfo';
import { mix } from 'src/utils/object';
import { useMiddlewareSender } from './middleware';

export const useManualMiddlewareSender = (
ctx: Window,
counterOpt: CounterOptions,
provider: Provider,
transportIds?: TransportId[],
middlewareList?: MiddlewareWeightTuple[],
) => {
const transports = getTransportList(ctx, provider, transportIds);
const middlewares = getProviderMiddlewares(
ctx,
middlewareList || provider,
counterOpt,
);

const sender = useMiddlewareSender(ctx, transports, middlewares);

return (senderInfo: SenderInfo) => {
const debugStack: (string | number)[] = [`mms.${provider}`];
const internalSenderInfo: InternalSenderInfo = mix(
{
transportInfo: {
debugStack,
},
},
senderInfo,
);

return sender(internalSenderInfo);
};
};
Loading

0 comments on commit 3de0fb2

Please sign in to comment.