@artginzburg/next-ym 1.2.2 → 1.3.2

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.
package/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  # Next.js Yandex Metrica
2
2
 
3
3
  [![npm version](https://badge.fury.io/js/next-yandex-metrica.svg)](https://badge.fury.io/js/next-yandex-metrica)
4
- [![codecov](https://codecov.io/github/reapziq/next-yandex-metrica/branch/main/graph/badge.svg?token=OZ8UX4NPK2)](https://codecov.io/github/reapziq/next-yandex-metrica)
4
+ [![codecov](https://codecov.io/gh/artginzburg/next-ym/graph/badge.svg?token=OZ8UX4NPK2)](https://codecov.io/gh/artginzburg/next-ym)
5
5
 
6
6
  Yandex Metrica integration for Next.js v14+ (App Router)
7
7
 
@@ -17,11 +17,32 @@ Yandex Metrica integration for Next.js v14+ (App Router)
17
17
 
18
18
  ### Add the provider
19
19
 
20
+ #### App Router
21
+
22
+ ```jsx
23
+ // app/layout.tsx
24
+ import { YandexMetricaProvider, standardYMInitParameters } from '@artginzburg/next-ym';
25
+
26
+ export default function RootLayout({ children }) {
27
+ return (
28
+ <html lang="en">
29
+ <body>
30
+ <YandexMetricaProvider initParameters={standardYMInitParameters}>
31
+ {children}
32
+ </YandexMetricaProvider>
33
+ </body>
34
+ </html>
35
+ );
36
+ }
37
+ ```
38
+
39
+ #### Pages Router
40
+
20
41
  To enable analytics, include `YandexMetricaProvider` in the custom [`_app`](https://nextjs.org/docs/advanced-features/custom-app) component.
21
42
 
22
43
  ```jsx
23
44
  // pages/_app.tsx
24
- import { YandexMetricaProvider } from 'next-yandex-metrica';
45
+ import { YandexMetricaProvider } from '@artginzburg/next-ym';
25
46
 
26
47
  export default function MyApp({ Component, pageProps }) {
27
48
  return (
@@ -35,6 +56,8 @@ export default function MyApp({ Component, pageProps }) {
35
56
  }
36
57
  ```
37
58
 
59
+ > **Note:** `YandexMetricaProvider` uses the `"use client"` directive.
60
+
38
61
  #### `YandexMetricaProvider` Props
39
62
 
40
63
  | Name | Description |
@@ -1,5 +1,4 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
- import Image from 'next/image';
3
2
  /** @todo shouldUseAlternativeCDN */
4
- export const MetricaPixel = ({ tagID }) => (_jsx("div", { children: _jsx(Image, { height: "1", width: "1", style: { display: 'none', position: 'absolute', left: -9999 }, src: `https://mc.yandex.ru/watch/${tagID}`, alt: "", unoptimized: true }) }));
3
+ export const MetricaPixel = ({ tagID }) => (_jsx("div", { children: _jsx("img", { src: `https://mc.yandex.ru/watch/${tagID}`, style: { position: 'absolute', left: -9999 }, alt: "" }) }));
5
4
  //# sourceMappingURL=MetricaPixel.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MetricaPixel.js","sourceRoot":"","sources":["../../src/components/MetricaPixel.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,YAAY,CAAC;AAO/B,oCAAoC;AACpC,MAAM,CAAC,MAAM,YAAY,GAA0B,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAChE,wBACE,KAAC,KAAK,IACJ,MAAM,EAAC,GAAG,EACV,KAAK,EAAC,GAAG,EACT,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,EAC7D,GAAG,EAAE,8BAA8B,KAAK,EAAE,EAC1C,GAAG,EAAC,EAAE,EACN,WAAW,SACX,GACE,CACP,CAAC"}
1
+ {"version":3,"file":"MetricaPixel.js","sourceRoot":"","sources":["../../src/components/MetricaPixel.tsx"],"names":[],"mappings":";AAMA,oCAAoC;AACpC,MAAM,CAAC,MAAM,YAAY,GAA0B,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAChE,wBACE,cACE,GAAG,EAAE,8BAA8B,KAAK,EAAE,EAC1C,KAAK,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,EAC5C,GAAG,EAAC,EAAE,GACN,GACE,CACP,CAAC"}
@@ -19,7 +19,7 @@ export const YandexMetricaProvider = ({ children, tagID, strategy = 'afterIntera
19
19
  ? 'https://cdn.jsdelivr.net/npm/yandex-metrica-watch/tag.js'
20
20
  : 'https://mc.yandex.ru/metrika/tag.js';
21
21
  const sharedInit = `
22
- ym(${id}, "init", ${JSON.stringify(initParameters !== null && initParameters !== void 0 ? initParameters : {})});
22
+ ym(${id}, "init", Object.assign({referrer: document.referrer, url: location.href}, ${JSON.stringify(initParameters !== null && initParameters !== void 0 ? initParameters : {})}));
23
23
  ${initEcommerce(initParameters === null || initParameters === void 0 ? void 0 : initParameters.ecommerce)}
24
24
  `;
25
25
  return (_jsxs(_Fragment, { children: [(experimental === null || experimental === void 0 ? void 0 : experimental.nextJsNativeLoading) ? (_jsxs(_Fragment, { children: [_jsx(Script, { id: "yandex-metrika-init", strategy: "beforeInteractive", children: `
@@ -1 +1 @@
1
- {"version":3,"file":"YandexMetricaProvider.js","sourceRoot":"","sources":["../../src/components/YandexMetricaProvider.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"YandexMetricaProvider.js","sourceRoot":"","sources":["../../src/components/YandexMetricaProvider.tsx"],"names":[],"mappings":"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"}
@@ -3,4 +3,7 @@ export declare const standardYMInitParameters: {
3
3
  clickmap: true;
4
4
  trackLinks: true;
5
5
  accurateTrackBounce: true;
6
+ webvisor: true;
7
+ ssr: true;
8
+ ecommerce: "dataLayer";
6
9
  };
@@ -3,5 +3,8 @@ export const standardYMInitParameters = {
3
3
  clickmap: true,
4
4
  trackLinks: true,
5
5
  accurateTrackBounce: true,
6
+ webvisor: true,
7
+ ssr: true,
8
+ ecommerce: 'dataLayer',
6
9
  };
7
10
  //# sourceMappingURL=defaults.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/constants/defaults.ts"],"names":[],"mappings":"AAEA,wFAAwF;AACxF,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,QAAQ,EAAE,IAAI;IACd,UAAU,EAAE,IAAI;IAChB,mBAAmB,EAAE,IAAI;CACD,CAAC"}
1
+ {"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/constants/defaults.ts"],"names":[],"mappings":"AAEA,wFAAwF;AACxF,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,QAAQ,EAAE,IAAI;IACd,UAAU,EAAE,IAAI;IAChB,mBAAmB,EAAE,IAAI;IACzB,QAAQ,EAAE,IAAI;IACd,GAAG,EAAE,IAAI;IACT,SAAS,EAAE,WAAW;CACE,CAAC"}
@@ -1,8 +1,46 @@
1
- import { DataObject, Product, Purchase } from '../lib/ecommerce';
1
+ import { DataObject, Product, type PromoCampaign, Purchase, type WithPromotions } from '../lib/ecommerce';
2
2
  export declare function useEcommerce<Defaults extends Pick<DataObject['ecommerce'], 'currencyCode'>>(defaults?: Defaults): {
3
- trackViewProduct: (data: Partial<Pick<{
3
+ trackImpressionsProduct: (data: Partial<Pick<DataObject['ecommerce'], 'currencyCode'>> & {
4
+ products: Product[];
5
+ }) => void;
6
+ trackClickProduct: (data: Partial<Pick<({
7
+ currencyCode: string;
8
+ } & ({
9
+ click: {
10
+ products: Product[];
11
+ };
12
+ } | {
13
+ impressions: Product[];
14
+ } | {
15
+ detail: {
16
+ products: Product[];
17
+ };
18
+ } | {
19
+ add: {
20
+ products: Product[];
21
+ };
22
+ } | {
23
+ remove: {
24
+ products: Product[];
25
+ };
26
+ } | Purchase)) | ({
27
+ currencyCode?: undefined;
28
+ } & ({
29
+ promoView: WithPromotions;
30
+ } | {
31
+ promoClick: WithPromotions;
32
+ })), "currencyCode">> & {
33
+ product: Product;
34
+ }) => void;
35
+ trackViewProduct: (data: Partial<Pick<({
4
36
  currencyCode: string;
5
37
  } & ({
38
+ click: {
39
+ products: Product[];
40
+ };
41
+ } | {
42
+ impressions: Product[];
43
+ } | {
6
44
  detail: {
7
45
  products: Product[];
8
46
  };
@@ -14,12 +52,24 @@ export declare function useEcommerce<Defaults extends Pick<DataObject['ecommerce
14
52
  remove: {
15
53
  products: Product[];
16
54
  };
17
- } | Purchase), "currencyCode">> & {
55
+ } | Purchase)) | ({
56
+ currencyCode?: undefined;
57
+ } & ({
58
+ promoView: WithPromotions;
59
+ } | {
60
+ promoClick: WithPromotions;
61
+ })), "currencyCode">> & {
18
62
  product: Product;
19
63
  }) => void;
20
- trackAddItemToBasket: (data: Partial<Pick<{
64
+ trackAddItemToBasket: (data: Partial<Pick<({
21
65
  currencyCode: string;
22
66
  } & ({
67
+ click: {
68
+ products: Product[];
69
+ };
70
+ } | {
71
+ impressions: Product[];
72
+ } | {
23
73
  detail: {
24
74
  products: Product[];
25
75
  };
@@ -31,12 +81,24 @@ export declare function useEcommerce<Defaults extends Pick<DataObject['ecommerce
31
81
  remove: {
32
82
  products: Product[];
33
83
  };
34
- } | Purchase), "currencyCode">> & {
84
+ } | Purchase)) | ({
85
+ currencyCode?: undefined;
86
+ } & ({
87
+ promoView: WithPromotions;
88
+ } | {
89
+ promoClick: WithPromotions;
90
+ })), "currencyCode">> & {
35
91
  product: Product;
36
92
  }) => void;
37
- trackRemoveItemFromBasket: (data: Partial<Pick<{
93
+ trackRemoveItemFromBasket: (data: Partial<Pick<({
38
94
  currencyCode: string;
39
95
  } & ({
96
+ click: {
97
+ products: Product[];
98
+ };
99
+ } | {
100
+ impressions: Product[];
101
+ } | {
40
102
  detail: {
41
103
  products: Product[];
42
104
  };
@@ -48,7 +110,13 @@ export declare function useEcommerce<Defaults extends Pick<DataObject['ecommerce
48
110
  remove: {
49
111
  products: Product[];
50
112
  };
51
- } | Purchase), "currencyCode">> & {
113
+ } | Purchase)) | ({
114
+ currencyCode?: undefined;
115
+ } & ({
116
+ promoView: WithPromotions;
117
+ } | {
118
+ promoClick: WithPromotions;
119
+ })), "currencyCode">> & {
52
120
  product: Product;
53
121
  }) => void;
54
122
  trackPurchase: (data: Partial<Pick<DataObject['ecommerce'], 'currencyCode'>> & {
@@ -56,5 +124,9 @@ export declare function useEcommerce<Defaults extends Pick<DataObject['ecommerce
56
124
  } & {
57
125
  actionField: Purchase['purchase']['actionField'];
58
126
  }) => void;
127
+ trackPromoView: (data: WithPromotions) => void;
128
+ trackPromoClick: (data: {
129
+ promotion: PromoCampaign;
130
+ }) => void;
59
131
  pushToDataLayer: (data: DataObject['ecommerce']) => void;
60
132
  };
@@ -1,6 +1,6 @@
1
1
  import { useCallback, useContext, useMemo } from 'react';
2
2
  import { MetricaEcommerceContext } from '../components/YandexMetricaProvider';
3
- import { dataLayerPush } from '../lib/ecommerce';
3
+ import { dataLayerPush, } from '../lib/ecommerce';
4
4
  export function useEcommerce(defaults) {
5
5
  const dataLayerName = useContext(MetricaEcommerceContext);
6
6
  const pushToDataLayer = useCallback((data) => {
@@ -13,9 +13,29 @@ export function useEcommerce(defaults) {
13
13
  [actionType]: { products: [data.product] },
14
14
  });
15
15
  }, [defaults === null || defaults === void 0 ? void 0 : defaults.currencyCode, pushToDataLayer]);
16
+ const trackImpressionsProduct = useCallback((data) => {
17
+ var _a;
18
+ pushToDataLayer({
19
+ currencyCode: (_a = defaults === null || defaults === void 0 ? void 0 : defaults.currencyCode) !== null && _a !== void 0 ? _a : data.currencyCode,
20
+ impressions: data.products,
21
+ });
22
+ }, [defaults === null || defaults === void 0 ? void 0 : defaults.currencyCode, pushToDataLayer]);
23
+ const trackClickProduct = useMemo(() => makeStandardTrackProduct('click'), [makeStandardTrackProduct]);
16
24
  const trackViewProduct = useMemo(() => makeStandardTrackProduct('detail'), [makeStandardTrackProduct]);
17
25
  const trackAddItemToBasket = useMemo(() => makeStandardTrackProduct('add'), [makeStandardTrackProduct]);
18
26
  const trackRemoveItemFromBasket = useMemo(() => makeStandardTrackProduct('remove'), [makeStandardTrackProduct]);
27
+ const trackPromoView = useCallback((data) => {
28
+ pushToDataLayer({
29
+ promoView: data,
30
+ });
31
+ }, [pushToDataLayer]);
32
+ const trackPromoClick = useCallback((data) => {
33
+ pushToDataLayer({
34
+ promoClick: {
35
+ promotions: [data.promotion],
36
+ },
37
+ });
38
+ }, [pushToDataLayer]);
19
39
  const trackPurchase = useCallback((data) => {
20
40
  var _a;
21
41
  pushToDataLayer({
@@ -26,20 +46,15 @@ export function useEcommerce(defaults) {
26
46
  },
27
47
  });
28
48
  }, [defaults === null || defaults === void 0 ? void 0 : defaults.currencyCode, pushToDataLayer]);
29
- // TODO Возможные значения:
30
- // impressions — просмотр списка товаров;
31
- // click — клик по товару в списке;
32
- // detail — просмотр товара; // DONE
33
- // add — добавление товара в корзину; // DONE
34
- // remove — удаление товара из корзины; // DONE
35
- // purchase — покупка; // DONE
36
- // promoView — просмотр внутренней рекламы;
37
- // promoClick — клик по внутренней рекламе.
38
49
  return {
50
+ trackImpressionsProduct,
51
+ trackClickProduct,
39
52
  trackViewProduct,
40
53
  trackAddItemToBasket,
41
54
  trackRemoveItemFromBasket,
42
55
  trackPurchase,
56
+ trackPromoView,
57
+ trackPromoClick,
43
58
  pushToDataLayer,
44
59
  };
45
60
  }
@@ -1 +1 @@
1
- {"version":3,"file":"useEcommerce.js","sourceRoot":"","sources":["../../src/hooks/useEcommerce.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAEzD,OAAO,EAAE,uBAAuB,EAAE,MAAM,qCAAqC,CAAC;AAC9E,OAAO,EAAE,aAAa,EAAmD,MAAM,kBAAkB,CAAC;AAElG,MAAM,UAAU,YAAY,CAC1B,QAAmB;IAEnB,MAAM,aAAa,GAAG,UAAU,CAAC,uBAAuB,CAAC,CAAC;IAE1D,MAAM,eAAe,GAAG,WAAW,CACjC,CAAC,IAA6B,EAAE,EAAE;QAChC,aAAa,CAAC,aAAa,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACpD,CAAC,EACD,CAAC,aAAa,CAAC,CAChB,CAAC;IAMF,MAAM,wBAAwB,GAAG,WAAW,CAC1C,CAAC,UAA4B,EAAE,EAAE,CAAC,CAAC,IAAyB,EAAE,EAAE;;QAC9D,OAAA,eAAe,CAAC;YACd,YAAY,EAAE,MAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,YAAY,mCAAK,IAAI,CAAC,YAAuB;YACrE,CAAC,UAAsB,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;SACvD,CAAC,CAAA;KAAA,EACJ,CAAC,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,YAAY,EAAE,eAAe,CAAC,CAC1C,CAAC;IAEF,MAAM,gBAAgB,GAAG,OAAO,CAC9B,GAAG,EAAE,CAAC,wBAAwB,CAAC,QAAQ,CAAC,EACxC,CAAC,wBAAwB,CAAC,CAC3B,CAAC;IACF,MAAM,oBAAoB,GAAG,OAAO,CAClC,GAAG,EAAE,CAAC,wBAAwB,CAAC,KAAK,CAAC,EACrC,CAAC,wBAAwB,CAAC,CAC3B,CAAC;IACF,MAAM,yBAAyB,GAAG,OAAO,CACvC,GAAG,EAAE,CAAC,wBAAwB,CAAC,QAAQ,CAAC,EACxC,CAAC,wBAAwB,CAAC,CAC3B,CAAC;IAEF,MAAM,aAAa,GAAG,WAAW,CAC/B,CACE,IAEwD,EACxD,EAAE;;QACF,eAAe,CAAC;YACd,YAAY,EAAE,MAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,YAAY,mCAAK,IAAI,CAAC,YAAuB;YACrE,QAAQ,EAAE;gBACR,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,QAAQ,EAAE,IAAI,CAAC,QAAQ;aACxB;SACF,CAAC,CAAC;IACL,CAAC,EACD,CAAC,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,YAAY,EAAE,eAAe,CAAC,CAC1C,CAAC;IAEF,2BAA2B;IAC3B,yCAAyC;IACzC,mCAAmC;IACnC,oCAAoC;IACpC,6CAA6C;IAC7C,+CAA+C;IAC/C,8BAA8B;IAC9B,2CAA2C;IAC3C,2CAA2C;IAE3C,OAAO;QACL,gBAAgB;QAChB,oBAAoB;QACpB,yBAAyB;QACzB,aAAa;QAEb,eAAe;KAChB,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"useEcommerce.js","sourceRoot":"","sources":["../../src/hooks/useEcommerce.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,18 @@
1
1
  /// <reference types="google.analytics" />
2
2
  export type DataObject = {
3
- ecommerce: {
3
+ ecommerce: ({
4
4
  currencyCode: string;
5
- } & (ViewProduct | AddItemToBasket | RemoveItemFromBasket | Purchase);
5
+ } & (ClickProduct | ImpressionsProduct | ViewProduct | AddItemToBasket | RemoveItemFromBasket | Purchase)) | ({
6
+ currencyCode?: never;
7
+ } & (PromoView | PromoClick));
8
+ };
9
+ export type SimpleActionType = keyof (ClickProduct & ViewProduct & AddItemToBasket & RemoveItemFromBasket);
10
+ type ClickProduct = {
11
+ click: WithProducts;
12
+ };
13
+ type ImpressionsProduct = {
14
+ impressions: Product[];
6
15
  };
7
- export type SimpleActionType = keyof (ViewProduct & AddItemToBasket & RemoveItemFromBasket);
8
16
  type ViewProduct = {
9
17
  detail: WithProducts;
10
18
  };
@@ -19,6 +27,27 @@ export type Purchase = {
19
27
  actionField: ActionField;
20
28
  } & WithProducts;
21
29
  };
30
+ type PromoView = {
31
+ promoView: WithPromotions;
32
+ };
33
+ type PromoClick = {
34
+ promoClick: WithPromotions;
35
+ };
36
+ export type WithPromotions = {
37
+ promotions: PromoCampaign[];
38
+ };
39
+ export type PromoCampaign = {
40
+ id: string;
41
+ } & Partial<{
42
+ /** Name of the promo campaign */
43
+ name: string;
44
+ /** Name of the ad banner */
45
+ creative: string;
46
+ /** Slot of the ad banner */
47
+ creative_slot: string;
48
+ /** Position of the ad banner */
49
+ position: string;
50
+ }>;
22
51
  type WithProducts = {
23
52
  products: Product[];
24
53
  };
@@ -1 +1 @@
1
- {"version":3,"file":"ecommerce.js","sourceRoot":"","sources":["../../src/lib/ecommerce.ts"],"names":[],"mappings":"AAsFA,kEAAkE;AAClE,MAAM,UAAU,aAAa,CAAC,aAA4B,EAAE,GAAG,IAAkB;IAC/E,IAAI,CAAC,aAAa;QAAE,OAAO;IAE3B,IAAI,CAAC,CAAC,aAAa,IAAI,MAAM,CAAC,EAAE,CAAC;QAC/B,OAAO,CAAC,KAAK,CACX,gCAAgC,aAAa,sGAAsG,CACpJ,CAAC;QACF,OAAO;IACT,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,CAAC,aAAoC,CAA2B,CAAC;IAEzF,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO;IACT,CAAC;IAED,SAAS,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;AAC1B,CAAC"}
1
+ {"version":3,"file":"ecommerce.js","sourceRoot":"","sources":["../../src/lib/ecommerce.ts"],"names":[],"mappings":"AAgIA,kEAAkE;AAClE,MAAM,UAAU,aAAa,CAAC,aAA4B,EAAE,GAAG,IAAkB;IAC/E,IAAI,CAAC,aAAa;QAAE,OAAO;IAE3B,IAAI,CAAC,CAAC,aAAa,IAAI,MAAM,CAAC,EAAE,CAAC;QAC/B,OAAO,CAAC,KAAK,CACX,gCAAgC,aAAa,sGAAsG,CACpJ,CAAC;QACF,OAAO;IACT,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,CAAC,aAAoC,CAA2B,CAAC;IAEzF,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO;IACT,CAAC;IAED,SAAS,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;AAC1B,CAAC"}
@@ -86,6 +86,22 @@ export interface InitParameters {
86
86
  * @default false
87
87
  */
88
88
  triggerEvent?: boolean;
89
+ /**
90
+ * Enable SSR-compatible mode. The tag won't send a pageview on init,
91
+ * relying on SPA navigation events instead.
92
+ * @default false
93
+ */
94
+ ssr?: boolean;
95
+ /**
96
+ * Override the referrer sent with the init hit.
97
+ * Useful for SSR where `document.referrer` may not be available at init time.
98
+ */
99
+ referrer?: string;
100
+ /**
101
+ * Override the URL sent with the init hit.
102
+ * Useful for SSR where `location.href` may not reflect the correct page.
103
+ */
104
+ url?: string;
89
105
  }
90
106
  export interface FirstPartyParamsParameters {
91
107
  email?: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@artginzburg/next-ym",
3
- "version": "1.2.2",
3
+ "version": "1.3.2",
4
4
  "description": "Yandex Metrica integration for Next.js v14",
5
5
  "files": [
6
6
  "dist"
@@ -29,6 +29,16 @@
29
29
  "metrika",
30
30
  "analytics"
31
31
  ],
32
+ "scripts": {
33
+ "build": "del-cli dist && tsc",
34
+ "prepublishOnly": "pnpm build",
35
+ "lint": "eslint src --fix --max-warnings 0",
36
+ "lint:ts": "tsc --noEmit",
37
+ "test": "jest",
38
+ "test:ci": "jest --ci --coverage",
39
+ "format": "prettier --write --log-level silent .",
40
+ "format:check": "prettier --check ."
41
+ },
32
42
  "devDependencies": {
33
43
  "@artginzburg/experimental": "^0.1.6",
34
44
  "@testing-library/jest-dom": "^6.1.5",
@@ -61,14 +71,5 @@
61
71
  },
62
72
  "publishConfig": {
63
73
  "access": "public"
64
- },
65
- "scripts": {
66
- "build": "del-cli dist && tsc",
67
- "lint": "eslint src --fix --max-warnings 0",
68
- "lint:ts": "tsc --noEmit",
69
- "test": "jest",
70
- "test:ci": "jest --ci --coverage",
71
- "format": "prettier --write --log-level silent .",
72
- "format:check": "prettier --check ."
73
74
  }
74
- }
75
+ }