@yametrica/core 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,32 @@
1
+ import { Methods } from "./methods.js";
2
+ import { HitOptions, InitParameters, People, UserParameters, VisitParameters } from "./types.js";
3
+
4
+ //#region src/client.d.ts
5
+ type YandexMetricaClientParams = {
6
+ clientID: string; /** Enable console log on method calls @default false */
7
+ debug?: boolean; /** Enable sending data to Yandex Metrica @default false */
8
+ enabled?: boolean;
9
+ };
10
+ type YandexMetricaClient = {
11
+ [Methods.Init]: (options?: Partial<InitParameters>) => void;
12
+ [Methods.AddFileExtension]: (extensions?: string | string[]) => void;
13
+ [Methods.ExtLink]: <CTX>(url: string, options?: Omit<HitOptions<CTX>, "referer">) => void;
14
+ [Methods.File]: <CTX>(url: string, options?: HitOptions<CTX>) => void;
15
+ [Methods.FirstPartyParams]: (people: People) => void;
16
+ [Methods.FirstPartyParamsHashed]: (people: People) => void;
17
+ [Methods.GetClientID]: (cb: (clientID: number) => void) => void;
18
+ [Methods.Hit]: <CTX>(url?: string, options?: HitOptions<CTX>) => void;
19
+ [Methods.NotBounce]: <CTX>(options?: Pick<HitOptions<CTX>, "ctx" | "callback">) => void;
20
+ [Methods.Params]: (params?: VisitParameters) => void;
21
+ [Methods.ReachGoal]: <CTX>(target: string, params?: VisitParameters, callback?: (this: CTX) => void, ctx?: CTX) => void;
22
+ [Methods.SetUserID]: (userId: string) => void;
23
+ [Methods.UserParams]: (params?: UserParameters) => void;
24
+ };
25
+ declare function createYandexMetricaClient({
26
+ clientID,
27
+ debug,
28
+ enabled
29
+ }: YandexMetricaClientParams): YandexMetricaClient;
30
+ //#endregion
31
+ export { YandexMetricaClient, YandexMetricaClientParams, createYandexMetricaClient };
32
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","names":[],"sources":["../src/client.ts"],"mappings":";;;;KAIY,yBAAA;EACR,QAAA,UADQ;EAGR,KAAA;EAEA,OAAA;AAAA;AAAA,KAGQ,mBAAA;EAAA,CACP,OAAA,CAAQ,IAAA,IAAQ,OAAA,GAAU,OAAA,CAAQ,cAAA;EAAA,CAClC,OAAA,CAAQ,gBAAA,IAAoB,UAAA;EAAA,CAC5B,OAAA,CAAQ,OAAA,SAAgB,GAAA,UAAa,OAAA,GAAU,IAAA,CAAK,UAAA,CAAW,GAAA;EAAA,CAC/D,OAAA,CAAQ,IAAA,SAAa,GAAA,UAAa,OAAA,GAAU,UAAA,CAAW,GAAA;EAAA,CACvD,OAAA,CAAQ,gBAAA,IAAoB,MAAA,EAAQ,MAAA;EAAA,CACpC,OAAA,CAAQ,sBAAA,IAA0B,MAAA,EAAQ,MAAA;EAAA,CAC1C,OAAA,CAAQ,WAAA,IAAe,EAAA,GAAK,QAAA;EAAA,CAC5B,OAAA,CAAQ,GAAA,SAAY,GAAA,WAAc,OAAA,GAAU,UAAA,CAAW,GAAA;EAAA,CACvD,OAAA,CAAQ,SAAA,SAAkB,OAAA,GAAU,IAAA,CAAK,UAAA,CAAW,GAAA;EAAA,CACpD,OAAA,CAAQ,MAAA,IAAU,MAAA,GAAS,eAAA;EAAA,CAC3B,OAAA,CAAQ,SAAA,SACL,MAAA,UACA,MAAA,GAAS,eAAA,EACT,QAAA,IAAY,IAAA,EAAM,GAAA,WAClB,GAAA,GAAM,GAAA;EAAA,CAET,OAAA,CAAQ,SAAA,IAAa,MAAA;EAAA,CACrB,OAAA,CAAQ,UAAA,IAAc,MAAA,GAAS,cAAA;AAAA;AAAA,iBAGpB,yBAAA,CAAA;EACZ,QAAA;EACA,KAAA;EACA;AAAA,GACD,yBAAA,GAA4B,mBAAA"}
package/dist/client.js ADDED
@@ -0,0 +1,2 @@
1
+ import{ym as e}from"./ym.js";function t({clientID:t,debug:n=!1,enabled:r=!1}){return new Proxy({},{get:(i,a)=>(...i)=>{n&&console.log(`[yandex-metrica] (${t}) ${a}:`,...i),r&&e(t,a,...i)}})}export{t as createYandexMetricaClient};
2
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","names":[],"sources":["../src/client.ts"],"sourcesContent":["import type { Methods } from \"./methods\";\r\nimport type { HitOptions, InitParameters, People, UserParameters, VisitParameters } from \"./types\";\r\nimport { ym } from \"./ym\";\r\n\r\nexport type YandexMetricaClientParams = {\r\n clientID: string;\r\n /** Enable console log on method calls @default false */\r\n debug?: boolean;\r\n /** Enable sending data to Yandex Metrica @default false */\r\n enabled?: boolean;\r\n};\r\n\r\nexport type YandexMetricaClient = {\r\n [Methods.Init]: (options?: Partial<InitParameters>) => void;\r\n [Methods.AddFileExtension]: (extensions?: string | string[]) => void;\r\n [Methods.ExtLink]: <CTX>(url: string, options?: Omit<HitOptions<CTX>, \"referer\">) => void;\r\n [Methods.File]: <CTX>(url: string, options?: HitOptions<CTX>) => void;\r\n [Methods.FirstPartyParams]: (people: People) => void;\r\n [Methods.FirstPartyParamsHashed]: (people: People) => void;\r\n [Methods.GetClientID]: (cb: (clientID: number) => void) => void;\r\n [Methods.Hit]: <CTX>(url?: string, options?: HitOptions<CTX>) => void;\r\n [Methods.NotBounce]: <CTX>(options?: Pick<HitOptions<CTX>, \"ctx\" | \"callback\">) => void;\r\n [Methods.Params]: (params?: VisitParameters) => void;\r\n [Methods.ReachGoal]: <CTX>(\r\n target: string,\r\n params?: VisitParameters,\r\n callback?: (this: CTX) => void,\r\n ctx?: CTX,\r\n ) => void;\r\n [Methods.SetUserID]: (userId: string) => void;\r\n [Methods.UserParams]: (params?: UserParameters) => void;\r\n};\r\n\r\nexport function createYandexMetricaClient({\r\n clientID,\r\n debug = false,\r\n enabled = false,\r\n}: YandexMetricaClientParams): YandexMetricaClient {\r\n return new Proxy({} as YandexMetricaClient, {\r\n get: (_, method: Methods) => {\r\n return (...args: unknown[]) => {\r\n if (debug) console.log(`[yandex-metrica] (${clientID}) ${method}:`, ...args);\r\n\r\n if (enabled) ym(clientID, method, ...args);\r\n };\r\n },\r\n });\r\n}\r\n"],"mappings":"6BAiCA,SAAgB,EAA0B,CACtC,WACA,QAAQ,GACR,UAAU,IACqC,CAC/C,OAAO,IAAI,MAAM,EAAE,CAAyB,CACxC,KAAM,EAAG,KACG,GAAG,IAAoB,CACvB,GAAO,QAAQ,IAAI,qBAAqB,EAAS,IAAI,EAAO,GAAI,GAAG,EAAK,CAExE,GAAS,EAAG,EAAU,EAAQ,GAAG,EAAK,EAGrD,CAAC"}
@@ -0,0 +1,72 @@
1
+ import { ActionField, CurrencyCode, ProductField, PromoField } from "./types.js";
2
+
3
+ //#region src/e-commerce.d.ts
4
+ type YandexECommerceParams = {
5
+ /** Enable console log on method calls @default false */debug?: boolean; /** Enable sending data to Yandex Metrica @default false */
6
+ enabled?: boolean; /** @default "RUB" */
7
+ defaultCurrencyCode?: CurrencyCode;
8
+ };
9
+ declare function createYandexECommerce(params: YandexECommerceParams): {
10
+ impressions: ({
11
+ products,
12
+ currencyCode
13
+ }: {
14
+ products: ProductField[];
15
+ currencyCode?: CurrencyCode;
16
+ }) => void;
17
+ click: ({
18
+ products,
19
+ currencyCode
20
+ }: {
21
+ products: ProductField[];
22
+ currencyCode?: CurrencyCode;
23
+ }) => void;
24
+ detail: ({
25
+ products,
26
+ currencyCode
27
+ }: {
28
+ products: ProductField[];
29
+ currencyCode?: CurrencyCode;
30
+ }) => void;
31
+ add: ({
32
+ products,
33
+ currencyCode
34
+ }: {
35
+ products: ProductField[];
36
+ currencyCode?: CurrencyCode;
37
+ }) => void;
38
+ remove: ({
39
+ products,
40
+ currencyCode
41
+ }: {
42
+ products: ProductField[];
43
+ currencyCode?: CurrencyCode;
44
+ }) => void;
45
+ purchase: ({
46
+ products,
47
+ actionField,
48
+ currencyCode
49
+ }: {
50
+ actionField: ActionField;
51
+ products: ProductField[];
52
+ currencyCode?: CurrencyCode;
53
+ }) => void;
54
+ promoView: ({
55
+ promotions,
56
+ currencyCode
57
+ }: {
58
+ promotions: PromoField[];
59
+ currencyCode?: CurrencyCode;
60
+ }) => void;
61
+ promoClick: ({
62
+ promotions,
63
+ currencyCode
64
+ }: {
65
+ promotions: PromoField[];
66
+ currencyCode?: CurrencyCode;
67
+ }) => void;
68
+ };
69
+ type YandexECommerce = ReturnType<typeof createYandexECommerce>;
70
+ //#endregion
71
+ export { YandexECommerce, YandexECommerceParams, createYandexECommerce };
72
+ //# sourceMappingURL=e-commerce.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"e-commerce.d.ts","names":[],"sources":["../src/e-commerce.ts"],"mappings":";;;KASY,qBAAA;0DAER,KAAA,YAF6B;EAI7B,OAAA,YAEkC;EAAlC,mBAAA,GAAsB,YAAA;AAAA;AAAA,iBAGV,qBAAA,CAAsB,MAAA,EAAQ,qBAAA;;;;;IAgBtC,QAAA,EAAU,YAAA;IACV,YAAA,GAAe,YAAA;EAAA;;;;;IAmBf,QAAA,EAAU,YAAA;IACV,YAAA,GAAe,YAAA;EAAA;;;;;IAmBf,QAAA,EAAU,YAAA;IACV,YAAA,GAAe,YAAA;EAAA;;;;;IAkBf,QAAA,EAAU,YAAA;IACV,YAAA,GAAe,YAAA;EAAA;;;;;IAkBf,QAAA,EAAU,YAAA;IACV,YAAA,GAAe,YAAA;EAAA;;;;;;IAmBf,WAAA,EAAa,WAAA;IACb,QAAA,EAAU,YAAA;IACV,YAAA,GAAe,YAAA;EAAA;;;;;IAmBf,UAAA,EAAY,UAAA;IACZ,YAAA,GAAe,YAAA;EAAA;;;;;IAkBf,UAAA,EAAY,UAAA;IACZ,YAAA,GAAe,YAAA;EAAA;AAAA;AAAA,KA2BX,eAAA,GAAkB,UAAA,QAAkB,qBAAA"}
@@ -0,0 +1,2 @@
1
+ function e(e){let t=e.defaultCurrencyCode??`RUB`;function n(t,n){if(!window.dataLayer)return console.error("[yandex-metrica] `ecommerce` must be set to `true` in your metrica client options");e.debug&&console.log(`[yandex-metrica] ecommerce ${n??`push`}`,t),e.enabled&&window.dataLayer.push(t)}function r({products:e,currencyCode:r=t}){n({ecommerce:{currencyCode:r,impressions:{products:e}}},`impressions`)}function i({products:e,currencyCode:r=t}){n({ecommerce:{currencyCode:r,click:{products:e}}},`click`)}function a({products:e,currencyCode:r=t}){n({ecommerce:{currencyCode:r,detail:{products:e}}},`detail`)}function o({products:e,currencyCode:r=t}){n({ecommerce:{currencyCode:r,add:{products:e}}},`add`)}function s({products:e,currencyCode:r=t}){n({ecommerce:{currencyCode:r,remove:{products:e}}},`remove`)}function c({products:e,actionField:r,currencyCode:i=t}){n({ecommerce:{currencyCode:i,purchase:{actionField:r,products:e}}},`purchase`)}function l({promotions:e,currencyCode:r=t}){n({ecommerce:{currencyCode:r,promoView:{promotions:e}}},`promoView`)}function u({promotions:e,currencyCode:r=t}){n({ecommerce:{currencyCode:r,promoClick:{promotions:e}}},`promoClick`)}return{impressions:r,click:i,detail:a,add:o,remove:s,purchase:c,promoView:l,promoClick:u}}export{e as createYandexECommerce};
2
+ //# sourceMappingURL=e-commerce.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"e-commerce.js","names":[],"sources":["../src/e-commerce.ts"],"sourcesContent":["import type {\n ActionField,\n CurrencyCode,\n ECommerceActionType,\n ECommerceContainer,\n ProductField,\n PromoField,\n} from \"./types\";\n\nexport type YandexECommerceParams = {\n /** Enable console log on method calls @default false */\n debug?: boolean;\n /** Enable sending data to Yandex Metrica @default false */\n enabled?: boolean;\n /** @default \"RUB\" */\n defaultCurrencyCode?: CurrencyCode;\n};\n\nexport function createYandexECommerce(params: YandexECommerceParams) {\n const defaultCurrencyCode = params.defaultCurrencyCode ?? \"RUB\";\n\n function push(container: ECommerceContainer, action?: ECommerceActionType) {\n if (!window.dataLayer)\n return console.error(\"[yandex-metrica] `ecommerce` must be set to `true` in your metrica client options\");\n\n if (params.debug) console.log(`[yandex-metrica] ecommerce ${action ?? \"push\"}`, container);\n\n if (params.enabled) window.dataLayer.push(container);\n }\n\n function impressions({\n products,\n currencyCode = defaultCurrencyCode,\n }: {\n products: ProductField[];\n currencyCode?: CurrencyCode;\n }) {\n push(\n {\n ecommerce: {\n currencyCode,\n impressions: {\n products,\n },\n },\n },\n \"impressions\",\n );\n }\n\n function click({\n products,\n currencyCode = defaultCurrencyCode,\n }: {\n products: ProductField[];\n currencyCode?: CurrencyCode;\n }) {\n push(\n {\n ecommerce: {\n currencyCode,\n click: {\n products,\n },\n },\n },\n \"click\",\n );\n }\n\n function detail({\n products,\n currencyCode = defaultCurrencyCode,\n }: {\n products: ProductField[];\n currencyCode?: CurrencyCode;\n }) {\n push(\n {\n ecommerce: {\n currencyCode,\n detail: {\n products,\n },\n },\n },\n \"detail\",\n );\n }\n function add({\n products,\n currencyCode = defaultCurrencyCode,\n }: {\n products: ProductField[];\n currencyCode?: CurrencyCode;\n }) {\n push(\n {\n ecommerce: {\n currencyCode,\n add: {\n products,\n },\n },\n },\n \"add\",\n );\n }\n function remove({\n products,\n currencyCode = defaultCurrencyCode,\n }: {\n products: ProductField[];\n currencyCode?: CurrencyCode;\n }) {\n push(\n {\n ecommerce: {\n currencyCode,\n remove: {\n products,\n },\n },\n },\n \"remove\",\n );\n }\n function purchase({\n products,\n actionField,\n currencyCode = defaultCurrencyCode,\n }: {\n actionField: ActionField;\n products: ProductField[];\n currencyCode?: CurrencyCode;\n }) {\n push(\n {\n ecommerce: {\n currencyCode,\n purchase: {\n actionField,\n products,\n },\n },\n },\n \"purchase\",\n );\n }\n function promoView({\n promotions,\n currencyCode = defaultCurrencyCode,\n }: {\n promotions: PromoField[];\n currencyCode?: CurrencyCode;\n }) {\n push(\n {\n ecommerce: {\n currencyCode,\n promoView: {\n promotions,\n },\n },\n },\n \"promoView\",\n );\n }\n function promoClick({\n promotions,\n currencyCode = defaultCurrencyCode,\n }: {\n promotions: PromoField[];\n currencyCode?: CurrencyCode;\n }) {\n push(\n {\n ecommerce: {\n currencyCode,\n promoClick: {\n promotions,\n },\n },\n },\n \"promoClick\",\n );\n }\n\n return {\n impressions,\n click,\n detail,\n add,\n remove,\n purchase,\n promoView,\n promoClick,\n } satisfies Record<ECommerceActionType, unknown>;\n}\n\nexport type YandexECommerce = ReturnType<typeof createYandexECommerce>;\n"],"mappings":"AAkBA,SAAgB,EAAsB,EAA+B,CACjE,IAAM,EAAsB,EAAO,qBAAuB,MAE1D,SAAS,EAAK,EAA+B,EAA8B,CACvE,GAAI,CAAC,OAAO,UACR,OAAO,QAAQ,MAAM,oFAAoF,CAEzG,EAAO,OAAO,QAAQ,IAAI,8BAA8B,GAAU,SAAU,EAAU,CAEtF,EAAO,SAAS,OAAO,UAAU,KAAK,EAAU,CAGxD,SAAS,EAAY,CACjB,WACA,eAAe,GAIhB,CACC,EACI,CACI,UAAW,CACP,eACA,YAAa,CACT,WACH,CACJ,CACJ,CACD,cACH,CAGL,SAAS,EAAM,CACX,WACA,eAAe,GAIhB,CACC,EACI,CACI,UAAW,CACP,eACA,MAAO,CACH,WACH,CACJ,CACJ,CACD,QACH,CAGL,SAAS,EAAO,CACZ,WACA,eAAe,GAIhB,CACC,EACI,CACI,UAAW,CACP,eACA,OAAQ,CACJ,WACH,CACJ,CACJ,CACD,SACH,CAEL,SAAS,EAAI,CACT,WACA,eAAe,GAIhB,CACC,EACI,CACI,UAAW,CACP,eACA,IAAK,CACD,WACH,CACJ,CACJ,CACD,MACH,CAEL,SAAS,EAAO,CACZ,WACA,eAAe,GAIhB,CACC,EACI,CACI,UAAW,CACP,eACA,OAAQ,CACJ,WACH,CACJ,CACJ,CACD,SACH,CAEL,SAAS,EAAS,CACd,WACA,cACA,eAAe,GAKhB,CACC,EACI,CACI,UAAW,CACP,eACA,SAAU,CACN,cACA,WACH,CACJ,CACJ,CACD,WACH,CAEL,SAAS,EAAU,CACf,aACA,eAAe,GAIhB,CACC,EACI,CACI,UAAW,CACP,eACA,UAAW,CACP,aACH,CACJ,CACJ,CACD,YACH,CAEL,SAAS,EAAW,CAChB,aACA,eAAe,GAIhB,CACC,EACI,CACI,UAAW,CACP,eACA,WAAY,CACR,aACH,CACJ,CACJ,CACD,aACH,CAGL,MAAO,CACH,cACA,QACA,SACA,MACA,SACA,WACA,YACA,aACH"}
@@ -0,0 +1,5 @@
1
+ import { ActionField, CurrencyCode, ECommerceActionData, ECommerceActionType, ECommerceActions, ECommerceActionsData, ECommerceContainer, HitOptions, InitParameters, People, ProductField, PromoField, UserParameters, VisitParameters } from "./types.js";
2
+ import { YandexMetricaClient, YandexMetricaClientParams, createYandexMetricaClient } from "./client.js";
3
+ import { YandexECommerce, YandexECommerceParams, createYandexECommerce } from "./e-commerce.js";
4
+ import { createYandexMetricaNoscript, createYandexMetricaScript } from "./script.js";
5
+ export { ActionField, CurrencyCode, ECommerceActionData, ECommerceActionType, ECommerceActions, ECommerceActionsData, ECommerceContainer, HitOptions, InitParameters, People, ProductField, PromoField, UserParameters, VisitParameters, YandexECommerce, YandexECommerceParams, YandexMetricaClient, YandexMetricaClientParams, createYandexECommerce, createYandexMetricaClient, createYandexMetricaNoscript, createYandexMetricaScript };
package/dist/index.js ADDED
@@ -0,0 +1 @@
1
+ import{createYandexMetricaClient as e}from"./client.js";import{createYandexECommerce as t}from"./e-commerce.js";import{createYandexMetricaNoscript as n,createYandexMetricaScript as r}from"./script.js";export{t as createYandexECommerce,e as createYandexMetricaClient,n as createYandexMetricaNoscript,r as createYandexMetricaScript};
@@ -0,0 +1,20 @@
1
+ //#region src/methods.d.ts
2
+ declare const Methods: {
3
+ readonly Init: "init";
4
+ readonly AddFileExtension: "addFileExtension";
5
+ readonly ExtLink: "extLink";
6
+ readonly File: "file";
7
+ readonly FirstPartyParams: "firstPartyParams";
8
+ readonly FirstPartyParamsHashed: "firstPartyParamsHashed";
9
+ readonly GetClientID: "getClientID";
10
+ readonly Hit: "hit";
11
+ readonly NotBounce: "notBounce";
12
+ readonly Params: "params";
13
+ readonly ReachGoal: "reachGoal";
14
+ readonly SetUserID: "setUserID";
15
+ readonly UserParams: "userParams";
16
+ };
17
+ type Methods = (typeof Methods)[keyof typeof Methods];
18
+ //#endregion
19
+ export { Methods };
20
+ //# sourceMappingURL=methods.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"methods.d.ts","names":[],"sources":["../src/methods.ts"],"mappings":";cAAa,OAAA;EAAA;;;;;;;;;;;;;;KAgBD,OAAA,WAAkB,OAAA,eAAsB,OAAA"}
@@ -0,0 +1,15 @@
1
+ //#region src/script.d.ts
2
+ /** Create string for Yandex Metrica script tag
3
+ *
4
+ * Default src is https://mc.yandex.ru/metrika/tag.js
5
+ *
6
+ * You could also use a CDN version: https://cdn.jsdelivr.net/npm/yandex-metrica-watch/tag.js
7
+ */
8
+ declare function createYandexMetricaScript(src?: string): string;
9
+ /**
10
+ * Create inner html string for Yandex Metrica noscript tag
11
+ */
12
+ declare function createYandexMetricaNoscript(clientID: string): string;
13
+ //#endregion
14
+ export { createYandexMetricaNoscript, createYandexMetricaScript };
15
+ //# sourceMappingURL=script.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"script.d.ts","names":[],"sources":["../src/script.ts"],"mappings":";;AAMA;;;;;iBAAgB,yBAAA,CAA0B,GAAA;;;;iBAY1B,2BAAA,CAA4B,QAAA"}
package/dist/script.js ADDED
@@ -0,0 +1,7 @@
1
+ function e(e=`https://mc.yandex.ru/metrika/tag.js`){return`
2
+ (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
3
+ m[i].l=1*new Date();
4
+ for (var j = 0; j < document.scripts.length; j++) {if (document.scripts[j].src === r) { return; }}
5
+ k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
6
+ (window, document, "script", "${e}", "ym");`}function t(e){return`<div><img src="https://mc.yandex.ru/watch/${e}" style="position:absolute; left:-9999px;" alt="" /></div>`}export{t as createYandexMetricaNoscript,e as createYandexMetricaScript};
7
+ //# sourceMappingURL=script.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"script.js","names":[],"sources":["../src/script.ts"],"sourcesContent":["/** Create string for Yandex Metrica script tag\n *\n * Default src is https://mc.yandex.ru/metrika/tag.js\n *\n * You could also use a CDN version: https://cdn.jsdelivr.net/npm/yandex-metrica-watch/tag.js\n */\nexport function createYandexMetricaScript(src: string = \"https://mc.yandex.ru/metrika/tag.js\") {\n return `\n(function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};\nm[i].l=1*new Date();\nfor (var j = 0; j < document.scripts.length; j++) {if (document.scripts[j].src === r) { return; }}\nk=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})\n(window, document, \"script\", \"${src}\", \"ym\");`;\n}\n\n/**\n * Create inner html string for Yandex Metrica noscript tag\n */\nexport function createYandexMetricaNoscript(clientID: string) {\n return `<div><img src=\"https://mc.yandex.ru/watch/${clientID}\" style=\"position:absolute; left:-9999px;\" alt=\"\" /></div>`;\n}\n"],"mappings":"AAMA,SAAgB,EAA0B,EAAc,sCAAuC,CAC3F,MAAO;;;;;gCAKqB,EAAI,WAMpC,SAAgB,EAA4B,EAAkB,CAC1D,MAAO,6CAA6C,EAAS"}
@@ -0,0 +1,152 @@
1
+ //#region src/types.d.ts
2
+ /** biome-ignore-all lint/suspicious/noExplicitAny: Who knows the spec? */
3
+ declare global {
4
+ interface Window {
5
+ ym: ((...args: any[]) => void) & {
6
+ a: any[];
7
+ l: number;
8
+ };
9
+ dataLayer: any[] | undefined;
10
+ }
11
+ }
12
+ interface VisitParameters {
13
+ order_price?: number;
14
+ currency?: string;
15
+ [key: string]: any;
16
+ }
17
+ interface UserParameters {
18
+ UserID?: number;
19
+ [key: string]: any;
20
+ }
21
+ /** @see https://yandex.ru/support/metrica/code/counter-initialize.html */
22
+ interface InitParameters {
23
+ /** Точный показатель отказов. Параметр может принимать значения: */
24
+ accurateTrackBounce?: boolean | number;
25
+ /** Признак записи содержимого iframe без счетчика в дочернем окне */
26
+ childIframe?: boolean;
27
+ /** Признак сбора данных для карты кликов */
28
+ clickmap?: boolean;
29
+ /** Признак отключения автоматической отправки данных при инициализации счетчика */
30
+ defer?: boolean;
31
+ /** Сбор данных электронной коммерции. */
32
+ ecommerce?: boolean | string;
33
+ /**
34
+ * Параметры визита, передаваемые во время инициализации счетчика.
35
+ *
36
+ * Для передачи параметров визита в произвольный момент времени используется метод params
37
+ */
38
+ params?: VisitParameters | VisitParameters[];
39
+ /**
40
+ * Параметры посетителей сайта, передаваемые во время инициализации счетчика.
41
+ *
42
+ * Для передачи параметров посетителей в произвольный момент времени используется метод userParams
43
+ */
44
+ userParams?: UserParameters;
45
+ /** Признак отслеживания изменений хеша в адресной строке браузера */
46
+ trackHash?: boolean;
47
+ /** Признак отслеживания переходов по внешним ссылкам */
48
+ trackLinks?: boolean;
49
+ /** Признак доверенного домена для записи содержимого дочернего окна iframe. Содержит адрес домена родительского окна */
50
+ trustedDomains?: string[];
51
+ /** Тип счетчика. Для РСЯ равен 1 */
52
+ type?: number;
53
+ /** Признак использования Вебвизора */
54
+ webvisor?: boolean;
55
+ /** Признак проверки готовности счетчика */
56
+ triggerEvent?: boolean;
57
+ /** Запись заголовков. Если в заголовках есть приватные данные, при инициализации счетчика укажите значение `false` */
58
+ sendTitle: boolean;
59
+ }
60
+ interface HitOptions<CTX> {
61
+ callback?: (this: CTX) => void;
62
+ ctx?: CTX;
63
+ params?: VisitParameters;
64
+ referer?: string;
65
+ title?: string;
66
+ }
67
+ interface People {
68
+ email?: string;
69
+ phone_number?: string;
70
+ first_name?: string;
71
+ last_name?: string;
72
+ yandex_cid?: number;
73
+ home_address?: {
74
+ street?: string;
75
+ city?: string;
76
+ region?: string;
77
+ postal_code?: number;
78
+ country?: string;
79
+ };
80
+ }
81
+ type CurrencyCode = "AUD" | "EUR" | "AZN" | "EUR" | "ALL" | "DZD" | "USD" | "XCD" | "AOA" | "EUR" | "XCD" | "SYP" | "ARS" | "AMD" | "AWG" | "AFN" | "BSD" | "BDT" | "BBD" | "BHD" | "BYR" | "BZD" | "EUR" | "XOF" | "BMD" | "BGN" | "BOB" | "BOV" | "USD" | "BAM" | "BWP" | "BRL" | "USD" | "USD" | "BND" | "XOF" | "BIF" | "BTN" | "INR" | "VUV" | "EUR" | "GBP" | "HUF" | "VEF" | "USD" | "VND" | "GMD" | "XAF" | "HTG" | "USD" | "GYD" | "GHS" | "EUR" | "GTQ" | "EUR" | "GNF" | "XOF" | "EUR" | "GBP" | "GIP" | "EUR" | "HNL" | "HKD" | "XCD" | "DKK" | "EUR" | "GEL" | "USD" | "DKK" | "GBP" | "DJF" | "XCD" | "DOP" | "EUR" | "EGP" | "ZMW" | "MAD" | "USD" | "ZWL" | "ILS" | "INR" | "IDR" | "JOD" | "IQD" | "IRR" | "EUR" | "ISK" | "EUR" | "EUR" | "YER" | "CVE" | "KZT" | "KYD" | "KHR" | "XAF" | "CAD" | "QAR" | "KES" | "EUR" | "AUD" | "CNY" | "AUD" | "COP" | "COU" | "KMF" | "CDF" | "XAF" | "KPW" | "CRC" | "XOF" | "CUC" | "CUP" | "KWD" | "KGS" | "ANG" | "LAK" | "EUR" | "LSL" | "ZAR" | "LRD" | "LBP" | "LYD" | "EUR" | "CHF" | "EUR" | "MUR" | "MRO" | "MGA" | "EUR" | "MOP" | "MKD" | "MWK" | "MYR" | "XOF" | "FKP" | "MVR" | "EUR" | "MAD" | "EUR" | "USD" | "XDR" | "MXN" | "MXV" | "USD" | "MZN" | "MDL" | "EUR" | "MNT" | "XCD" | "MMK" | "NAD" | "ZAR" | "AUD" | "NPR" | "XOF" | "NGN" | "NIO" | "NZD" | "NZD" | "XPF" | "NOK" | "NOK" | "AED" | "OMR" | "NOK" | "GBP" | "AUD" | "AUD" | "SHP" | "AUD" | "NZD" | "NZD" | "USD" | "PKR" | "USD" | "PAB" | "USD" | "PGK" | "PYG" | "PEN" | "PLN" | "EUR" | "USD" | "EUR" | "RUB" | "RWF" | "RON" | "SVC" | "USD" | "WST" | "EUR" | "STD" | "XCD" | "SAR" | "SZL" | "USD" | "SCR" | "EUR" | "EUR" | "EUR" | "XOF" | "XCD" | "XCD" | "RSD" | "SGD" | "ANG" | "XSU" | "EUR" | "EUR" | "SBD" | "SOS" | "XUA" | "SDG" | "SRD" | "ZAR" | "USD" | "USN" | "SLL" | "TJS" | "THB" | "TWD" | "TZS" | "XOF" | "NZD" | "TOP" | "TTD" | "AUD" | "TND" | "TMT" | "TRY" | "USD" | "UGX" | "UZS" | "UAH" | "XPF" | "UYI" | "UYU" | "DKK" | "FJD" | "PHP" | "EUR" | "EUR" | "XPF" | "EUR" | "HRK" | "XAF" | "XAF" | "EUR" | "CZK" | "CLF" | "CLP" | "CHE" | "CHF" | "CHW" | "SEK" | "LKR" | "USD" | "XAF" | "ERN" | "EUR" | "ETB" | "KRW" | "SSP" | "JMD" | "JPY";
82
+ type ECommerceActionType = "impressions" | "click" | "detail" | "add" | "remove" | "purchase" | "promoView" | "promoClick";
83
+ type ECommerceActionData = {
84
+ /** Список описаний товаров, с которыми было произведено указанное действие. */products?: Array<ProductField>; /** Список описаний рекламной кампании, с которой было произведено указанное действие */
85
+ promotions?: Array<PromoField>;
86
+ };
87
+ type ECommerceActionsData = { [Action in Exclude<ECommerceActionType, "purchase">]: { [Key in Action]: ECommerceActionData } } & {
88
+ purchase: {
89
+ purchase: ECommerceActionData & {
90
+ actionField: ActionField;
91
+ };
92
+ };
93
+ };
94
+ type ECommerceActions = ECommerceActionsData[keyof ECommerceActionsData];
95
+ type ECommerceContainer = {
96
+ ecommerce: {
97
+ currencyCode: CurrencyCode;
98
+ } & ECommerceActions;
99
+ };
100
+ /**
101
+ * @see https://yandex.ru/support/metrica/ecommerce/data.html#about__action_data
102
+ */
103
+ type ActionField = {
104
+ /** Идентификатор покупки */id: string; /** Промокод, ассоциированный со всей покупкой целиком */
105
+ coupon?: string; /** Номер цели. Указывается в том случае, если данное действие и было целью */
106
+ goal_id?: number;
107
+ revenue?: number;
108
+ };
109
+ /** @see https://yandex.ru/support/metrica/ecommerce/data.html#about__product_data */
110
+ type ProductField = {
111
+ /**
112
+ * Идентификатор товара. Например, SKU.
113
+ *
114
+ * **Необходимо обязательно указать или id, или name**
115
+ */
116
+ id?: string;
117
+ /**
118
+ * Название товара. Например, "Футболка".
119
+ *
120
+ * **Необходимо обязательно указать или id, или name**
121
+ */
122
+ name?: string; /** Бренд, торговая марка, ассоциированная с товаром. Например, "Яндекс / Яndex" */
123
+ brand?: string;
124
+ /**
125
+ * Категория, к которой относится товар.
126
+ *
127
+ * Поддерживается иерархия категорий до 5 уровней вложенности. Разделителем уровней является символ /. Например, "Одежда/Мужская одежда/Футболки"
128
+ */
129
+ category?: string; /** Промокод ассоциированный с товаром. Например, "PARTNER_SITE_15" */
130
+ coupon?: string; /** Размер скидки на товар (указывается как число) */
131
+ discount?: number;
132
+ /**
133
+ * Список, к которому относится товар.
134
+ *
135
+ * Чтобы оценивать эффективность списка на разных этапах взаимодействия пользователя с товаром, рекомендуем указывать список товара во всех событиях, которые были после просмотра списка.
136
+ */
137
+ list?: string; /** Позиция товара в списке. Например, 2 */
138
+ position?: number; /** Цена единицы товара */
139
+ price?: number; /** Количество единиц товара */
140
+ quantity?: number; /** Разновидность товара. Например, "Красный цвет" */
141
+ variant?: string;
142
+ };
143
+ type PromoField = {
144
+ /** Идентификатор промокампании. */id: string; /** Название промокампании. */
145
+ name?: string; /** Название рекламного баннера. */
146
+ creative?: string; /** Слот рекламного баннера. */
147
+ creative_slot?: string; /** Позиция рекламного баннера. */
148
+ position?: string;
149
+ };
150
+ //#endregion
151
+ export { ActionField, CurrencyCode, ECommerceActionData, ECommerceActionType, ECommerceActions, ECommerceActionsData, ECommerceContainer, HitOptions, InitParameters, People, ProductField, PromoField, UserParameters, VisitParameters };
152
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","names":[],"sources":["../src/types.ts"],"mappings":";;QAEQ,MAAA;EAAA,UACM,MAAA;IACN,EAAA,OAAS,IAAA;MAA0B,CAAA;MAAU,CAAA;IAAA;IAC7C,SAAA;EAAA;AAAA;AAAA,UAIS,eAAA;EACb,WAAA;EACA,QAAA;EAAA,CAEC,GAAA;AAAA;AAAA,UAGY,cAAA;EACb,MAAA;EAAA,CAEC,GAAA;AAAA;;UAIY,cAAA;EAVZ;EAYD,mBAAA;EAZY;EAcZ,WAAA;EAX2B;EAa3B,QAAA;EAZA;EAcA,KAAA;EARa;EAUb,SAAA;;;;;;EAMA,MAAA,GAAS,eAAA,GAAkB,eAAA;EAd3B;;;;;EAoBA,UAAA,GAAa,cAAA;EANJ;EAQT,SAAA;EAFA;EAIA,UAAA;EAFA;EAIA,cAAA;EAAA;EAEA,IAAA;EAEA;EAAA,QAAA;EAIA;EAFA,YAAA;EAES;EAAT,SAAA;AAAA;AAAA,UAGa,UAAA;EACb,QAAA,IAAY,IAAA,EAAM,GAAA;EAClB,GAAA,GAAM,GAAA;EACN,MAAA,GAAS,eAAA;EACT,OAAA;EACA,KAAA;AAAA;AAAA,UAGa,MAAA;EACb,KAAA;EACA,YAAA;EACA,UAAA;EACA,SAAA;EACA,UAAA;EACA,YAAA;IACI,MAAA;IACA,IAAA;IACA,MAAA;IACA,WAAA;IACA,OAAA;EAAA;AAAA;AAAA,KAII,YAAA;AAAA,KA2QA,mBAAA;AAAA,KAUA,mBAAA;EAjSR,+EAmSA,QAAA,GAAW,KAAA,CAAM,YAAA,GAjSjB;EAmSA,UAAA,GAAa,KAAA,CAAM,UAAA;AAAA;AAAA,KAGX,oBAAA,gBACG,OAAA,CAAQ,mBAAA,0BACP,MAAA,GAAS,mBAAA;EAGrB,QAAA;IACI,QAAA,EAAU,mBAAA;MACN,WAAA,EAAa,WAAA;IAAA;EAAA;AAAA;AAAA,KAKb,gBAAA,GAAmB,oBAAA,OAA2B,oBAAA;AAAA,KAE9C,kBAAA;EACR,SAAA;IACI,YAAA,EAAc,YAAA;EAAA,IACd,gBAAA;AAAA;;;;KAMI,WAAA;EA1BW,4BA4BnB,EAAA,UA5BkB;EA8BlB,MAAA,WAhCA;EAkCA,OAAA;EACA,OAAA;AAAA;;KAIQ,YAAA;EArCqB;;AAGjC;;;EAwCI,EAAA;EAvCW;;;;;EA6CX,IAAA,WAvCgC;EAyChC,KAAA;EA/CW;;;;;EAqDX,QAAA,WAhDI;EAkDJ,MAAA,WAjDQ;EAmDR,QAAA;EAnDgC;;AAKpC;;;EAoDI,IAAA,WApD0E;EAsD1E,QAAA,WApD0B;EAsD1B,KAAA,WAnDoB;EAqDpB,QAAA,WAtDI;EAwDJ,OAAA;AAAA;AAAA,KAGQ,UAAA;EA1DY,mCA4DpB,EAAA,UAtDmB;EAwDnB,IAAA,WAxDmB;EA0DnB,QAAA,WAtDA;EAwDA,aAAA,WArDA;EAuDA,QAAA;AAAA"}
package/dist/ym.js ADDED
@@ -0,0 +1,2 @@
1
+ function e(e,t,...n){if(typeof window>`u`||!window.ym)return console.error(`[yandex-metrica] Script is not loaded!`);window.ym(e,t,...n)}export{e as ym};
2
+ //# sourceMappingURL=ym.js.map
package/dist/ym.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ym.js","names":[],"sources":["../src/ym.ts"],"sourcesContent":["import type { Methods } from \"./methods\";\r\n\r\nexport function ym<M extends Methods>(clientID: string, method: M, ...args: unknown[]) {\r\n if (typeof window === \"undefined\" || !window.ym) return console.error(\"[yandex-metrica] Script is not loaded!\");\r\n\r\n window.ym(clientID, method, ...args);\r\n}\r\n"],"mappings":"AAEA,SAAgB,EAAsB,EAAkB,EAAW,GAAG,EAAiB,CACnF,GAAI,OAAO,OAAW,KAAe,CAAC,OAAO,GAAI,OAAO,QAAQ,MAAM,yCAAyC,CAE/G,OAAO,GAAG,EAAU,EAAQ,GAAG,EAAK"}
package/package.json ADDED
@@ -0,0 +1,19 @@
1
+ {
2
+ "publishConfig": {
3
+ "access": "public"
4
+ },
5
+ "name": "@yametrica/core",
6
+ "version": "0.0.1",
7
+ "type": "module",
8
+ "license": "MIT",
9
+ "files": [
10
+ "dist"
11
+ ],
12
+ "exports": {
13
+ "types": "./dist/index.d.ts",
14
+ "import": "./dist/index.js"
15
+ },
16
+ "scripts": {
17
+ "build": "tsdown"
18
+ }
19
+ }