@walkeros/web-destination-matomo 4.7.2 → 4.8.0-next-1791496487198

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/CHANGELOG.md CHANGED
@@ -1,5 +1,24 @@
1
1
  # @walkeros/web-destination-matomo
2
2
 
3
+ ## 4.8.0-next-1791496487198
4
+
5
+ ### Patch Changes
6
+
7
+ - 5593d7b: The ecommerce step examples are no longer published in the docs, and
8
+ their descriptions say they are test fixtures. Matomo needs an
9
+ `addEcommerceItem` call per product before a cart update, and before an order
10
+ to record its products, and tracks a product view as `setEcommerceView`
11
+ followed by a page view. One rule sends one command.
12
+ - 5593d7b: The ecommerce step examples now test for a product entity without a
13
+ package helper. The published condition, shown in the docs and returned by
14
+ `package_get`, referenced a minified import and threw when copied into a flow;
15
+ it now runs on its own.
16
+ - Updated dependencies [7132619]
17
+ - Updated dependencies [5593d7b]
18
+ - Updated dependencies [421233d]
19
+ - @walkeros/core@4.8.0-next-1791496487198
20
+ - @walkeros/web-core@4.8.0-next-1791496487198
21
+
3
22
  ## 4.7.2
4
23
 
5
24
  ### Patch Changes
package/README.md CHANGED
@@ -32,7 +32,13 @@ npm install @walkeros/web-destination-matomo
32
32
  "destinations": {
33
33
  "matomo": {
34
34
  "package": "@walkeros/web-destination-matomo",
35
- "config": {}
35
+ "config": {
36
+ "loadScript": true,
37
+ "settings": {
38
+ "siteId": "1",
39
+ "url": "https://analytics.example.com/"
40
+ }
41
+ }
36
42
  }
37
43
  }
38
44
  }
package/dist/dev.d.mts CHANGED
@@ -127,15 +127,21 @@ declare const pageViewWithGoal: StepExample;
127
127
  declare const customEvent: StepExample;
128
128
  /**
129
129
  * Ecommerce order -- one call with cart items array and order totals.
130
+ * Not public: Matomo records an order's products only after an
131
+ * addEcommerceItem call per product, which one rule cannot send, so this
132
+ * shows mapping mechanics only.
130
133
  */
131
134
  declare const ecommerceOrder: StepExample;
132
135
  /**
133
- * Ecommerce cart update -- addEcommerceItem per nested product,
134
- * then trackEcommerceCartUpdate with cart total.
136
+ * Ecommerce cart update -- nested products and the cart total in one call.
137
+ * Not public: Matomo takes trackEcommerceCartUpdate(grandTotal) after an
138
+ * addEcommerceItem call per product, which one rule cannot send.
135
139
  */
136
140
  declare const ecommerceCartUpdate: StepExample;
137
141
  /**
138
- * Product detail view -- setEcommerceView equivalent with a single product array.
142
+ * Product detail view with a single product array.
143
+ * Not public: Matomo has no ecommerceProductDetailView; it tracks a product
144
+ * view with setEcommerceView followed by trackPageView, two commands.
139
145
  */
140
146
  declare const productDetailView: StepExample;
141
147
  /**
package/dist/dev.d.ts CHANGED
@@ -127,15 +127,21 @@ declare const pageViewWithGoal: StepExample;
127
127
  declare const customEvent: StepExample;
128
128
  /**
129
129
  * Ecommerce order -- one call with cart items array and order totals.
130
+ * Not public: Matomo records an order's products only after an
131
+ * addEcommerceItem call per product, which one rule cannot send, so this
132
+ * shows mapping mechanics only.
130
133
  */
131
134
  declare const ecommerceOrder: StepExample;
132
135
  /**
133
- * Ecommerce cart update -- addEcommerceItem per nested product,
134
- * then trackEcommerceCartUpdate with cart total.
136
+ * Ecommerce cart update -- nested products and the cart total in one call.
137
+ * Not public: Matomo takes trackEcommerceCartUpdate(grandTotal) after an
138
+ * addEcommerceItem call per product, which one rule cannot send.
135
139
  */
136
140
  declare const ecommerceCartUpdate: StepExample;
137
141
  /**
138
- * Product detail view -- setEcommerceView equivalent with a single product array.
142
+ * Product detail view with a single product array.
143
+ * Not public: Matomo has no ecommerceProductDetailView; it tracks a product
144
+ * view with setEcommerceView followed by trackPageView, two commands.
139
145
  */
140
146
  declare const productDetailView: StepExample;
141
147
  /**
package/dist/dev.js CHANGED
@@ -1 +1 @@
1
- "use strict";var e,t=Object.defineProperty,a=Object.getOwnPropertyDescriptor,i=Object.getOwnPropertyNames,o=Object.prototype.hasOwnProperty,r=(e,a)=>{for(var i in a)t(e,i,{get:a[i],enumerable:!0})},n={};r(n,{examples:()=>v,schemas:()=>s}),module.exports=(e=n,((e,r,n,s)=>{if(r&&"object"==typeof r||"function"==typeof r)for(let c of i(r))o.call(e,c)||c===n||t(e,c,{get:()=>r[c],enumerable:!(s=a(r,c))||s.enumerable});return e})(t({},"__esModule",{value:!0}),e));var s={};r(s,{MappingSchema:()=>g,SettingsSchema:()=>l,mapping:()=>k,settings:()=>h});var c=require("@walkeros/core/dev"),p=require("@walkeros/core/dev"),{ValueSchema:d}=p.schemas,m=p.z.record(p.z.string().regex(/^\d+$/,'Dimension keys are bare numeric ids like "1"'),d),l=p.z.object({siteId:p.z.string().min(1).describe("Matomo Site ID (like 1, 2, etc.). Required when loadScript is true").optional(),url:p.z.string().url().describe("Base URL of your Matomo instance, normalized to one trailing slash (like https://analytics.example.com/ or https://yourname.matomo.cloud/). Required when loadScript is true").optional(),disableCookies:p.z.boolean().default(!1).describe("Disable all tracking cookies for cookie-free analytics"),enableLinkTracking:p.z.boolean().default(!0).describe("Enable automatic outlink and download tracking"),enableHeartBeatTimer:p.z.number().int().positive().optional().describe("Enable heart beat timer with interval in seconds for accurate time-on-page"),customDimensions:m.describe('Custom dimensions applied to every hit, keyed by bare dimension id (like { "1": "data.userType" }). Each value is resolved per event. Rule-level customDimensions win per key.').optional()}),u=require("@walkeros/core/dev"),g=u.z.object({goalId:u.z.union([u.z.string().regex(/^[1-9]\d*$/,'Goal IDs are positive integers like "1"'),u.z.number().int().positive()]).optional().describe("Matomo goal ID, a positive integer like 1. Adds a trackGoal conversion alongside this event"),goalValue:u.schemas.ValueSchema.describe('Goal revenue, resolved from the event (like "data.revenue"), passed as the trackGoal revenue').optional(),siteSearch:u.z.boolean().optional().describe("Track as internal site search using trackSiteSearch"),contentImpression:u.z.boolean().optional().describe("Track as content impression using trackContentImpression"),contentInteraction:u.z.boolean().optional().describe("Track as content interaction using trackContentInteraction"),customDimensions:m.describe('Custom dimensions for this rule, keyed by bare dimension id (like { "3": "data.category" }). Set just before the hit and removed after it; wins per key over the destination customDimensions.').optional()}),h=(0,c.zodToSchema)(l),k=(0,c.zodToSchema)(g),v={};r(v,{env:()=>w,step:()=>S});var w={};r(w,{init:()=>y,push:()=>b,simulation:()=>q});var y={window:{location:{href:"https://www.example.com/page"}},document:{createElement:()=>({type:"",src:"",async:!1,defer:!1}),head:{appendChild:()=>{}}}},b={window:{_paq:[],location:{href:"https://www.example.com/page"}},document:{createElement:()=>({type:"",src:"",async:!1,defer:!1}),head:{appendChild:()=>{}}}},q=["call:window._paq.push"],S={};r(S,{customDimensions:()=>M,customEvent:()=>C,ecommerceCartUpdate:()=>I,ecommerceOrder:()=>z,goalTracking:()=>V,init:()=>E,pageView:()=>D,pageViewWithGoal:()=>_,productDetailView:()=>O,siteSearch:()=>P});var f=require("@walkeros/core"),E={title:"Initialization",description:"Destination bootstrap loads the Matomo tracker script and configures the tracker URL and site id.",in:{loadScript:!0,settings:{siteId:"1",url:"https://analytics.example.com/"}},out:[["_paq.push",["setTrackerUrl","https://analytics.example.com/matomo.php"]],["_paq.push",["setSiteId","1"]],["_paq.push",["enableLinkTracking"]]]},D={title:"Page view",description:"A page view is tracked in Matomo via trackPageView with the page title from event data.",in:(0,f.getEvent)("page view",{timestamp:1700000400}),mapping:{data:"data.title"},out:[["_paq.push",["trackPageView","walkerOS documentation"]]]},_={title:"Page view with goal",description:"A page view rule with a goal keeps the default trackPageView and adds a trackGoal conversion.",in:(0,f.getEvent)("page view",{timestamp:1700000407}),mapping:{settings:{goalId:"1"}},out:[["_paq.push",["trackPageView","walkerOS documentation"]],["_paq.push",["trackGoal","1",void 0]]]},C={title:"Custom event with goal",description:"A promotion visible event fires Matomo trackEvent and then trackGoal to record a goal conversion.",in:(0,f.getEvent)("promotion visible",{timestamp:1700000401}),mapping:{name:"trackEvent",settings:{goalId:"1"},data:{set:["data.name","data.position"]}},out:[["_paq.push",["trackEvent","Setting up tracking easily","hero"]],["_paq.push",["trackGoal","1",void 0]]]},z={title:"Ecommerce order",description:"A completed order calls Matomo trackEcommerceOrder with line items and order totals.",in:(0,f.getEvent)("order complete",{timestamp:1700000402}),mapping:{name:"trackEcommerceOrder",data:{set:[{loop:["nested",{condition:e=>(0,f.isObject)(e)&&"product"===e.entity,map:{sku:"data.id",name:"data.name",category:{value:""},price:"data.price",quantity:{value:1}}}]},{map:{orderId:"data.id",grandTotal:"data.total",tax:"data.taxes",shipping:"data.shipping"}}]}},out:[["_paq.push",["trackEcommerceOrder",[{sku:"ers",name:"Everyday Ruck Snack",category:"",price:420,quantity:1},{sku:"cc",name:"Cool Cap",category:"",price:42,quantity:1}],{orderId:"0rd3r1d",grandTotal:555,tax:73.76,shipping:5.22}]]]},I={title:"Cart update",description:"A cart view calls Matomo trackEcommerceCartUpdate with the nested product items and cart total.",in:(0,f.getEvent)("cart view",{timestamp:1700000403}),mapping:{name:"trackEcommerceCartUpdate",data:{set:[{loop:["nested",{condition:e=>(0,f.isObject)(e)&&"product"===e.entity,map:{sku:"data.id",name:"data.name",category:{value:""},price:"data.price",quantity:{value:1}}}]},"data.value"]}},out:[["_paq.push",["trackEcommerceCartUpdate",[{sku:"ers",name:"Everyday Ruck Snack",category:"",price:420,quantity:1}],840]]]},O={title:"Product detail view",description:"A product view fires Matomo ecommerceProductDetailView with a single-product array.",in:(0,f.getEvent)("product view",{timestamp:1700000404}),mapping:{name:"ecommerceProductDetailView",data:{set:[{set:[{map:{sku:"data.id",name:"data.name",price:"data.price",quantity:{value:1}}}]}]}},out:[["_paq.push",["ecommerceProductDetailView",[{sku:"ers",name:"Everyday Ruck Snack",price:420,quantity:1}]]]]},P={title:"Site search",description:"A search submit fires Matomo trackSiteSearch with the keyword, category, and number of results.",in:(0,f.getEvent)("search submit",{timestamp:1700000405,data:{query:"shoes",category:"products",resultsCount:42}}),mapping:{name:"trackSiteSearch",settings:{siteSearch:!0},data:{set:["data.query","data.category","data.resultsCount"]}},out:[["_paq.push",["trackSiteSearch","shoes","products",42]]]},V={title:"Goal with value",description:"A promotion event fires Matomo trackEvent and then trackGoal with a monetary goal value from event data.",in:(0,f.getEvent)("promotion visible",{timestamp:1700000406,data:{name:"Setting up tracking easily",position:"hero",value:50}}),mapping:{name:"trackEvent",settings:{goalId:"1",goalValue:"data.value"},data:{set:["data.name"]}},out:[["_paq.push",["trackEvent","Setting up tracking easily"]],["_paq.push",["trackGoal","1",50]]]},M={title:"Custom dimensions",description:"Destination and rule custom dimensions are set right before the page view; afterwards the rule-only dimension is deleted and the destination value is set again.",public:!1,in:(0,f.getEvent)("page view",{timestamp:1700000408}),settings:{customDimensions:{1:"globals.pagegroup"}},mapping:{settings:{customDimensions:{2:"data.id"}}},out:[["_paq.push",["setCustomDimension",1,"docs"]],["_paq.push",["setCustomDimension",2,"/docs/"]],["_paq.push",["trackPageView","walkerOS documentation"]],["_paq.push",["deleteCustomDimension",2]],["_paq.push",["setCustomDimension",1,"docs"]]]};//# sourceMappingURL=dev.js.map
1
+ "use strict";var e,t=Object.defineProperty,a=Object.getOwnPropertyDescriptor,i=Object.getOwnPropertyNames,o=Object.prototype.hasOwnProperty,n=(e,a)=>{for(var i in a)t(e,i,{get:a[i],enumerable:!0})},r={};n(r,{examples:()=>v,schemas:()=>s}),module.exports=(e=r,((e,n,r,s)=>{if(n&&"object"==typeof n||"function"==typeof n)for(let c of i(n))o.call(e,c)||c===r||t(e,c,{get:()=>n[c],enumerable:!(s=a(n,c))||s.enumerable});return e})(t({},"__esModule",{value:!0}),e));var s={};n(s,{MappingSchema:()=>g,SettingsSchema:()=>m,mapping:()=>k,settings:()=>h});var c=require("@walkeros/core/dev"),p=require("@walkeros/core/dev"),{ValueSchema:d}=p.schemas,l=p.z.record(p.z.string().regex(/^\d+$/,'Dimension keys are bare numeric ids like "1"'),d),m=p.z.object({siteId:p.z.string().min(1).describe("Matomo Site ID (like 1, 2, etc.). Required when loadScript is true").optional(),url:p.z.string().url().describe("Base URL of your Matomo instance, normalized to one trailing slash (like https://analytics.example.com/ or https://yourname.matomo.cloud/). Required when loadScript is true").optional(),disableCookies:p.z.boolean().default(!1).describe("Disable all tracking cookies for cookie-free analytics"),enableLinkTracking:p.z.boolean().default(!0).describe("Enable automatic outlink and download tracking"),enableHeartBeatTimer:p.z.number().int().positive().optional().describe("Enable heart beat timer with interval in seconds for accurate time-on-page"),customDimensions:l.describe('Custom dimensions applied to every hit, keyed by bare dimension id (like { "1": "data.userType" }). Each value is resolved per event. Rule-level customDimensions win per key.').optional()}),u=require("@walkeros/core/dev"),g=u.z.object({goalId:u.z.union([u.z.string().regex(/^[1-9]\d*$/,'Goal IDs are positive integers like "1"'),u.z.number().int().positive()]).optional().describe("Matomo goal ID, a positive integer like 1. Adds a trackGoal conversion alongside this event"),goalValue:u.schemas.ValueSchema.describe('Goal revenue, resolved from the event (like "data.revenue"), passed as the trackGoal revenue').optional(),siteSearch:u.z.boolean().optional().describe("Track as internal site search using trackSiteSearch"),contentImpression:u.z.boolean().optional().describe("Track as content impression using trackContentImpression"),contentInteraction:u.z.boolean().optional().describe("Track as content interaction using trackContentInteraction"),customDimensions:l.describe('Custom dimensions for this rule, keyed by bare dimension id (like { "3": "data.category" }). Set just before the hit and removed after it; wins per key over the destination customDimensions.').optional()}),h=(0,c.zodToSchema)(m),k=(0,c.zodToSchema)(g),v={};n(v,{env:()=>y,step:()=>q});var y={};n(y,{init:()=>w,push:()=>b,simulation:()=>f});var w={window:{location:{href:"https://www.example.com/page"}},document:{createElement:()=>({type:"",src:"",async:!1,defer:!1}),head:{appendChild:()=>{}}}},b={window:{_paq:[],location:{href:"https://www.example.com/page"}},document:{createElement:()=>({type:"",src:"",async:!1,defer:!1}),head:{appendChild:()=>{}}}},f=["call:window._paq.push"],q={};n(q,{customDimensions:()=>x,customEvent:()=>D,ecommerceCartUpdate:()=>I,ecommerceOrder:()=>z,goalTracking:()=>V,init:()=>E,pageView:()=>_,pageViewWithGoal:()=>C,productDetailView:()=>T,siteSearch:()=>M});var S=require("@walkeros/core"),E={title:"Initialization",description:"Destination bootstrap loads the Matomo tracker script and configures the tracker URL and site id.",in:{loadScript:!0,settings:{siteId:"1",url:"https://analytics.example.com/"}},out:[["_paq.push",["setTrackerUrl","https://analytics.example.com/matomo.php"]],["_paq.push",["setSiteId","1"]],["_paq.push",["enableLinkTracking"]]]},_={title:"Page view",description:"A page view is tracked in Matomo via trackPageView with the page title from event data.",in:(0,S.getEvent)("page view",{timestamp:1700000400}),mapping:{data:"data.title"},out:[["_paq.push",["trackPageView","walkerOS documentation"]]]},C={title:"Page view with goal",description:"A page view rule with a goal keeps the default trackPageView and adds a trackGoal conversion.",in:(0,S.getEvent)("page view",{timestamp:1700000407}),mapping:{settings:{goalId:"1"}},out:[["_paq.push",["trackPageView","walkerOS documentation"]],["_paq.push",["trackGoal","1",void 0]]]},D={title:"Custom event with goal",description:"A promotion visible event fires Matomo trackEvent and then trackGoal to record a goal conversion.",in:(0,S.getEvent)("promotion visible",{timestamp:1700000401}),mapping:{name:"trackEvent",settings:{goalId:"1"},data:{set:["data.name","data.position"]}},out:[["_paq.push",["trackEvent","Setting up tracking easily","hero"]],["_paq.push",["trackGoal","1",void 0]]]},z={public:!1,title:"Ecommerce order",description:"Test fixture for nested product mapping, not a valid Matomo call: Matomo records an order's products only after an addEcommerceItem call per product.",in:(0,S.getEvent)("order complete",{timestamp:1700000402}),mapping:{name:"trackEcommerceOrder",data:{set:[{loop:["nested",{condition:e=>"object"==typeof e&&null!==e&&"entity"in e&&"product"===e.entity,map:{sku:"data.id",name:"data.name",category:{value:""},price:"data.price",quantity:{value:1}}}]},{map:{orderId:"data.id",grandTotal:"data.total",tax:"data.taxes",shipping:"data.shipping"}}]}},out:[["_paq.push",["trackEcommerceOrder",[{sku:"ers",name:"Everyday Ruck Snack",category:"",price:420,quantity:1},{sku:"cc",name:"Cool Cap",category:"",price:42,quantity:1}],{orderId:"0rd3r1d",grandTotal:555,tax:73.76,shipping:5.22}]]]},I={public:!1,title:"Cart update",description:"Test fixture for nested product mapping, not a valid Matomo call: Matomo takes trackEcommerceCartUpdate(grandTotal) after an addEcommerceItem call per product.",in:(0,S.getEvent)("cart view",{timestamp:1700000403}),mapping:{name:"trackEcommerceCartUpdate",data:{set:[{loop:["nested",{condition:e=>"object"==typeof e&&null!==e&&"entity"in e&&"product"===e.entity,map:{sku:"data.id",name:"data.name",category:{value:""},price:"data.price",quantity:{value:1}}}]},"data.value"]}},out:[["_paq.push",["trackEcommerceCartUpdate",[{sku:"ers",name:"Everyday Ruck Snack",category:"",price:420,quantity:1}],840]]]},T={public:!1,title:"Product detail view",description:"Test fixture for a single-product mapping, not a valid Matomo call: Matomo tracks a product view with setEcommerceView followed by trackPageView.",in:(0,S.getEvent)("product view",{timestamp:1700000404}),mapping:{name:"ecommerceProductDetailView",data:{set:[{set:[{map:{sku:"data.id",name:"data.name",price:"data.price",quantity:{value:1}}}]}]}},out:[["_paq.push",["ecommerceProductDetailView",[{sku:"ers",name:"Everyday Ruck Snack",price:420,quantity:1}]]]]},M={title:"Site search",description:"A search submit fires Matomo trackSiteSearch with the keyword, category, and number of results.",in:(0,S.getEvent)("search submit",{timestamp:1700000405,data:{query:"shoes",category:"products",resultsCount:42}}),mapping:{name:"trackSiteSearch",settings:{siteSearch:!0},data:{set:["data.query","data.category","data.resultsCount"]}},out:[["_paq.push",["trackSiteSearch","shoes","products",42]]]},V={title:"Goal with value",description:"A promotion event fires Matomo trackEvent and then trackGoal with a monetary goal value from event data.",in:(0,S.getEvent)("promotion visible",{timestamp:1700000406,data:{name:"Setting up tracking easily",position:"hero",value:50}}),mapping:{name:"trackEvent",settings:{goalId:"1",goalValue:"data.value"},data:{set:["data.name"]}},out:[["_paq.push",["trackEvent","Setting up tracking easily"]],["_paq.push",["trackGoal","1",50]]]},x={title:"Custom dimensions",description:"Destination and rule custom dimensions are set right before the page view; afterwards the rule-only dimension is deleted and the destination value is set again.",public:!1,in:(0,S.getEvent)("page view",{timestamp:1700000408}),settings:{customDimensions:{1:"globals.pagegroup"}},mapping:{settings:{customDimensions:{2:"data.id"}}},out:[["_paq.push",["setCustomDimension",1,"docs"]],["_paq.push",["setCustomDimension",2,"/docs/"]],["_paq.push",["trackPageView","walkerOS documentation"]],["_paq.push",["deleteCustomDimension",2]],["_paq.push",["setCustomDimension",1,"docs"]]]};//# sourceMappingURL=dev.js.map
package/dist/dev.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/dev.ts","../src/schemas/index.ts","../src/schemas/settings.ts","../src/schemas/mapping.ts","../src/examples/index.ts","../src/examples/env.ts","../src/examples/step.ts"],"sourcesContent":["export * as schemas from './schemas';\nexport * as examples from './examples';\n","import { zodToSchema } from '@walkeros/core/dev';\nimport { SettingsSchema } from './settings';\nimport { MappingSchema } from './mapping';\n\nexport { SettingsSchema, type Settings } from './settings';\nexport { MappingSchema, type Mapping } from './mapping';\n\n// JSON Schema\nexport const settings = zodToSchema(SettingsSchema);\nexport const mapping = zodToSchema(MappingSchema);\n","import { schemas, z } from '@walkeros/core/dev';\n\nconst { ValueSchema } = schemas;\n\nexport const CustomDimensionsSchema = z.record(\n z.string().regex(/^\\d+$/, 'Dimension keys are bare numeric ids like \"1\"'),\n ValueSchema,\n);\n\nexport const SettingsSchema = z.object({\n siteId: z\n .string()\n .min(1)\n .describe(\n 'Matomo Site ID (like 1, 2, etc.). Required when loadScript is true',\n )\n .optional(),\n url: z\n .string()\n .url()\n .describe(\n 'Base URL of your Matomo instance, normalized to one trailing slash (like https://analytics.example.com/ or https://yourname.matomo.cloud/). Required when loadScript is true',\n )\n .optional(),\n disableCookies: z\n .boolean()\n .default(false)\n .describe('Disable all tracking cookies for cookie-free analytics'),\n enableLinkTracking: z\n .boolean()\n .default(true)\n .describe('Enable automatic outlink and download tracking'),\n enableHeartBeatTimer: z\n .number()\n .int()\n .positive()\n .optional()\n .describe(\n 'Enable heart beat timer with interval in seconds for accurate time-on-page',\n ),\n customDimensions: CustomDimensionsSchema.describe(\n 'Custom dimensions applied to every hit, keyed by bare dimension id (like { \"1\": \"data.userType\" }). Each value is resolved per event. Rule-level customDimensions win per key.',\n ).optional(),\n});\n\nexport type Settings = z.infer<typeof SettingsSchema>;\n","import { schemas, z } from '@walkeros/core/dev';\nimport { CustomDimensionsSchema } from './settings';\n\nexport const MappingSchema = z.object({\n goalId: z\n .union([\n z.string().regex(/^[1-9]\\d*$/, 'Goal IDs are positive integers like \"1\"'),\n z.number().int().positive(),\n ])\n .optional()\n .describe(\n 'Matomo goal ID, a positive integer like 1. Adds a trackGoal conversion alongside this event',\n ),\n goalValue: schemas.ValueSchema.describe(\n 'Goal revenue, resolved from the event (like \"data.revenue\"), passed as the trackGoal revenue',\n ).optional(),\n siteSearch: z\n .boolean()\n .optional()\n .describe('Track as internal site search using trackSiteSearch'),\n contentImpression: z\n .boolean()\n .optional()\n .describe('Track as content impression using trackContentImpression'),\n contentInteraction: z\n .boolean()\n .optional()\n .describe('Track as content interaction using trackContentInteraction'),\n customDimensions: CustomDimensionsSchema.describe(\n 'Custom dimensions for this rule, keyed by bare dimension id (like { \"3\": \"data.category\" }). Set just before the hit and removed after it; wins per key over the destination customDimensions.',\n ).optional(),\n});\n\nexport type Mapping = z.infer<typeof MappingSchema>;\n","export * as env from './env';\nexport * as step from './step';\n","import type { Env } from '../types';\n\n/**\n * Example environment configurations for Matomo destination.\n * Mocks the _paq command queue and DOM elements for testing\n * without requiring real browser or network.\n */\n\nexport const init: Env | undefined = {\n window: {\n // _paq absent: init() is expected to install the queue.\n location: { href: 'https://www.example.com/page' },\n },\n document: {\n createElement: () => ({\n type: '',\n src: '',\n async: false,\n defer: false,\n }),\n head: { appendChild: () => {} },\n },\n};\n\nexport const push: Env = {\n window: {\n _paq: [],\n location: { href: 'https://www.example.com/page' },\n },\n document: {\n createElement: () => ({\n type: '',\n src: '',\n async: false,\n defer: false,\n }),\n head: { appendChild: () => {} },\n },\n};\n\n/**\n * Simulation tracking paths.\n * Specifies which function calls to track during simulation.\n */\nexport const simulation = [\n 'call:window._paq.push', // Track _paq.push calls\n];\n","import type { Flow } from '@walkeros/core';\nimport type { Settings } from '../types';\nimport { getEvent, isObject } from '@walkeros/core';\n\n/**\n * Matomo step example. The test runner registers the destination with the\n * init example's config and merges an example's optional `settings` on top.\n */\nexport type StepExample = Flow.StepExample & {\n /** Destination settings merged over the init example's settings. */\n settings?: Settings;\n};\n\n/**\n * Destination bootstrap.\n * Given the canonical settings, init loads the Matomo script and configures\n * the tracker URL, site ID, and link tracking. Reproduce by passing the same\n * settings to `startFlow` as the destination config.\n */\nexport const init: StepExample = {\n title: 'Initialization',\n description:\n 'Destination bootstrap loads the Matomo tracker script and configures the tracker URL and site id.',\n in: {\n loadScript: true,\n settings: {\n siteId: '1',\n url: 'https://analytics.example.com/',\n },\n },\n out: [\n [\n '_paq.push',\n ['setTrackerUrl', 'https://analytics.example.com/matomo.php'],\n ],\n ['_paq.push', ['setSiteId', '1']],\n ['_paq.push', ['enableLinkTracking']],\n ],\n};\n\n/**\n * Default page view -- no mapping name needed.\n * Destination auto-calls trackPageView with the page title.\n */\nexport const pageView: StepExample = {\n title: 'Page view',\n description:\n 'A page view is tracked in Matomo via trackPageView with the page title from event data.',\n in: getEvent('page view', { timestamp: 1700000400 }),\n mapping: {\n data: 'data.title',\n },\n out: [['_paq.push', ['trackPageView', 'walkerOS documentation']]],\n};\n\n/**\n * Page view rule with a goal -- the default trackPageView stays and the goal\n * follows it.\n */\nexport const pageViewWithGoal: StepExample = {\n title: 'Page view with goal',\n description:\n 'A page view rule with a goal keeps the default trackPageView and adds a trackGoal conversion.',\n in: getEvent('page view', { timestamp: 1700000407 }),\n mapping: {\n settings: {\n goalId: '1',\n },\n },\n out: [\n ['_paq.push', ['trackPageView', 'walkerOS documentation']],\n ['_paq.push', ['trackGoal', '1', undefined]],\n ],\n};\n\n/**\n * Custom event tracking with goal conversion.\n * Uses trackEvent with mapped name, followed by trackGoal.\n */\nexport const customEvent: StepExample = {\n title: 'Custom event with goal',\n description:\n 'A promotion visible event fires Matomo trackEvent and then trackGoal to record a goal conversion.',\n in: getEvent('promotion visible', { timestamp: 1700000401 }),\n mapping: {\n name: 'trackEvent',\n settings: {\n goalId: '1',\n },\n data: {\n set: ['data.name', 'data.position'],\n },\n },\n out: [\n ['_paq.push', ['trackEvent', 'Setting up tracking easily', 'hero']],\n ['_paq.push', ['trackGoal', '1', undefined]],\n ],\n};\n\n/**\n * Ecommerce order -- one call with cart items array and order totals.\n */\nexport const ecommerceOrder: StepExample = {\n title: 'Ecommerce order',\n description:\n 'A completed order calls Matomo trackEcommerceOrder with line items and order totals.',\n in: getEvent('order complete', { timestamp: 1700000402 }),\n mapping: {\n name: 'trackEcommerceOrder',\n data: {\n set: [\n {\n loop: [\n 'nested',\n {\n condition: (entity: unknown) =>\n isObject(entity) && entity.entity === 'product',\n map: {\n sku: 'data.id',\n name: 'data.name',\n category: { value: '' },\n price: 'data.price',\n quantity: { value: 1 },\n },\n },\n ],\n },\n {\n map: {\n orderId: 'data.id',\n grandTotal: 'data.total',\n tax: 'data.taxes',\n shipping: 'data.shipping',\n },\n },\n ],\n },\n },\n out: [\n [\n '_paq.push',\n [\n 'trackEcommerceOrder',\n [\n {\n sku: 'ers',\n name: 'Everyday Ruck Snack',\n category: '',\n price: 420,\n quantity: 1,\n },\n {\n sku: 'cc',\n name: 'Cool Cap',\n category: '',\n price: 42,\n quantity: 1,\n },\n ],\n {\n orderId: '0rd3r1d',\n grandTotal: 555,\n tax: 73.76,\n shipping: 5.22,\n },\n ],\n ],\n ],\n};\n\n/**\n * Ecommerce cart update -- addEcommerceItem per nested product,\n * then trackEcommerceCartUpdate with cart total.\n */\nexport const ecommerceCartUpdate: StepExample = {\n title: 'Cart update',\n description:\n 'A cart view calls Matomo trackEcommerceCartUpdate with the nested product items and cart total.',\n in: getEvent('cart view', { timestamp: 1700000403 }),\n mapping: {\n name: 'trackEcommerceCartUpdate',\n data: {\n set: [\n {\n loop: [\n 'nested',\n {\n condition: (entity: unknown) =>\n isObject(entity) && entity.entity === 'product',\n map: {\n sku: 'data.id',\n name: 'data.name',\n category: { value: '' },\n price: 'data.price',\n quantity: { value: 1 },\n },\n },\n ],\n },\n 'data.value',\n ],\n },\n },\n out: [\n [\n '_paq.push',\n [\n 'trackEcommerceCartUpdate',\n [\n {\n sku: 'ers',\n name: 'Everyday Ruck Snack',\n category: '',\n price: 420,\n quantity: 1,\n },\n ],\n 840,\n ],\n ],\n ],\n};\n\n/**\n * Product detail view -- setEcommerceView equivalent with a single product array.\n */\nexport const productDetailView: StepExample = {\n title: 'Product detail view',\n description:\n 'A product view fires Matomo ecommerceProductDetailView with a single-product array.',\n in: getEvent('product view', { timestamp: 1700000404 }),\n mapping: {\n name: 'ecommerceProductDetailView',\n data: {\n set: [\n {\n set: [\n {\n map: {\n sku: 'data.id',\n name: 'data.name',\n price: 'data.price',\n quantity: { value: 1 },\n },\n },\n ],\n },\n ],\n },\n },\n out: [\n [\n '_paq.push',\n [\n 'ecommerceProductDetailView',\n [\n {\n sku: 'ers',\n name: 'Everyday Ruck Snack',\n price: 420,\n quantity: 1,\n },\n ],\n ],\n ],\n ],\n};\n\n/**\n * Site search -- trackSiteSearch with keyword, category, result count.\n */\nexport const siteSearch: StepExample = {\n title: 'Site search',\n description:\n 'A search submit fires Matomo trackSiteSearch with the keyword, category, and number of results.',\n in: getEvent('search submit', {\n timestamp: 1700000405,\n data: { query: 'shoes', category: 'products', resultsCount: 42 },\n }),\n mapping: {\n name: 'trackSiteSearch',\n settings: {\n siteSearch: true,\n },\n data: {\n set: ['data.query', 'data.category', 'data.resultsCount'],\n },\n },\n out: [['_paq.push', ['trackSiteSearch', 'shoes', 'products', 42]]],\n};\n\n/**\n * Goal tracking alongside a tracked event.\n * Uses a known fixture event (promotion visible) so data paths resolve.\n */\nexport const goalTracking: StepExample = {\n title: 'Goal with value',\n description:\n 'A promotion event fires Matomo trackEvent and then trackGoal with a monetary goal value from event data.',\n in: getEvent('promotion visible', {\n timestamp: 1700000406,\n data: { name: 'Setting up tracking easily', position: 'hero', value: 50 },\n }),\n mapping: {\n name: 'trackEvent',\n settings: {\n goalId: '1',\n goalValue: 'data.value',\n },\n data: {\n set: ['data.name'],\n },\n },\n out: [\n ['_paq.push', ['trackEvent', 'Setting up tracking easily']],\n ['_paq.push', ['trackGoal', '1', 50]],\n ],\n};\n\n/**\n * Destination and rule custom dimensions, resolved per event. The destination\n * dimensions come from `settings`, which the docs do not show, so this\n * example stays out of them.\n */\nexport const customDimensions: StepExample = {\n title: 'Custom dimensions',\n description:\n 'Destination and rule custom dimensions are set right before the page view; afterwards the rule-only dimension is deleted and the destination value is set again.',\n public: false,\n in: getEvent('page view', { timestamp: 1700000408 }),\n settings: {\n customDimensions: { '1': 'globals.pagegroup' },\n },\n mapping: {\n settings: {\n customDimensions: { '2': 'data.id' },\n },\n },\n out: [\n ['_paq.push', ['setCustomDimension', 1, 'docs']],\n ['_paq.push', ['setCustomDimension', 2, '/docs/']],\n ['_paq.push', ['trackPageView', 'walkerOS documentation']],\n ['_paq.push', ['deleteCustomDimension', 2]],\n ['_paq.push', ['setCustomDimension', 1, 'docs']],\n ],\n};\n"],"mappings":"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","names":["import_dev","import_dev","init"]}
1
+ {"version":3,"sources":["../src/dev.ts","../src/schemas/index.ts","../src/schemas/settings.ts","../src/schemas/mapping.ts","../src/examples/index.ts","../src/examples/env.ts","../src/examples/step.ts"],"sourcesContent":["export * as schemas from './schemas';\nexport * as examples from './examples';\n","import { zodToSchema } from '@walkeros/core/dev';\nimport { SettingsSchema } from './settings';\nimport { MappingSchema } from './mapping';\n\nexport { SettingsSchema, type Settings } from './settings';\nexport { MappingSchema, type Mapping } from './mapping';\n\n// JSON Schema\nexport const settings = zodToSchema(SettingsSchema);\nexport const mapping = zodToSchema(MappingSchema);\n","import { schemas, z } from '@walkeros/core/dev';\n\nconst { ValueSchema } = schemas;\n\nexport const CustomDimensionsSchema = z.record(\n z.string().regex(/^\\d+$/, 'Dimension keys are bare numeric ids like \"1\"'),\n ValueSchema,\n);\n\nexport const SettingsSchema = z.object({\n siteId: z\n .string()\n .min(1)\n .describe(\n 'Matomo Site ID (like 1, 2, etc.). Required when loadScript is true',\n )\n .optional(),\n url: z\n .string()\n .url()\n .describe(\n 'Base URL of your Matomo instance, normalized to one trailing slash (like https://analytics.example.com/ or https://yourname.matomo.cloud/). Required when loadScript is true',\n )\n .optional(),\n disableCookies: z\n .boolean()\n .default(false)\n .describe('Disable all tracking cookies for cookie-free analytics'),\n enableLinkTracking: z\n .boolean()\n .default(true)\n .describe('Enable automatic outlink and download tracking'),\n enableHeartBeatTimer: z\n .number()\n .int()\n .positive()\n .optional()\n .describe(\n 'Enable heart beat timer with interval in seconds for accurate time-on-page',\n ),\n customDimensions: CustomDimensionsSchema.describe(\n 'Custom dimensions applied to every hit, keyed by bare dimension id (like { \"1\": \"data.userType\" }). Each value is resolved per event. Rule-level customDimensions win per key.',\n ).optional(),\n});\n\nexport type Settings = z.infer<typeof SettingsSchema>;\n","import { schemas, z } from '@walkeros/core/dev';\nimport { CustomDimensionsSchema } from './settings';\n\nexport const MappingSchema = z.object({\n goalId: z\n .union([\n z.string().regex(/^[1-9]\\d*$/, 'Goal IDs are positive integers like \"1\"'),\n z.number().int().positive(),\n ])\n .optional()\n .describe(\n 'Matomo goal ID, a positive integer like 1. Adds a trackGoal conversion alongside this event',\n ),\n goalValue: schemas.ValueSchema.describe(\n 'Goal revenue, resolved from the event (like \"data.revenue\"), passed as the trackGoal revenue',\n ).optional(),\n siteSearch: z\n .boolean()\n .optional()\n .describe('Track as internal site search using trackSiteSearch'),\n contentImpression: z\n .boolean()\n .optional()\n .describe('Track as content impression using trackContentImpression'),\n contentInteraction: z\n .boolean()\n .optional()\n .describe('Track as content interaction using trackContentInteraction'),\n customDimensions: CustomDimensionsSchema.describe(\n 'Custom dimensions for this rule, keyed by bare dimension id (like { \"3\": \"data.category\" }). Set just before the hit and removed after it; wins per key over the destination customDimensions.',\n ).optional(),\n});\n\nexport type Mapping = z.infer<typeof MappingSchema>;\n","export * as env from './env';\nexport * as step from './step';\n","import type { Env } from '../types';\n\n/**\n * Example environment configurations for Matomo destination.\n * Mocks the _paq command queue and DOM elements for testing\n * without requiring real browser or network.\n */\n\nexport const init: Env | undefined = {\n window: {\n // _paq absent: init() is expected to install the queue.\n location: { href: 'https://www.example.com/page' },\n },\n document: {\n createElement: () => ({\n type: '',\n src: '',\n async: false,\n defer: false,\n }),\n head: { appendChild: () => {} },\n },\n};\n\nexport const push: Env = {\n window: {\n _paq: [],\n location: { href: 'https://www.example.com/page' },\n },\n document: {\n createElement: () => ({\n type: '',\n src: '',\n async: false,\n defer: false,\n }),\n head: { appendChild: () => {} },\n },\n};\n\n/**\n * Simulation tracking paths.\n * Specifies which function calls to track during simulation.\n */\nexport const simulation = [\n 'call:window._paq.push', // Track _paq.push calls\n];\n","import type { Flow } from '@walkeros/core';\nimport type { Settings } from '../types';\nimport { getEvent } from '@walkeros/core';\n\n/**\n * Matomo step example. The test runner registers the destination with the\n * init example's config and merges an example's optional `settings` on top.\n */\nexport type StepExample = Flow.StepExample & {\n /** Destination settings merged over the init example's settings. */\n settings?: Settings;\n};\n\n/**\n * Destination bootstrap.\n * Given the canonical settings, init loads the Matomo script and configures\n * the tracker URL, site ID, and link tracking. Reproduce by passing the same\n * settings to `startFlow` as the destination config.\n */\nexport const init: StepExample = {\n title: 'Initialization',\n description:\n 'Destination bootstrap loads the Matomo tracker script and configures the tracker URL and site id.',\n in: {\n loadScript: true,\n settings: {\n siteId: '1',\n url: 'https://analytics.example.com/',\n },\n },\n out: [\n [\n '_paq.push',\n ['setTrackerUrl', 'https://analytics.example.com/matomo.php'],\n ],\n ['_paq.push', ['setSiteId', '1']],\n ['_paq.push', ['enableLinkTracking']],\n ],\n};\n\n/**\n * Default page view -- no mapping name needed.\n * Destination auto-calls trackPageView with the page title.\n */\nexport const pageView: StepExample = {\n title: 'Page view',\n description:\n 'A page view is tracked in Matomo via trackPageView with the page title from event data.',\n in: getEvent('page view', { timestamp: 1700000400 }),\n mapping: {\n data: 'data.title',\n },\n out: [['_paq.push', ['trackPageView', 'walkerOS documentation']]],\n};\n\n/**\n * Page view rule with a goal -- the default trackPageView stays and the goal\n * follows it.\n */\nexport const pageViewWithGoal: StepExample = {\n title: 'Page view with goal',\n description:\n 'A page view rule with a goal keeps the default trackPageView and adds a trackGoal conversion.',\n in: getEvent('page view', { timestamp: 1700000407 }),\n mapping: {\n settings: {\n goalId: '1',\n },\n },\n out: [\n ['_paq.push', ['trackPageView', 'walkerOS documentation']],\n ['_paq.push', ['trackGoal', '1', undefined]],\n ],\n};\n\n/**\n * Custom event tracking with goal conversion.\n * Uses trackEvent with mapped name, followed by trackGoal.\n */\nexport const customEvent: StepExample = {\n title: 'Custom event with goal',\n description:\n 'A promotion visible event fires Matomo trackEvent and then trackGoal to record a goal conversion.',\n in: getEvent('promotion visible', { timestamp: 1700000401 }),\n mapping: {\n name: 'trackEvent',\n settings: {\n goalId: '1',\n },\n data: {\n set: ['data.name', 'data.position'],\n },\n },\n out: [\n ['_paq.push', ['trackEvent', 'Setting up tracking easily', 'hero']],\n ['_paq.push', ['trackGoal', '1', undefined]],\n ],\n};\n\n/**\n * Ecommerce order -- one call with cart items array and order totals.\n * Not public: Matomo records an order's products only after an\n * addEcommerceItem call per product, which one rule cannot send, so this\n * shows mapping mechanics only.\n */\nexport const ecommerceOrder: StepExample = {\n public: false,\n title: 'Ecommerce order',\n description:\n \"Test fixture for nested product mapping, not a valid Matomo call: Matomo records an order's products only after an addEcommerceItem call per product.\",\n in: getEvent('order complete', { timestamp: 1700000402 }),\n mapping: {\n name: 'trackEcommerceOrder',\n data: {\n set: [\n {\n loop: [\n 'nested',\n {\n condition: (entity: unknown) =>\n typeof entity === 'object' &&\n entity !== null &&\n 'entity' in entity &&\n entity.entity === 'product',\n map: {\n sku: 'data.id',\n name: 'data.name',\n category: { value: '' },\n price: 'data.price',\n quantity: { value: 1 },\n },\n },\n ],\n },\n {\n map: {\n orderId: 'data.id',\n grandTotal: 'data.total',\n tax: 'data.taxes',\n shipping: 'data.shipping',\n },\n },\n ],\n },\n },\n out: [\n [\n '_paq.push',\n [\n 'trackEcommerceOrder',\n [\n {\n sku: 'ers',\n name: 'Everyday Ruck Snack',\n category: '',\n price: 420,\n quantity: 1,\n },\n {\n sku: 'cc',\n name: 'Cool Cap',\n category: '',\n price: 42,\n quantity: 1,\n },\n ],\n {\n orderId: '0rd3r1d',\n grandTotal: 555,\n tax: 73.76,\n shipping: 5.22,\n },\n ],\n ],\n ],\n};\n\n/**\n * Ecommerce cart update -- nested products and the cart total in one call.\n * Not public: Matomo takes trackEcommerceCartUpdate(grandTotal) after an\n * addEcommerceItem call per product, which one rule cannot send.\n */\nexport const ecommerceCartUpdate: StepExample = {\n public: false,\n title: 'Cart update',\n description:\n 'Test fixture for nested product mapping, not a valid Matomo call: Matomo takes trackEcommerceCartUpdate(grandTotal) after an addEcommerceItem call per product.',\n in: getEvent('cart view', { timestamp: 1700000403 }),\n mapping: {\n name: 'trackEcommerceCartUpdate',\n data: {\n set: [\n {\n loop: [\n 'nested',\n {\n condition: (entity: unknown) =>\n typeof entity === 'object' &&\n entity !== null &&\n 'entity' in entity &&\n entity.entity === 'product',\n map: {\n sku: 'data.id',\n name: 'data.name',\n category: { value: '' },\n price: 'data.price',\n quantity: { value: 1 },\n },\n },\n ],\n },\n 'data.value',\n ],\n },\n },\n out: [\n [\n '_paq.push',\n [\n 'trackEcommerceCartUpdate',\n [\n {\n sku: 'ers',\n name: 'Everyday Ruck Snack',\n category: '',\n price: 420,\n quantity: 1,\n },\n ],\n 840,\n ],\n ],\n ],\n};\n\n/**\n * Product detail view with a single product array.\n * Not public: Matomo has no ecommerceProductDetailView; it tracks a product\n * view with setEcommerceView followed by trackPageView, two commands.\n */\nexport const productDetailView: StepExample = {\n public: false,\n title: 'Product detail view',\n description:\n 'Test fixture for a single-product mapping, not a valid Matomo call: Matomo tracks a product view with setEcommerceView followed by trackPageView.',\n in: getEvent('product view', { timestamp: 1700000404 }),\n mapping: {\n name: 'ecommerceProductDetailView',\n data: {\n set: [\n {\n set: [\n {\n map: {\n sku: 'data.id',\n name: 'data.name',\n price: 'data.price',\n quantity: { value: 1 },\n },\n },\n ],\n },\n ],\n },\n },\n out: [\n [\n '_paq.push',\n [\n 'ecommerceProductDetailView',\n [\n {\n sku: 'ers',\n name: 'Everyday Ruck Snack',\n price: 420,\n quantity: 1,\n },\n ],\n ],\n ],\n ],\n};\n\n/**\n * Site search -- trackSiteSearch with keyword, category, result count.\n */\nexport const siteSearch: StepExample = {\n title: 'Site search',\n description:\n 'A search submit fires Matomo trackSiteSearch with the keyword, category, and number of results.',\n in: getEvent('search submit', {\n timestamp: 1700000405,\n data: { query: 'shoes', category: 'products', resultsCount: 42 },\n }),\n mapping: {\n name: 'trackSiteSearch',\n settings: {\n siteSearch: true,\n },\n data: {\n set: ['data.query', 'data.category', 'data.resultsCount'],\n },\n },\n out: [['_paq.push', ['trackSiteSearch', 'shoes', 'products', 42]]],\n};\n\n/**\n * Goal tracking alongside a tracked event.\n * Uses a known fixture event (promotion visible) so data paths resolve.\n */\nexport const goalTracking: StepExample = {\n title: 'Goal with value',\n description:\n 'A promotion event fires Matomo trackEvent and then trackGoal with a monetary goal value from event data.',\n in: getEvent('promotion visible', {\n timestamp: 1700000406,\n data: { name: 'Setting up tracking easily', position: 'hero', value: 50 },\n }),\n mapping: {\n name: 'trackEvent',\n settings: {\n goalId: '1',\n goalValue: 'data.value',\n },\n data: {\n set: ['data.name'],\n },\n },\n out: [\n ['_paq.push', ['trackEvent', 'Setting up tracking easily']],\n ['_paq.push', ['trackGoal', '1', 50]],\n ],\n};\n\n/**\n * Destination and rule custom dimensions, resolved per event. The destination\n * dimensions come from `settings`, which the docs do not show, so this\n * example stays out of them.\n */\nexport const customDimensions: StepExample = {\n title: 'Custom dimensions',\n description:\n 'Destination and rule custom dimensions are set right before the page view; afterwards the rule-only dimension is deleted and the destination value is set again.',\n public: false,\n in: getEvent('page view', { timestamp: 1700000408 }),\n settings: {\n customDimensions: { '1': 'globals.pagegroup' },\n },\n mapping: {\n settings: {\n customDimensions: { '2': 'data.id' },\n },\n },\n out: [\n ['_paq.push', ['setCustomDimension', 1, 'docs']],\n ['_paq.push', ['setCustomDimension', 2, '/docs/']],\n ['_paq.push', ['trackPageView', 'walkerOS documentation']],\n ['_paq.push', ['deleteCustomDimension', 2]],\n ['_paq.push', ['setCustomDimension', 1, 'docs']],\n ],\n};\n"],"mappings":"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","names":["import_dev","import_dev","init"]}
package/dist/dev.mjs CHANGED
@@ -1 +1 @@
1
- var e=Object.defineProperty,t=(t,a)=>{for(var i in a)e(t,i,{get:a[i],enumerable:!0})},a={};t(a,{MappingSchema:()=>m,SettingsSchema:()=>c,mapping:()=>u,settings:()=>l});import{zodToSchema as i}from"@walkeros/core/dev";import{schemas as o,z as r}from"@walkeros/core/dev";var{ValueSchema:n}=o,s=r.record(r.string().regex(/^\d+$/,'Dimension keys are bare numeric ids like "1"'),n),c=r.object({siteId:r.string().min(1).describe("Matomo Site ID (like 1, 2, etc.). Required when loadScript is true").optional(),url:r.string().url().describe("Base URL of your Matomo instance, normalized to one trailing slash (like https://analytics.example.com/ or https://yourname.matomo.cloud/). Required when loadScript is true").optional(),disableCookies:r.boolean().default(!1).describe("Disable all tracking cookies for cookie-free analytics"),enableLinkTracking:r.boolean().default(!0).describe("Enable automatic outlink and download tracking"),enableHeartBeatTimer:r.number().int().positive().optional().describe("Enable heart beat timer with interval in seconds for accurate time-on-page"),customDimensions:s.describe('Custom dimensions applied to every hit, keyed by bare dimension id (like { "1": "data.userType" }). Each value is resolved per event. Rule-level customDimensions win per key.').optional()});import{schemas as p,z as d}from"@walkeros/core/dev";var m=d.object({goalId:d.union([d.string().regex(/^[1-9]\d*$/,'Goal IDs are positive integers like "1"'),d.number().int().positive()]).optional().describe("Matomo goal ID, a positive integer like 1. Adds a trackGoal conversion alongside this event"),goalValue:p.ValueSchema.describe('Goal revenue, resolved from the event (like "data.revenue"), passed as the trackGoal revenue').optional(),siteSearch:d.boolean().optional().describe("Track as internal site search using trackSiteSearch"),contentImpression:d.boolean().optional().describe("Track as content impression using trackContentImpression"),contentInteraction:d.boolean().optional().describe("Track as content interaction using trackContentInteraction"),customDimensions:s.describe('Custom dimensions for this rule, keyed by bare dimension id (like { "3": "data.category" }). Set just before the hit and removed after it; wins per key over the destination customDimensions.').optional()}),l=i(c),u=i(m),g={};t(g,{env:()=>h,step:()=>y});var h={};t(h,{init:()=>k,push:()=>v,simulation:()=>w});var k={window:{location:{href:"https://www.example.com/page"}},document:{createElement:()=>({type:"",src:"",async:!1,defer:!1}),head:{appendChild:()=>{}}}},v={window:{_paq:[],location:{href:"https://www.example.com/page"}},document:{createElement:()=>({type:"",src:"",async:!1,defer:!1}),head:{appendChild:()=>{}}}},w=["call:window._paq.push"],y={};t(y,{customDimensions:()=>G,customEvent:()=>D,ecommerceCartUpdate:()=>_,ecommerceOrder:()=>E,goalTracking:()=>x,init:()=>S,pageView:()=>f,pageViewWithGoal:()=>C,productDetailView:()=>I,siteSearch:()=>V});import{getEvent as b,isObject as q}from"@walkeros/core";var S={title:"Initialization",description:"Destination bootstrap loads the Matomo tracker script and configures the tracker URL and site id.",in:{loadScript:!0,settings:{siteId:"1",url:"https://analytics.example.com/"}},out:[["_paq.push",["setTrackerUrl","https://analytics.example.com/matomo.php"]],["_paq.push",["setSiteId","1"]],["_paq.push",["enableLinkTracking"]]]},f={title:"Page view",description:"A page view is tracked in Matomo via trackPageView with the page title from event data.",in:b("page view",{timestamp:1700000400}),mapping:{data:"data.title"},out:[["_paq.push",["trackPageView","walkerOS documentation"]]]},C={title:"Page view with goal",description:"A page view rule with a goal keeps the default trackPageView and adds a trackGoal conversion.",in:b("page view",{timestamp:1700000407}),mapping:{settings:{goalId:"1"}},out:[["_paq.push",["trackPageView","walkerOS documentation"]],["_paq.push",["trackGoal","1",void 0]]]},D={title:"Custom event with goal",description:"A promotion visible event fires Matomo trackEvent and then trackGoal to record a goal conversion.",in:b("promotion visible",{timestamp:1700000401}),mapping:{name:"trackEvent",settings:{goalId:"1"},data:{set:["data.name","data.position"]}},out:[["_paq.push",["trackEvent","Setting up tracking easily","hero"]],["_paq.push",["trackGoal","1",void 0]]]},E={title:"Ecommerce order",description:"A completed order calls Matomo trackEcommerceOrder with line items and order totals.",in:b("order complete",{timestamp:1700000402}),mapping:{name:"trackEcommerceOrder",data:{set:[{loop:["nested",{condition:e=>q(e)&&"product"===e.entity,map:{sku:"data.id",name:"data.name",category:{value:""},price:"data.price",quantity:{value:1}}}]},{map:{orderId:"data.id",grandTotal:"data.total",tax:"data.taxes",shipping:"data.shipping"}}]}},out:[["_paq.push",["trackEcommerceOrder",[{sku:"ers",name:"Everyday Ruck Snack",category:"",price:420,quantity:1},{sku:"cc",name:"Cool Cap",category:"",price:42,quantity:1}],{orderId:"0rd3r1d",grandTotal:555,tax:73.76,shipping:5.22}]]]},_={title:"Cart update",description:"A cart view calls Matomo trackEcommerceCartUpdate with the nested product items and cart total.",in:b("cart view",{timestamp:1700000403}),mapping:{name:"trackEcommerceCartUpdate",data:{set:[{loop:["nested",{condition:e=>q(e)&&"product"===e.entity,map:{sku:"data.id",name:"data.name",category:{value:""},price:"data.price",quantity:{value:1}}}]},"data.value"]}},out:[["_paq.push",["trackEcommerceCartUpdate",[{sku:"ers",name:"Everyday Ruck Snack",category:"",price:420,quantity:1}],840]]]},I={title:"Product detail view",description:"A product view fires Matomo ecommerceProductDetailView with a single-product array.",in:b("product view",{timestamp:1700000404}),mapping:{name:"ecommerceProductDetailView",data:{set:[{set:[{map:{sku:"data.id",name:"data.name",price:"data.price",quantity:{value:1}}}]}]}},out:[["_paq.push",["ecommerceProductDetailView",[{sku:"ers",name:"Everyday Ruck Snack",price:420,quantity:1}]]]]},V={title:"Site search",description:"A search submit fires Matomo trackSiteSearch with the keyword, category, and number of results.",in:b("search submit",{timestamp:1700000405,data:{query:"shoes",category:"products",resultsCount:42}}),mapping:{name:"trackSiteSearch",settings:{siteSearch:!0},data:{set:["data.query","data.category","data.resultsCount"]}},out:[["_paq.push",["trackSiteSearch","shoes","products",42]]]},x={title:"Goal with value",description:"A promotion event fires Matomo trackEvent and then trackGoal with a monetary goal value from event data.",in:b("promotion visible",{timestamp:1700000406,data:{name:"Setting up tracking easily",position:"hero",value:50}}),mapping:{name:"trackEvent",settings:{goalId:"1",goalValue:"data.value"},data:{set:["data.name"]}},out:[["_paq.push",["trackEvent","Setting up tracking easily"]],["_paq.push",["trackGoal","1",50]]]},G={title:"Custom dimensions",description:"Destination and rule custom dimensions are set right before the page view; afterwards the rule-only dimension is deleted and the destination value is set again.",public:!1,in:b("page view",{timestamp:1700000408}),settings:{customDimensions:{1:"globals.pagegroup"}},mapping:{settings:{customDimensions:{2:"data.id"}}},out:[["_paq.push",["setCustomDimension",1,"docs"]],["_paq.push",["setCustomDimension",2,"/docs/"]],["_paq.push",["trackPageView","walkerOS documentation"]],["_paq.push",["deleteCustomDimension",2]],["_paq.push",["setCustomDimension",1,"docs"]]]};export{g as examples,a as schemas};//# sourceMappingURL=dev.mjs.map
1
+ var e=Object.defineProperty,t=(t,a)=>{for(var i in a)e(t,i,{get:a[i],enumerable:!0})},a={};t(a,{MappingSchema:()=>m,SettingsSchema:()=>c,mapping:()=>u,settings:()=>l});import{zodToSchema as i}from"@walkeros/core/dev";import{schemas as o,z as n}from"@walkeros/core/dev";var{ValueSchema:r}=o,s=n.record(n.string().regex(/^\d+$/,'Dimension keys are bare numeric ids like "1"'),r),c=n.object({siteId:n.string().min(1).describe("Matomo Site ID (like 1, 2, etc.). Required when loadScript is true").optional(),url:n.string().url().describe("Base URL of your Matomo instance, normalized to one trailing slash (like https://analytics.example.com/ or https://yourname.matomo.cloud/). Required when loadScript is true").optional(),disableCookies:n.boolean().default(!1).describe("Disable all tracking cookies for cookie-free analytics"),enableLinkTracking:n.boolean().default(!0).describe("Enable automatic outlink and download tracking"),enableHeartBeatTimer:n.number().int().positive().optional().describe("Enable heart beat timer with interval in seconds for accurate time-on-page"),customDimensions:s.describe('Custom dimensions applied to every hit, keyed by bare dimension id (like { "1": "data.userType" }). Each value is resolved per event. Rule-level customDimensions win per key.').optional()});import{schemas as p,z as d}from"@walkeros/core/dev";var m=d.object({goalId:d.union([d.string().regex(/^[1-9]\d*$/,'Goal IDs are positive integers like "1"'),d.number().int().positive()]).optional().describe("Matomo goal ID, a positive integer like 1. Adds a trackGoal conversion alongside this event"),goalValue:p.ValueSchema.describe('Goal revenue, resolved from the event (like "data.revenue"), passed as the trackGoal revenue').optional(),siteSearch:d.boolean().optional().describe("Track as internal site search using trackSiteSearch"),contentImpression:d.boolean().optional().describe("Track as content impression using trackContentImpression"),contentInteraction:d.boolean().optional().describe("Track as content interaction using trackContentInteraction"),customDimensions:s.describe('Custom dimensions for this rule, keyed by bare dimension id (like { "3": "data.category" }). Set just before the hit and removed after it; wins per key over the destination customDimensions.').optional()}),l=i(c),u=i(m),g={};t(g,{env:()=>h,step:()=>y});var h={};t(h,{init:()=>k,push:()=>v,simulation:()=>w});var k={window:{location:{href:"https://www.example.com/page"}},document:{createElement:()=>({type:"",src:"",async:!1,defer:!1}),head:{appendChild:()=>{}}}},v={window:{_paq:[],location:{href:"https://www.example.com/page"}},document:{createElement:()=>({type:"",src:"",async:!1,defer:!1}),head:{appendChild:()=>{}}}},w=["call:window._paq.push"],y={};t(y,{customDimensions:()=>x,customEvent:()=>E,ecommerceCartUpdate:()=>D,ecommerceOrder:()=>C,goalTracking:()=>V,init:()=>f,pageView:()=>q,pageViewWithGoal:()=>S,productDetailView:()=>_,siteSearch:()=>I});import{getEvent as b}from"@walkeros/core";var f={title:"Initialization",description:"Destination bootstrap loads the Matomo tracker script and configures the tracker URL and site id.",in:{loadScript:!0,settings:{siteId:"1",url:"https://analytics.example.com/"}},out:[["_paq.push",["setTrackerUrl","https://analytics.example.com/matomo.php"]],["_paq.push",["setSiteId","1"]],["_paq.push",["enableLinkTracking"]]]},q={title:"Page view",description:"A page view is tracked in Matomo via trackPageView with the page title from event data.",in:b("page view",{timestamp:1700000400}),mapping:{data:"data.title"},out:[["_paq.push",["trackPageView","walkerOS documentation"]]]},S={title:"Page view with goal",description:"A page view rule with a goal keeps the default trackPageView and adds a trackGoal conversion.",in:b("page view",{timestamp:1700000407}),mapping:{settings:{goalId:"1"}},out:[["_paq.push",["trackPageView","walkerOS documentation"]],["_paq.push",["trackGoal","1",void 0]]]},E={title:"Custom event with goal",description:"A promotion visible event fires Matomo trackEvent and then trackGoal to record a goal conversion.",in:b("promotion visible",{timestamp:1700000401}),mapping:{name:"trackEvent",settings:{goalId:"1"},data:{set:["data.name","data.position"]}},out:[["_paq.push",["trackEvent","Setting up tracking easily","hero"]],["_paq.push",["trackGoal","1",void 0]]]},C={public:!1,title:"Ecommerce order",description:"Test fixture for nested product mapping, not a valid Matomo call: Matomo records an order's products only after an addEcommerceItem call per product.",in:b("order complete",{timestamp:1700000402}),mapping:{name:"trackEcommerceOrder",data:{set:[{loop:["nested",{condition:e=>"object"==typeof e&&null!==e&&"entity"in e&&"product"===e.entity,map:{sku:"data.id",name:"data.name",category:{value:""},price:"data.price",quantity:{value:1}}}]},{map:{orderId:"data.id",grandTotal:"data.total",tax:"data.taxes",shipping:"data.shipping"}}]}},out:[["_paq.push",["trackEcommerceOrder",[{sku:"ers",name:"Everyday Ruck Snack",category:"",price:420,quantity:1},{sku:"cc",name:"Cool Cap",category:"",price:42,quantity:1}],{orderId:"0rd3r1d",grandTotal:555,tax:73.76,shipping:5.22}]]]},D={public:!1,title:"Cart update",description:"Test fixture for nested product mapping, not a valid Matomo call: Matomo takes trackEcommerceCartUpdate(grandTotal) after an addEcommerceItem call per product.",in:b("cart view",{timestamp:1700000403}),mapping:{name:"trackEcommerceCartUpdate",data:{set:[{loop:["nested",{condition:e=>"object"==typeof e&&null!==e&&"entity"in e&&"product"===e.entity,map:{sku:"data.id",name:"data.name",category:{value:""},price:"data.price",quantity:{value:1}}}]},"data.value"]}},out:[["_paq.push",["trackEcommerceCartUpdate",[{sku:"ers",name:"Everyday Ruck Snack",category:"",price:420,quantity:1}],840]]]},_={public:!1,title:"Product detail view",description:"Test fixture for a single-product mapping, not a valid Matomo call: Matomo tracks a product view with setEcommerceView followed by trackPageView.",in:b("product view",{timestamp:1700000404}),mapping:{name:"ecommerceProductDetailView",data:{set:[{set:[{map:{sku:"data.id",name:"data.name",price:"data.price",quantity:{value:1}}}]}]}},out:[["_paq.push",["ecommerceProductDetailView",[{sku:"ers",name:"Everyday Ruck Snack",price:420,quantity:1}]]]]},I={title:"Site search",description:"A search submit fires Matomo trackSiteSearch with the keyword, category, and number of results.",in:b("search submit",{timestamp:1700000405,data:{query:"shoes",category:"products",resultsCount:42}}),mapping:{name:"trackSiteSearch",settings:{siteSearch:!0},data:{set:["data.query","data.category","data.resultsCount"]}},out:[["_paq.push",["trackSiteSearch","shoes","products",42]]]},V={title:"Goal with value",description:"A promotion event fires Matomo trackEvent and then trackGoal with a monetary goal value from event data.",in:b("promotion visible",{timestamp:1700000406,data:{name:"Setting up tracking easily",position:"hero",value:50}}),mapping:{name:"trackEvent",settings:{goalId:"1",goalValue:"data.value"},data:{set:["data.name"]}},out:[["_paq.push",["trackEvent","Setting up tracking easily"]],["_paq.push",["trackGoal","1",50]]]},x={title:"Custom dimensions",description:"Destination and rule custom dimensions are set right before the page view; afterwards the rule-only dimension is deleted and the destination value is set again.",public:!1,in:b("page view",{timestamp:1700000408}),settings:{customDimensions:{1:"globals.pagegroup"}},mapping:{settings:{customDimensions:{2:"data.id"}}},out:[["_paq.push",["setCustomDimension",1,"docs"]],["_paq.push",["setCustomDimension",2,"/docs/"]],["_paq.push",["trackPageView","walkerOS documentation"]],["_paq.push",["deleteCustomDimension",2]],["_paq.push",["setCustomDimension",1,"docs"]]]};export{g as examples,a as schemas};//# sourceMappingURL=dev.mjs.map
package/dist/dev.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/schemas/index.ts","../src/schemas/settings.ts","../src/schemas/mapping.ts","../src/examples/index.ts","../src/examples/env.ts","../src/examples/step.ts"],"sourcesContent":["import { zodToSchema } from '@walkeros/core/dev';\nimport { SettingsSchema } from './settings';\nimport { MappingSchema } from './mapping';\n\nexport { SettingsSchema, type Settings } from './settings';\nexport { MappingSchema, type Mapping } from './mapping';\n\n// JSON Schema\nexport const settings = zodToSchema(SettingsSchema);\nexport const mapping = zodToSchema(MappingSchema);\n","import { schemas, z } from '@walkeros/core/dev';\n\nconst { ValueSchema } = schemas;\n\nexport const CustomDimensionsSchema = z.record(\n z.string().regex(/^\\d+$/, 'Dimension keys are bare numeric ids like \"1\"'),\n ValueSchema,\n);\n\nexport const SettingsSchema = z.object({\n siteId: z\n .string()\n .min(1)\n .describe(\n 'Matomo Site ID (like 1, 2, etc.). Required when loadScript is true',\n )\n .optional(),\n url: z\n .string()\n .url()\n .describe(\n 'Base URL of your Matomo instance, normalized to one trailing slash (like https://analytics.example.com/ or https://yourname.matomo.cloud/). Required when loadScript is true',\n )\n .optional(),\n disableCookies: z\n .boolean()\n .default(false)\n .describe('Disable all tracking cookies for cookie-free analytics'),\n enableLinkTracking: z\n .boolean()\n .default(true)\n .describe('Enable automatic outlink and download tracking'),\n enableHeartBeatTimer: z\n .number()\n .int()\n .positive()\n .optional()\n .describe(\n 'Enable heart beat timer with interval in seconds for accurate time-on-page',\n ),\n customDimensions: CustomDimensionsSchema.describe(\n 'Custom dimensions applied to every hit, keyed by bare dimension id (like { \"1\": \"data.userType\" }). Each value is resolved per event. Rule-level customDimensions win per key.',\n ).optional(),\n});\n\nexport type Settings = z.infer<typeof SettingsSchema>;\n","import { schemas, z } from '@walkeros/core/dev';\nimport { CustomDimensionsSchema } from './settings';\n\nexport const MappingSchema = z.object({\n goalId: z\n .union([\n z.string().regex(/^[1-9]\\d*$/, 'Goal IDs are positive integers like \"1\"'),\n z.number().int().positive(),\n ])\n .optional()\n .describe(\n 'Matomo goal ID, a positive integer like 1. Adds a trackGoal conversion alongside this event',\n ),\n goalValue: schemas.ValueSchema.describe(\n 'Goal revenue, resolved from the event (like \"data.revenue\"), passed as the trackGoal revenue',\n ).optional(),\n siteSearch: z\n .boolean()\n .optional()\n .describe('Track as internal site search using trackSiteSearch'),\n contentImpression: z\n .boolean()\n .optional()\n .describe('Track as content impression using trackContentImpression'),\n contentInteraction: z\n .boolean()\n .optional()\n .describe('Track as content interaction using trackContentInteraction'),\n customDimensions: CustomDimensionsSchema.describe(\n 'Custom dimensions for this rule, keyed by bare dimension id (like { \"3\": \"data.category\" }). Set just before the hit and removed after it; wins per key over the destination customDimensions.',\n ).optional(),\n});\n\nexport type Mapping = z.infer<typeof MappingSchema>;\n","export * as env from './env';\nexport * as step from './step';\n","import type { Env } from '../types';\n\n/**\n * Example environment configurations for Matomo destination.\n * Mocks the _paq command queue and DOM elements for testing\n * without requiring real browser or network.\n */\n\nexport const init: Env | undefined = {\n window: {\n // _paq absent: init() is expected to install the queue.\n location: { href: 'https://www.example.com/page' },\n },\n document: {\n createElement: () => ({\n type: '',\n src: '',\n async: false,\n defer: false,\n }),\n head: { appendChild: () => {} },\n },\n};\n\nexport const push: Env = {\n window: {\n _paq: [],\n location: { href: 'https://www.example.com/page' },\n },\n document: {\n createElement: () => ({\n type: '',\n src: '',\n async: false,\n defer: false,\n }),\n head: { appendChild: () => {} },\n },\n};\n\n/**\n * Simulation tracking paths.\n * Specifies which function calls to track during simulation.\n */\nexport const simulation = [\n 'call:window._paq.push', // Track _paq.push calls\n];\n","import type { Flow } from '@walkeros/core';\nimport type { Settings } from '../types';\nimport { getEvent, isObject } from '@walkeros/core';\n\n/**\n * Matomo step example. The test runner registers the destination with the\n * init example's config and merges an example's optional `settings` on top.\n */\nexport type StepExample = Flow.StepExample & {\n /** Destination settings merged over the init example's settings. */\n settings?: Settings;\n};\n\n/**\n * Destination bootstrap.\n * Given the canonical settings, init loads the Matomo script and configures\n * the tracker URL, site ID, and link tracking. Reproduce by passing the same\n * settings to `startFlow` as the destination config.\n */\nexport const init: StepExample = {\n title: 'Initialization',\n description:\n 'Destination bootstrap loads the Matomo tracker script and configures the tracker URL and site id.',\n in: {\n loadScript: true,\n settings: {\n siteId: '1',\n url: 'https://analytics.example.com/',\n },\n },\n out: [\n [\n '_paq.push',\n ['setTrackerUrl', 'https://analytics.example.com/matomo.php'],\n ],\n ['_paq.push', ['setSiteId', '1']],\n ['_paq.push', ['enableLinkTracking']],\n ],\n};\n\n/**\n * Default page view -- no mapping name needed.\n * Destination auto-calls trackPageView with the page title.\n */\nexport const pageView: StepExample = {\n title: 'Page view',\n description:\n 'A page view is tracked in Matomo via trackPageView with the page title from event data.',\n in: getEvent('page view', { timestamp: 1700000400 }),\n mapping: {\n data: 'data.title',\n },\n out: [['_paq.push', ['trackPageView', 'walkerOS documentation']]],\n};\n\n/**\n * Page view rule with a goal -- the default trackPageView stays and the goal\n * follows it.\n */\nexport const pageViewWithGoal: StepExample = {\n title: 'Page view with goal',\n description:\n 'A page view rule with a goal keeps the default trackPageView and adds a trackGoal conversion.',\n in: getEvent('page view', { timestamp: 1700000407 }),\n mapping: {\n settings: {\n goalId: '1',\n },\n },\n out: [\n ['_paq.push', ['trackPageView', 'walkerOS documentation']],\n ['_paq.push', ['trackGoal', '1', undefined]],\n ],\n};\n\n/**\n * Custom event tracking with goal conversion.\n * Uses trackEvent with mapped name, followed by trackGoal.\n */\nexport const customEvent: StepExample = {\n title: 'Custom event with goal',\n description:\n 'A promotion visible event fires Matomo trackEvent and then trackGoal to record a goal conversion.',\n in: getEvent('promotion visible', { timestamp: 1700000401 }),\n mapping: {\n name: 'trackEvent',\n settings: {\n goalId: '1',\n },\n data: {\n set: ['data.name', 'data.position'],\n },\n },\n out: [\n ['_paq.push', ['trackEvent', 'Setting up tracking easily', 'hero']],\n ['_paq.push', ['trackGoal', '1', undefined]],\n ],\n};\n\n/**\n * Ecommerce order -- one call with cart items array and order totals.\n */\nexport const ecommerceOrder: StepExample = {\n title: 'Ecommerce order',\n description:\n 'A completed order calls Matomo trackEcommerceOrder with line items and order totals.',\n in: getEvent('order complete', { timestamp: 1700000402 }),\n mapping: {\n name: 'trackEcommerceOrder',\n data: {\n set: [\n {\n loop: [\n 'nested',\n {\n condition: (entity: unknown) =>\n isObject(entity) && entity.entity === 'product',\n map: {\n sku: 'data.id',\n name: 'data.name',\n category: { value: '' },\n price: 'data.price',\n quantity: { value: 1 },\n },\n },\n ],\n },\n {\n map: {\n orderId: 'data.id',\n grandTotal: 'data.total',\n tax: 'data.taxes',\n shipping: 'data.shipping',\n },\n },\n ],\n },\n },\n out: [\n [\n '_paq.push',\n [\n 'trackEcommerceOrder',\n [\n {\n sku: 'ers',\n name: 'Everyday Ruck Snack',\n category: '',\n price: 420,\n quantity: 1,\n },\n {\n sku: 'cc',\n name: 'Cool Cap',\n category: '',\n price: 42,\n quantity: 1,\n },\n ],\n {\n orderId: '0rd3r1d',\n grandTotal: 555,\n tax: 73.76,\n shipping: 5.22,\n },\n ],\n ],\n ],\n};\n\n/**\n * Ecommerce cart update -- addEcommerceItem per nested product,\n * then trackEcommerceCartUpdate with cart total.\n */\nexport const ecommerceCartUpdate: StepExample = {\n title: 'Cart update',\n description:\n 'A cart view calls Matomo trackEcommerceCartUpdate with the nested product items and cart total.',\n in: getEvent('cart view', { timestamp: 1700000403 }),\n mapping: {\n name: 'trackEcommerceCartUpdate',\n data: {\n set: [\n {\n loop: [\n 'nested',\n {\n condition: (entity: unknown) =>\n isObject(entity) && entity.entity === 'product',\n map: {\n sku: 'data.id',\n name: 'data.name',\n category: { value: '' },\n price: 'data.price',\n quantity: { value: 1 },\n },\n },\n ],\n },\n 'data.value',\n ],\n },\n },\n out: [\n [\n '_paq.push',\n [\n 'trackEcommerceCartUpdate',\n [\n {\n sku: 'ers',\n name: 'Everyday Ruck Snack',\n category: '',\n price: 420,\n quantity: 1,\n },\n ],\n 840,\n ],\n ],\n ],\n};\n\n/**\n * Product detail view -- setEcommerceView equivalent with a single product array.\n */\nexport const productDetailView: StepExample = {\n title: 'Product detail view',\n description:\n 'A product view fires Matomo ecommerceProductDetailView with a single-product array.',\n in: getEvent('product view', { timestamp: 1700000404 }),\n mapping: {\n name: 'ecommerceProductDetailView',\n data: {\n set: [\n {\n set: [\n {\n map: {\n sku: 'data.id',\n name: 'data.name',\n price: 'data.price',\n quantity: { value: 1 },\n },\n },\n ],\n },\n ],\n },\n },\n out: [\n [\n '_paq.push',\n [\n 'ecommerceProductDetailView',\n [\n {\n sku: 'ers',\n name: 'Everyday Ruck Snack',\n price: 420,\n quantity: 1,\n },\n ],\n ],\n ],\n ],\n};\n\n/**\n * Site search -- trackSiteSearch with keyword, category, result count.\n */\nexport const siteSearch: StepExample = {\n title: 'Site search',\n description:\n 'A search submit fires Matomo trackSiteSearch with the keyword, category, and number of results.',\n in: getEvent('search submit', {\n timestamp: 1700000405,\n data: { query: 'shoes', category: 'products', resultsCount: 42 },\n }),\n mapping: {\n name: 'trackSiteSearch',\n settings: {\n siteSearch: true,\n },\n data: {\n set: ['data.query', 'data.category', 'data.resultsCount'],\n },\n },\n out: [['_paq.push', ['trackSiteSearch', 'shoes', 'products', 42]]],\n};\n\n/**\n * Goal tracking alongside a tracked event.\n * Uses a known fixture event (promotion visible) so data paths resolve.\n */\nexport const goalTracking: StepExample = {\n title: 'Goal with value',\n description:\n 'A promotion event fires Matomo trackEvent and then trackGoal with a monetary goal value from event data.',\n in: getEvent('promotion visible', {\n timestamp: 1700000406,\n data: { name: 'Setting up tracking easily', position: 'hero', value: 50 },\n }),\n mapping: {\n name: 'trackEvent',\n settings: {\n goalId: '1',\n goalValue: 'data.value',\n },\n data: {\n set: ['data.name'],\n },\n },\n out: [\n ['_paq.push', ['trackEvent', 'Setting up tracking easily']],\n ['_paq.push', ['trackGoal', '1', 50]],\n ],\n};\n\n/**\n * Destination and rule custom dimensions, resolved per event. The destination\n * dimensions come from `settings`, which the docs do not show, so this\n * example stays out of them.\n */\nexport const customDimensions: StepExample = {\n title: 'Custom dimensions',\n description:\n 'Destination and rule custom dimensions are set right before the page view; afterwards the rule-only dimension is deleted and the destination value is set again.',\n public: false,\n in: getEvent('page view', { timestamp: 1700000408 }),\n settings: {\n customDimensions: { '1': 'globals.pagegroup' },\n },\n mapping: {\n settings: {\n customDimensions: { '2': 'data.id' },\n },\n },\n out: [\n ['_paq.push', ['setCustomDimension', 1, 'docs']],\n ['_paq.push', ['setCustomDimension', 2, '/docs/']],\n ['_paq.push', ['trackPageView', 'walkerOS documentation']],\n ['_paq.push', ['deleteCustomDimension', 2]],\n ['_paq.push', ['setCustomDimension', 1, 'docs']],\n ],\n};\n"],"mappings":"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","names":["schemas","z","z","schemas","init"]}
1
+ {"version":3,"sources":["../src/schemas/index.ts","../src/schemas/settings.ts","../src/schemas/mapping.ts","../src/examples/index.ts","../src/examples/env.ts","../src/examples/step.ts"],"sourcesContent":["import { zodToSchema } from '@walkeros/core/dev';\nimport { SettingsSchema } from './settings';\nimport { MappingSchema } from './mapping';\n\nexport { SettingsSchema, type Settings } from './settings';\nexport { MappingSchema, type Mapping } from './mapping';\n\n// JSON Schema\nexport const settings = zodToSchema(SettingsSchema);\nexport const mapping = zodToSchema(MappingSchema);\n","import { schemas, z } from '@walkeros/core/dev';\n\nconst { ValueSchema } = schemas;\n\nexport const CustomDimensionsSchema = z.record(\n z.string().regex(/^\\d+$/, 'Dimension keys are bare numeric ids like \"1\"'),\n ValueSchema,\n);\n\nexport const SettingsSchema = z.object({\n siteId: z\n .string()\n .min(1)\n .describe(\n 'Matomo Site ID (like 1, 2, etc.). Required when loadScript is true',\n )\n .optional(),\n url: z\n .string()\n .url()\n .describe(\n 'Base URL of your Matomo instance, normalized to one trailing slash (like https://analytics.example.com/ or https://yourname.matomo.cloud/). Required when loadScript is true',\n )\n .optional(),\n disableCookies: z\n .boolean()\n .default(false)\n .describe('Disable all tracking cookies for cookie-free analytics'),\n enableLinkTracking: z\n .boolean()\n .default(true)\n .describe('Enable automatic outlink and download tracking'),\n enableHeartBeatTimer: z\n .number()\n .int()\n .positive()\n .optional()\n .describe(\n 'Enable heart beat timer with interval in seconds for accurate time-on-page',\n ),\n customDimensions: CustomDimensionsSchema.describe(\n 'Custom dimensions applied to every hit, keyed by bare dimension id (like { \"1\": \"data.userType\" }). Each value is resolved per event. Rule-level customDimensions win per key.',\n ).optional(),\n});\n\nexport type Settings = z.infer<typeof SettingsSchema>;\n","import { schemas, z } from '@walkeros/core/dev';\nimport { CustomDimensionsSchema } from './settings';\n\nexport const MappingSchema = z.object({\n goalId: z\n .union([\n z.string().regex(/^[1-9]\\d*$/, 'Goal IDs are positive integers like \"1\"'),\n z.number().int().positive(),\n ])\n .optional()\n .describe(\n 'Matomo goal ID, a positive integer like 1. Adds a trackGoal conversion alongside this event',\n ),\n goalValue: schemas.ValueSchema.describe(\n 'Goal revenue, resolved from the event (like \"data.revenue\"), passed as the trackGoal revenue',\n ).optional(),\n siteSearch: z\n .boolean()\n .optional()\n .describe('Track as internal site search using trackSiteSearch'),\n contentImpression: z\n .boolean()\n .optional()\n .describe('Track as content impression using trackContentImpression'),\n contentInteraction: z\n .boolean()\n .optional()\n .describe('Track as content interaction using trackContentInteraction'),\n customDimensions: CustomDimensionsSchema.describe(\n 'Custom dimensions for this rule, keyed by bare dimension id (like { \"3\": \"data.category\" }). Set just before the hit and removed after it; wins per key over the destination customDimensions.',\n ).optional(),\n});\n\nexport type Mapping = z.infer<typeof MappingSchema>;\n","export * as env from './env';\nexport * as step from './step';\n","import type { Env } from '../types';\n\n/**\n * Example environment configurations for Matomo destination.\n * Mocks the _paq command queue and DOM elements for testing\n * without requiring real browser or network.\n */\n\nexport const init: Env | undefined = {\n window: {\n // _paq absent: init() is expected to install the queue.\n location: { href: 'https://www.example.com/page' },\n },\n document: {\n createElement: () => ({\n type: '',\n src: '',\n async: false,\n defer: false,\n }),\n head: { appendChild: () => {} },\n },\n};\n\nexport const push: Env = {\n window: {\n _paq: [],\n location: { href: 'https://www.example.com/page' },\n },\n document: {\n createElement: () => ({\n type: '',\n src: '',\n async: false,\n defer: false,\n }),\n head: { appendChild: () => {} },\n },\n};\n\n/**\n * Simulation tracking paths.\n * Specifies which function calls to track during simulation.\n */\nexport const simulation = [\n 'call:window._paq.push', // Track _paq.push calls\n];\n","import type { Flow } from '@walkeros/core';\nimport type { Settings } from '../types';\nimport { getEvent } from '@walkeros/core';\n\n/**\n * Matomo step example. The test runner registers the destination with the\n * init example's config and merges an example's optional `settings` on top.\n */\nexport type StepExample = Flow.StepExample & {\n /** Destination settings merged over the init example's settings. */\n settings?: Settings;\n};\n\n/**\n * Destination bootstrap.\n * Given the canonical settings, init loads the Matomo script and configures\n * the tracker URL, site ID, and link tracking. Reproduce by passing the same\n * settings to `startFlow` as the destination config.\n */\nexport const init: StepExample = {\n title: 'Initialization',\n description:\n 'Destination bootstrap loads the Matomo tracker script and configures the tracker URL and site id.',\n in: {\n loadScript: true,\n settings: {\n siteId: '1',\n url: 'https://analytics.example.com/',\n },\n },\n out: [\n [\n '_paq.push',\n ['setTrackerUrl', 'https://analytics.example.com/matomo.php'],\n ],\n ['_paq.push', ['setSiteId', '1']],\n ['_paq.push', ['enableLinkTracking']],\n ],\n};\n\n/**\n * Default page view -- no mapping name needed.\n * Destination auto-calls trackPageView with the page title.\n */\nexport const pageView: StepExample = {\n title: 'Page view',\n description:\n 'A page view is tracked in Matomo via trackPageView with the page title from event data.',\n in: getEvent('page view', { timestamp: 1700000400 }),\n mapping: {\n data: 'data.title',\n },\n out: [['_paq.push', ['trackPageView', 'walkerOS documentation']]],\n};\n\n/**\n * Page view rule with a goal -- the default trackPageView stays and the goal\n * follows it.\n */\nexport const pageViewWithGoal: StepExample = {\n title: 'Page view with goal',\n description:\n 'A page view rule with a goal keeps the default trackPageView and adds a trackGoal conversion.',\n in: getEvent('page view', { timestamp: 1700000407 }),\n mapping: {\n settings: {\n goalId: '1',\n },\n },\n out: [\n ['_paq.push', ['trackPageView', 'walkerOS documentation']],\n ['_paq.push', ['trackGoal', '1', undefined]],\n ],\n};\n\n/**\n * Custom event tracking with goal conversion.\n * Uses trackEvent with mapped name, followed by trackGoal.\n */\nexport const customEvent: StepExample = {\n title: 'Custom event with goal',\n description:\n 'A promotion visible event fires Matomo trackEvent and then trackGoal to record a goal conversion.',\n in: getEvent('promotion visible', { timestamp: 1700000401 }),\n mapping: {\n name: 'trackEvent',\n settings: {\n goalId: '1',\n },\n data: {\n set: ['data.name', 'data.position'],\n },\n },\n out: [\n ['_paq.push', ['trackEvent', 'Setting up tracking easily', 'hero']],\n ['_paq.push', ['trackGoal', '1', undefined]],\n ],\n};\n\n/**\n * Ecommerce order -- one call with cart items array and order totals.\n * Not public: Matomo records an order's products only after an\n * addEcommerceItem call per product, which one rule cannot send, so this\n * shows mapping mechanics only.\n */\nexport const ecommerceOrder: StepExample = {\n public: false,\n title: 'Ecommerce order',\n description:\n \"Test fixture for nested product mapping, not a valid Matomo call: Matomo records an order's products only after an addEcommerceItem call per product.\",\n in: getEvent('order complete', { timestamp: 1700000402 }),\n mapping: {\n name: 'trackEcommerceOrder',\n data: {\n set: [\n {\n loop: [\n 'nested',\n {\n condition: (entity: unknown) =>\n typeof entity === 'object' &&\n entity !== null &&\n 'entity' in entity &&\n entity.entity === 'product',\n map: {\n sku: 'data.id',\n name: 'data.name',\n category: { value: '' },\n price: 'data.price',\n quantity: { value: 1 },\n },\n },\n ],\n },\n {\n map: {\n orderId: 'data.id',\n grandTotal: 'data.total',\n tax: 'data.taxes',\n shipping: 'data.shipping',\n },\n },\n ],\n },\n },\n out: [\n [\n '_paq.push',\n [\n 'trackEcommerceOrder',\n [\n {\n sku: 'ers',\n name: 'Everyday Ruck Snack',\n category: '',\n price: 420,\n quantity: 1,\n },\n {\n sku: 'cc',\n name: 'Cool Cap',\n category: '',\n price: 42,\n quantity: 1,\n },\n ],\n {\n orderId: '0rd3r1d',\n grandTotal: 555,\n tax: 73.76,\n shipping: 5.22,\n },\n ],\n ],\n ],\n};\n\n/**\n * Ecommerce cart update -- nested products and the cart total in one call.\n * Not public: Matomo takes trackEcommerceCartUpdate(grandTotal) after an\n * addEcommerceItem call per product, which one rule cannot send.\n */\nexport const ecommerceCartUpdate: StepExample = {\n public: false,\n title: 'Cart update',\n description:\n 'Test fixture for nested product mapping, not a valid Matomo call: Matomo takes trackEcommerceCartUpdate(grandTotal) after an addEcommerceItem call per product.',\n in: getEvent('cart view', { timestamp: 1700000403 }),\n mapping: {\n name: 'trackEcommerceCartUpdate',\n data: {\n set: [\n {\n loop: [\n 'nested',\n {\n condition: (entity: unknown) =>\n typeof entity === 'object' &&\n entity !== null &&\n 'entity' in entity &&\n entity.entity === 'product',\n map: {\n sku: 'data.id',\n name: 'data.name',\n category: { value: '' },\n price: 'data.price',\n quantity: { value: 1 },\n },\n },\n ],\n },\n 'data.value',\n ],\n },\n },\n out: [\n [\n '_paq.push',\n [\n 'trackEcommerceCartUpdate',\n [\n {\n sku: 'ers',\n name: 'Everyday Ruck Snack',\n category: '',\n price: 420,\n quantity: 1,\n },\n ],\n 840,\n ],\n ],\n ],\n};\n\n/**\n * Product detail view with a single product array.\n * Not public: Matomo has no ecommerceProductDetailView; it tracks a product\n * view with setEcommerceView followed by trackPageView, two commands.\n */\nexport const productDetailView: StepExample = {\n public: false,\n title: 'Product detail view',\n description:\n 'Test fixture for a single-product mapping, not a valid Matomo call: Matomo tracks a product view with setEcommerceView followed by trackPageView.',\n in: getEvent('product view', { timestamp: 1700000404 }),\n mapping: {\n name: 'ecommerceProductDetailView',\n data: {\n set: [\n {\n set: [\n {\n map: {\n sku: 'data.id',\n name: 'data.name',\n price: 'data.price',\n quantity: { value: 1 },\n },\n },\n ],\n },\n ],\n },\n },\n out: [\n [\n '_paq.push',\n [\n 'ecommerceProductDetailView',\n [\n {\n sku: 'ers',\n name: 'Everyday Ruck Snack',\n price: 420,\n quantity: 1,\n },\n ],\n ],\n ],\n ],\n};\n\n/**\n * Site search -- trackSiteSearch with keyword, category, result count.\n */\nexport const siteSearch: StepExample = {\n title: 'Site search',\n description:\n 'A search submit fires Matomo trackSiteSearch with the keyword, category, and number of results.',\n in: getEvent('search submit', {\n timestamp: 1700000405,\n data: { query: 'shoes', category: 'products', resultsCount: 42 },\n }),\n mapping: {\n name: 'trackSiteSearch',\n settings: {\n siteSearch: true,\n },\n data: {\n set: ['data.query', 'data.category', 'data.resultsCount'],\n },\n },\n out: [['_paq.push', ['trackSiteSearch', 'shoes', 'products', 42]]],\n};\n\n/**\n * Goal tracking alongside a tracked event.\n * Uses a known fixture event (promotion visible) so data paths resolve.\n */\nexport const goalTracking: StepExample = {\n title: 'Goal with value',\n description:\n 'A promotion event fires Matomo trackEvent and then trackGoal with a monetary goal value from event data.',\n in: getEvent('promotion visible', {\n timestamp: 1700000406,\n data: { name: 'Setting up tracking easily', position: 'hero', value: 50 },\n }),\n mapping: {\n name: 'trackEvent',\n settings: {\n goalId: '1',\n goalValue: 'data.value',\n },\n data: {\n set: ['data.name'],\n },\n },\n out: [\n ['_paq.push', ['trackEvent', 'Setting up tracking easily']],\n ['_paq.push', ['trackGoal', '1', 50]],\n ],\n};\n\n/**\n * Destination and rule custom dimensions, resolved per event. The destination\n * dimensions come from `settings`, which the docs do not show, so this\n * example stays out of them.\n */\nexport const customDimensions: StepExample = {\n title: 'Custom dimensions',\n description:\n 'Destination and rule custom dimensions are set right before the page view; afterwards the rule-only dimension is deleted and the destination value is set again.',\n public: false,\n in: getEvent('page view', { timestamp: 1700000408 }),\n settings: {\n customDimensions: { '1': 'globals.pagegroup' },\n },\n mapping: {\n settings: {\n customDimensions: { '2': 'data.id' },\n },\n },\n out: [\n ['_paq.push', ['setCustomDimension', 1, 'docs']],\n ['_paq.push', ['setCustomDimension', 2, '/docs/']],\n ['_paq.push', ['trackPageView', 'walkerOS documentation']],\n ['_paq.push', ['deleteCustomDimension', 2]],\n ['_paq.push', ['setCustomDimension', 1, 'docs']],\n ],\n};\n"],"mappings":"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","names":["schemas","z","z","schemas","init"]}
@@ -93,15 +93,21 @@ declare const pageViewWithGoal: StepExample;
93
93
  declare const customEvent: StepExample;
94
94
  /**
95
95
  * Ecommerce order -- one call with cart items array and order totals.
96
+ * Not public: Matomo records an order's products only after an
97
+ * addEcommerceItem call per product, which one rule cannot send, so this
98
+ * shows mapping mechanics only.
96
99
  */
97
100
  declare const ecommerceOrder: StepExample;
98
101
  /**
99
- * Ecommerce cart update -- addEcommerceItem per nested product,
100
- * then trackEcommerceCartUpdate with cart total.
102
+ * Ecommerce cart update -- nested products and the cart total in one call.
103
+ * Not public: Matomo takes trackEcommerceCartUpdate(grandTotal) after an
104
+ * addEcommerceItem call per product, which one rule cannot send.
101
105
  */
102
106
  declare const ecommerceCartUpdate: StepExample;
103
107
  /**
104
- * Product detail view -- setEcommerceView equivalent with a single product array.
108
+ * Product detail view with a single product array.
109
+ * Not public: Matomo has no ecommerceProductDetailView; it tracks a product
110
+ * view with setEcommerceView followed by trackPageView, two commands.
105
111
  */
106
112
  declare const productDetailView: StepExample;
107
113
  /**
@@ -93,15 +93,21 @@ declare const pageViewWithGoal: StepExample;
93
93
  declare const customEvent: StepExample;
94
94
  /**
95
95
  * Ecommerce order -- one call with cart items array and order totals.
96
+ * Not public: Matomo records an order's products only after an
97
+ * addEcommerceItem call per product, which one rule cannot send, so this
98
+ * shows mapping mechanics only.
96
99
  */
97
100
  declare const ecommerceOrder: StepExample;
98
101
  /**
99
- * Ecommerce cart update -- addEcommerceItem per nested product,
100
- * then trackEcommerceCartUpdate with cart total.
102
+ * Ecommerce cart update -- nested products and the cart total in one call.
103
+ * Not public: Matomo takes trackEcommerceCartUpdate(grandTotal) after an
104
+ * addEcommerceItem call per product, which one rule cannot send.
101
105
  */
102
106
  declare const ecommerceCartUpdate: StepExample;
103
107
  /**
104
- * Product detail view -- setEcommerceView equivalent with a single product array.
108
+ * Product detail view with a single product array.
109
+ * Not public: Matomo has no ecommerceProductDetailView; it tracks a product
110
+ * view with setEcommerceView followed by trackPageView, two commands.
105
111
  */
106
112
  declare const productDetailView: StepExample;
107
113
  /**
@@ -145,8 +145,9 @@ var customEvent = {
145
145
  ]
146
146
  };
147
147
  var ecommerceOrder = {
148
+ public: false,
148
149
  title: "Ecommerce order",
149
- description: "A completed order calls Matomo trackEcommerceOrder with line items and order totals.",
150
+ description: "Test fixture for nested product mapping, not a valid Matomo call: Matomo records an order's products only after an addEcommerceItem call per product.",
150
151
  in: (0, import_core.getEvent)("order complete", { timestamp: 1700000402 }),
151
152
  mapping: {
152
153
  name: "trackEcommerceOrder",
@@ -156,7 +157,7 @@ var ecommerceOrder = {
156
157
  loop: [
157
158
  "nested",
158
159
  {
159
- condition: (entity) => (0, import_core.isObject)(entity) && entity.entity === "product",
160
+ condition: (entity) => typeof entity === "object" && entity !== null && "entity" in entity && entity.entity === "product",
160
161
  map: {
161
162
  sku: "data.id",
162
163
  name: "data.name",
@@ -210,8 +211,9 @@ var ecommerceOrder = {
210
211
  ]
211
212
  };
212
213
  var ecommerceCartUpdate = {
214
+ public: false,
213
215
  title: "Cart update",
214
- description: "A cart view calls Matomo trackEcommerceCartUpdate with the nested product items and cart total.",
216
+ description: "Test fixture for nested product mapping, not a valid Matomo call: Matomo takes trackEcommerceCartUpdate(grandTotal) after an addEcommerceItem call per product.",
215
217
  in: (0, import_core.getEvent)("cart view", { timestamp: 1700000403 }),
216
218
  mapping: {
217
219
  name: "trackEcommerceCartUpdate",
@@ -221,7 +223,7 @@ var ecommerceCartUpdate = {
221
223
  loop: [
222
224
  "nested",
223
225
  {
224
- condition: (entity) => (0, import_core.isObject)(entity) && entity.entity === "product",
226
+ condition: (entity) => typeof entity === "object" && entity !== null && "entity" in entity && entity.entity === "product",
225
227
  map: {
226
228
  sku: "data.id",
227
229
  name: "data.name",
@@ -256,8 +258,9 @@ var ecommerceCartUpdate = {
256
258
  ]
257
259
  };
258
260
  var productDetailView = {
261
+ public: false,
259
262
  title: "Product detail view",
260
- description: "A product view fires Matomo ecommerceProductDetailView with a single-product array.",
263
+ description: "Test fixture for a single-product mapping, not a valid Matomo call: Matomo tracks a product view with setEcommerceView followed by trackPageView.",
261
264
  in: (0, import_core.getEvent)("product view", { timestamp: 1700000404 }),
262
265
  mapping: {
263
266
  name: "ecommerceProductDetailView",
@@ -62,7 +62,7 @@ __export(step_exports, {
62
62
  productDetailView: () => productDetailView,
63
63
  siteSearch: () => siteSearch
64
64
  });
65
- import { getEvent, isObject } from "@walkeros/core";
65
+ import { getEvent } from "@walkeros/core";
66
66
  var init2 = {
67
67
  title: "Initialization",
68
68
  description: "Destination bootstrap loads the Matomo tracker script and configures the tracker URL and site id.",
@@ -124,8 +124,9 @@ var customEvent = {
124
124
  ]
125
125
  };
126
126
  var ecommerceOrder = {
127
+ public: false,
127
128
  title: "Ecommerce order",
128
- description: "A completed order calls Matomo trackEcommerceOrder with line items and order totals.",
129
+ description: "Test fixture for nested product mapping, not a valid Matomo call: Matomo records an order's products only after an addEcommerceItem call per product.",
129
130
  in: getEvent("order complete", { timestamp: 1700000402 }),
130
131
  mapping: {
131
132
  name: "trackEcommerceOrder",
@@ -135,7 +136,7 @@ var ecommerceOrder = {
135
136
  loop: [
136
137
  "nested",
137
138
  {
138
- condition: (entity) => isObject(entity) && entity.entity === "product",
139
+ condition: (entity) => typeof entity === "object" && entity !== null && "entity" in entity && entity.entity === "product",
139
140
  map: {
140
141
  sku: "data.id",
141
142
  name: "data.name",
@@ -189,8 +190,9 @@ var ecommerceOrder = {
189
190
  ]
190
191
  };
191
192
  var ecommerceCartUpdate = {
193
+ public: false,
192
194
  title: "Cart update",
193
- description: "A cart view calls Matomo trackEcommerceCartUpdate with the nested product items and cart total.",
195
+ description: "Test fixture for nested product mapping, not a valid Matomo call: Matomo takes trackEcommerceCartUpdate(grandTotal) after an addEcommerceItem call per product.",
194
196
  in: getEvent("cart view", { timestamp: 1700000403 }),
195
197
  mapping: {
196
198
  name: "trackEcommerceCartUpdate",
@@ -200,7 +202,7 @@ var ecommerceCartUpdate = {
200
202
  loop: [
201
203
  "nested",
202
204
  {
203
- condition: (entity) => isObject(entity) && entity.entity === "product",
205
+ condition: (entity) => typeof entity === "object" && entity !== null && "entity" in entity && entity.entity === "product",
204
206
  map: {
205
207
  sku: "data.id",
206
208
  name: "data.name",
@@ -235,8 +237,9 @@ var ecommerceCartUpdate = {
235
237
  ]
236
238
  };
237
239
  var productDetailView = {
240
+ public: false,
238
241
  title: "Product detail view",
239
- description: "A product view fires Matomo ecommerceProductDetailView with a single-product array.",
242
+ description: "Test fixture for a single-product mapping, not a valid Matomo call: Matomo tracks a product view with setEcommerceView followed by trackPageView.",
240
243
  in: getEvent("product view", { timestamp: 1700000404 }),
241
244
  mapping: {
242
245
  name: "ecommerceProductDetailView",
@@ -1 +1 @@
1
- "use strict";var Destination=(()=>{var e=Object.defineProperty,t=Object.getOwnPropertyDescriptor,n=Object.getOwnPropertyNames,r=Object.prototype.hasOwnProperty,o={};((t,n)=>{for(var r in n)e(t,r,{get:n[r],enumerable:!0})})(o,{DestinationMatomo:()=>L,default:()=>H,destinationMatomo:()=>G});var i=Object.defineProperty,c=(e,t)=>{for(var n in t)i(e,n,{get:t[n],enumerable:!0})};function s(e,t){if("collector"===e)return"collector";if(!t)throw new Error(`stepId(${e}) requires an id`);return`${e}.${t}`}c({},{stepId:()=>s});function a(e,t){const n=e.destinations[t];if(!n)throw new Error(`Destination not found: ${t}`);return n}c({},{getDestination:()=>a});c({},{Level:()=>u});var f,u=((f=u||{})[f.ERROR=0]="ERROR",f[f.WARN=1]="WARN",f[f.INFO=2]="INFO",f[f.DEBUG=3]="DEBUG",f);function l(e,t){const n=e.transformers[t];if(!n)throw new Error(`Transformer not found: ${t}`);return n}c({},{getTransformer:()=>l});function p(e,t){const n=e.sources[t];if(!n)throw new Error(`Source not found: ${t}`);return n}c({},{getSource:()=>p});function d(e,t){const n=e.stores[t];if(!n)throw new Error(`Store not found: ${t}`);return n}async function g(e,t){return await e.get(t)}function v(e){return Array.isArray(e)}function y(e){return void 0!==e}function m(e){return"object"==typeof e&&null!==e&&"then"in e&&"function"==typeof e.then}function w(e){return"object"==typeof e&&null!==e&&!v(e)&&"[object Object]"===Object.prototype.toString.call(e)}function h(e){return"string"==typeof e}function b(e,t="",n){const r=t.split(".");let o=e;for(let e=0;e<r.length;e++){const t=r[e];if("*"===t&&v(o)){const t=r.slice(e+1).join("."),i=[];for(const e of o){const r=b(e,t,n);i.push(r)}return i}if(o=w(o)||v(o)?o[t]:void 0,void 0===o)break}return y(o)?o:n}function O(e){return function(e){return"boolean"==typeof e}(e)||h(e)||function(e){return"number"==typeof e&&!Number.isNaN(e)}(e)||!y(e)||v(e)&&e.every(O)||w(e)&&Object.values(e).every(O)}function j(e){return O(e)?e:void 0}function P(e,t,n){return async function(...r){try{return await e(...r)}catch(e){if(!t)return;return await t(e)}finally{await(null==n?void 0:n())}}}c({},{getStore:()=>d,getStoreValue:()=>g});var R=class e extends Error{constructor(t,n){super(t,n),this.name="FatalError",Object.setPrototypeOf(this,e.prototype)}};async function k(e,t={},n={}){var r,o;const i=n.consent||(null==(r=n.collector)?void 0:r.consent),c=null!=(o=n.event)?o:{};if(!n.collector)throw new Error("getMappingValue: context.collector is required");const s={event:c,mapping:t,collector:n.collector,logger:n.collector.logger,consent:i},a=v(t)?t:[t];for(const t of a){const r=await P(E,e=>{if(e instanceof R)throw e;n.collector&&n.collector.status.failed++,s.logger.error("mapping processing failed",{event:c,error:e})})(e,t,{...s,mapping:t});if(y(r))return r}}async function E(e,t,n){return(v(t)?t:[t]).reduce(async(t,r)=>{const o=await t;if(o)return o;const i=h(r)?{key:r}:r;if(!Object.keys(i).length)return;const{condition:c,consent:s,fn:a,key:f,loop:u,map:l,set:p,validate:d,value:g}=i,m={...n,mapping:r};if(c&&!await P(c,e=>{if(e instanceof R)throw e;return m.logger.error("mapping condition failed",{event:m.event,error:e}),!1})(e,m))return;if(s&&!function(e,t={},n={}){const r={...t,...n},o={};let i=!e||0===Object.keys(e).length;return Object.keys(r).forEach(t=>{r[t]&&(o[t]=!0,e&&e[t]&&(i=!0))}),!!i&&o}(s,m.consent))return g;let w=y(g)?g:e;if(u){const[t,n]=u,r="this"===t?[e]:await k(e,t,m);w=v(r)?(await Promise.all(r.map(e=>y(e)?k(e,n,m):void 0))).filter(y):void 0}else l?w=await Object.entries(l).reduce(async(t,[n,r])=>{const o=await t,i=await k(e,r,m);return y(i)&&(o[n]=i),o},Promise.resolve({})):p?w=await Promise.all(p.map(t=>E(e,t,m))):f?w=b(e,f,g):a&&(w=await P(a,e=>{if(e instanceof R)throw e;m.logger.error("mapping fn failed",{event:m.event,error:e})})(e,m));d&&!await P(d,e=>{if(e instanceof R)throw e;return m.logger.error("mapping validate failed",{event:m.event,error:e}),!1})(w,m)&&(w=void 0);const O=j(w);return y(O)?O:j(g)},Promise.resolve(void 0))}async function S(e,t={},n={}){var r,o;if(!y(e))return;const i=w(e)&&e.consent||n.consent||(null==(r=n.collector)?void 0:r.consent),c=null!=(o=n.event)?o:w(e)?e:{};return k(e,t,{...n,consent:i,event:c})}var $="observe";function _(e){const t=(e.startsWith("call:")?e.slice(5):e).split(".");return t.some(e=>""===e)?[]:t}function I(e){return"function"==typeof e}function D(e){return"object"==typeof e&&null!==e}var N=["name","length","prototype","arguments","caller"];function A(e,t){if(-1!==N.indexOf(t))return!1;let n=e;for(;I(n);){if(Object.prototype.hasOwnProperty.call(n,t))return!0;const e=Object.getPrototypeOf(n);if(!I(e)||!I(Object.getPrototypeOf(e)))return!1;n=e}return!1}function x(e,t){const n=Reflect.getOwnPropertyDescriptor(e,t);return!(n&&!n.configurable)||"value"in n&&!0===n.writable}function T(e,t){let n=e;for(const e of t){if(I(n)){if(!A(n,e))return!0;if(!x(n,e))return!1}else if(m(n)){if(!(e in n))return!0}else if(!D(n)||!(e in n))return!1;n=Reflect.get(n,e)}return I(n)}function C(e){const t={window:"undefined"!=typeof window?window:globalThis.window,document:"undefined"!=typeof document?document:globalThis.document,...e},n=e&&e[$];if(("undefined"==typeof __WALKEROS_OBSERVE__||__WALKEROS_OBSERVE__)&&function(e){if("object"!=typeof e||null===e)return!1;if(!("paths"in e)||!("record"in e))return!1;const{paths:t,record:n}=e;return Array.isArray(t)&&t.every(e=>"string"==typeof e)&&"function"==typeof n}(n)){delete t[$];const e=function(e,t,n){const r=[],o=[],i=[];for(const n of t){const t=_(n);if(0===t.length)continue;const r=t.join(".");i.push({rest:t,fn:r}),T(e,t)||o.push(r)}const c=new WeakMap,s=new WeakSet;function a(e,t){for(const o of e)if(n)try{n(o,t)}catch(e){}else r.push({fn:o,args:t,ts:Date.now()})}function f(e,t){return 0===t.length||u(e)?e:m(e)&&!t.some(t=>t.rest[0]in e)?Promise.resolve(e).then(e=>f(e,t)):I(e)?y(e,[],t):D(e)?p(e,t):e}function u(e){return(D(e)||I(e))&&s.has(e)}function l(e,t){const n=[],r=[];for(const o of e)o.rest[0]===t&&(1===o.rest.length?n.includes(o.fn)||n.push(o.fn):r.push({rest:o.rest.slice(1),fn:o.fn}));return{leafs:n,deeper:r}}function p(e,t){var n;const r=t.map(e=>`${e.fn}:${e.rest.join(".")}`).join("|"),o=null!=(n=c.get(e))?n:new Map;c.set(e,o);const i=o.get(r);if(i)return i;const s=d(e,t);return o.set(r,s),s}function d(e,t){return I(e)?g(e,t):t.some(t=>!x(e,t.rest[0]))?function(e,t){const n=Object.create(Object.getPrototypeOf(e)),r=v(e,t,()=>o),o=new Proxy(n,{get:(e,t)=>r.get(t),set:(t,n,r)=>Reflect.set(e,n,r,e),has:(t,n)=>Reflect.has(e,n),ownKeys:()=>Reflect.ownKeys(e),getOwnPropertyDescriptor(t,n){const r=Reflect.getOwnPropertyDescriptor(e,n);return r&&{...r,configurable:!0}},defineProperty:(t,n,r)=>Reflect.defineProperty(e,n,r),deleteProperty:(t,n)=>Reflect.deleteProperty(e,n)});return s.add(o),o}(e,t):g(e,t)}function g(e,t){const n=v(e,t,()=>r),r=new Proxy(e,{get:(e,t)=>"string"!=typeof t||x(e,t)?n.get(t):Reflect.get(e,t,e),set:(e,t,n)=>Reflect.set(e,t,n,e)});return s.add(r),r}function v(e,t,n){const r=new Map;return{get(o){const i=Reflect.get(e,o,e);if("string"!=typeof o)return i;if(!I(i)&&!D(i))return i;if(u(i))return i;const c=r.get(o);if(c&&c.value===i)return c.out;const{leafs:s,deeper:a}=l(t,o);if(!(s.length>0||a.length>0)&&(!I(i)||function(e){if(Array.isArray(e))return!0;const t=Object.getPrototypeOf(e);return t===Object.prototype||null===t}(e)))return i;let f=i;return I(i)?f=y(i,s,a,{proxy:n(),target:e}):a.length>0&&(f=p(i,a)),r.set(o,{value:i,out:f}),f}}}function y(e,t,n,r){const o=()=>n.filter(t=>!A(e,t.rest[0])),i=new Map,c=new Proxy(e,{get(e,t){const r=Reflect.get(e,t,e);if("string"!=typeof t||!x(e,t))return r;if(!A(e,t))return r;const{leafs:o,deeper:s}=l(n,t);if(0===o.length&&0===s.length)return r;if(u(r))return r;const a=i.get(t);if(a&&a.value===r)return a.out;let f=r;return I(r)?f=y(r,o,s,{proxy:c,target:e}):D(r)&&s.length>0&&(f=p(r,s)),i.set(t,{value:r,out:f}),f},set:(e,t,n)=>Reflect.set(e,t,n,e),apply(e,n,i){a(t,i);const c=!r||n!==r.proxy&&void 0!==n?n:r.target;return f(Reflect.apply(e,c,i),o())},construct(e,n,r){a(t,n);const i=Reflect.construct(e,n,r===c?e:r),s=f(i,o());return D(s)||I(s)?s:i}});return s.add(c),c}return{env:d(e,i),calls:r,unresolved:o}}(t,n.paths,n.record).env,r=new Set;for(const e of n.paths){const n=_(e)[0];if(void 0===n)continue;const o=t[n];null!==o&&"object"==typeof o&&r.add(n)}const o=Array.from(r,t=>[t,e[t]]);for(const[e,n]of o)t[e]=n}return t}var M=/^\d+$/;async function q(e,t,n){const r={};if(!e)return r;for(const[o,i]of Object.entries(e)){const e=await S(t,i,{collector:n});r[o]=null==e?void 0:String(e)}return r}function V(e){return function(e){return Object.entries(e).filter(([e])=>M.test(e)).sort(([e],[t])=>Number(e)-Number(t))}(e).map(([e,t])=>void 0===t?["deleteCustomDimension",Number(e)]:["setCustomDimension",Number(e),t])}var B=new Set;function W(e,t,n,r){if(!B.has(t)&&B.size<1e3)return B.add(t),void e.warn(n,r);e.debug(n,r)}var L={},G={type:"matomo",config:{},init({config:e,env:t,logger:n}){const{window:r}=C(t),{settings:o={},loadScript:i}=e,{siteId:c,url:s}=o;r._paq=r._paq||[];const a=r._paq,f=e=>{a.push(e)};if(i){if(!c)return n.throw("Config settings siteId missing");if(!s)return n.throw("Config settings url missing");const e=function(e){return`${e.replace(/\/+$/,"")}/`}(s);!function(e,t){const{document:n}=C(t),r=n.createElement("script");r.type="text/javascript",r.src=e+"matomo.js",r.async=!0,r.defer=!0,n.head.appendChild(r)}(e,t),f(["setTrackerUrl",e+"matomo.php"]),f(["setSiteId",c])}o.disableCookies&&f(["disableCookies"]),!1!==o.enableLinkTracking&&f(["enableLinkTracking"]),o.enableHeartBeatTimer&&f(["enableHeartBeatTimer",o.enableHeartBeatTimer])},async push(e,{config:t,rule:n={},data:r,env:o,collector:i,logger:c,id:s}){const{window:a}=C(o),f=a._paq;if(!f)return void c.warn("Matomo _paq queue missing, init() not run");const u=e=>{f.push(e)},l=t.settings||{},p=n.settings||{},{goalId:d}=p,g=v(r)?r:[r],y=("number"==typeof(m=d)?Number.isInteger(m)&&m>0:"string"==typeof m&&K.test(m))?d:void 0;var m;let w;if(void 0!==d&&void 0===y&&W(c,`${s}|${e.name}|invalid goalId`,`Goal of event "${e.name}" skipped: goalId ${JSON.stringify(d)} is not a positive integer`,{event:e.name,reason:"invalid goalId"}),p.siteSearch)w=["trackSiteSearch",...g];else if(p.contentImpression)w=["trackContentImpression",...g];else if(p.contentInteraction)w=["trackContentInteraction",...g];else if(n.name)w=[e.name,...g];else if("page view"===e.name)w=void 0===n.data?["trackPageView",await S(e,"data.title",{collector:i})]:["trackPageView",...g];else if(void 0===y)return void W(c,`${s}|${e.name}|unmapped`,`Event "${e.name}" skipped: no rule name, tracking flag or goal, and not a page view`,{event:e.name,reason:"unmapped"});const h=void 0!==y&&void 0!==p.goalValue?await S(e,p.goalValue,{collector:i}):void 0,{before:b,after:O}=function(e,t){const n=V({...e,...t});if(0===Object.keys(t).length)return{before:n,after:[]};const r={};for(const[n,o]of Object.entries(t))Object.prototype.hasOwnProperty.call(e,n)||void 0===o||(r[n]=void 0);return{before:n,after:[...V(r),...V(e)]}}(await q(l.customDimensions,e,i),await q(p.customDimensions,e,i));b.forEach(u),w&&u(w),void 0!==y&&u(["trackGoal",y,h]),O.forEach(u)}},K=/^[1-9]\d*$/;var F,H=G;return F=o,((o,i,c,s)=>{if(i&&"object"==typeof i||"function"==typeof i)for(let a of n(i))r.call(o,a)||a===c||e(o,a,{get:()=>i[a],enumerable:!(s=t(i,a))||s.enumerable});return o})(e({},"__esModule",{value:!0}),F)})();
1
+ "use strict";var Destination=(()=>{var e=Object.defineProperty,t=Object.getOwnPropertyDescriptor,n=Object.getOwnPropertyNames,r=Object.prototype.hasOwnProperty,o={};((t,n)=>{for(var r in n)e(t,r,{get:n[r],enumerable:!0})})(o,{DestinationMatomo:()=>L,default:()=>H,destinationMatomo:()=>G});var i=Object.defineProperty,c=(e,t)=>{for(var n in t)i(e,n,{get:t[n],enumerable:!0})};function s(e,t){if("collector"===e)return"collector";if(!t)throw new Error(`stepId(${e}) requires an id`);return`${e}.${t}`}c({},{stepId:()=>s});function a(e,t){const n=e.destinations[t];if(!n)throw new Error(`Destination not found: ${t}`);return n}c({},{getDestination:()=>a});c({},{Level:()=>f});var u,f=((u=f||{})[u.ERROR=0]="ERROR",u[u.WARN=1]="WARN",u[u.INFO=2]="INFO",u[u.DEBUG=3]="DEBUG",u);function l(e,t){const n=e.transformers[t];if(!n)throw new Error(`Transformer not found: ${t}`);return n}c({},{getTransformer:()=>l});function p(e,t){const n=e.sources[t];if(!n)throw new Error(`Source not found: ${t}`);return n}c({},{getSource:()=>p});function d(e,t){const n=e.stores[t];if(!n)throw new Error(`Store not found: ${t}`);return n}async function g(e,t){return await e.get(t)}function v(e){return Array.isArray(e)}function y(e){return void 0!==e}function m(e){return"object"==typeof e&&null!==e&&"then"in e&&"function"==typeof e.then}function w(e){return"object"==typeof e&&null!==e&&!v(e)&&"[object Object]"===Object.prototype.toString.call(e)}function h(e){return"string"==typeof e}function b(e,t="",n){const r=t.split(".");let o=e;for(let e=0;e<r.length;e++){const t=r[e];if("*"===t&&v(o)){const t=r.slice(e+1).join("."),i=[];for(const e of o){const r=b(e,t,n);i.push(r)}return i}if(o=w(o)||v(o)?o[t]:void 0,void 0===o)break}return y(o)?o:n}function O(e){return function(e){return"boolean"==typeof e}(e)||h(e)||function(e){return"number"==typeof e&&!Number.isNaN(e)}(e)||!y(e)||v(e)&&e.every(O)||w(e)&&Object.values(e).every(O)}function j(e){return O(e)?e:void 0}function P(e,t,n){return async function(...r){try{return await e(...r)}catch(e){if(!t)return;return await t(e)}finally{await(null==n?void 0:n())}}}c({},{getStore:()=>d,getStoreValue:()=>g});var R=class e extends Error{constructor(t,n){super(t,n),this.name="FatalError",Object.setPrototypeOf(this,e.prototype)}};async function k(e,t={},n){var r;if(!n.collector)throw new Error("getMappingValue: context.collector is required");const o=n.consent||n.collector.consent,i=null!=(r=n.event)?r:{},c={event:i,mapping:t,collector:n.collector,logger:n.collector.logger,consent:o},s=v(t)?t:[t];for(const t of s){const r=await P(E,e=>{if(e instanceof R)throw e;n.collector.status.failed++,c.logger.error("mapping processing failed",{event:i,error:e})})(e,t,{...c,mapping:t});if(y(r))return r}}async function E(e,t,n){return(v(t)?t:[t]).reduce(async(t,r)=>{const o=await t;if(o)return o;const i=h(r)?{key:r}:r;if(!Object.keys(i).length)return;const{condition:c,consent:s,fn:a,key:u,loop:f,map:l,set:p,validate:d,value:g}=i,m={...n,mapping:r};if(c&&!await P(c,e=>{if(e instanceof R)throw e;return m.logger.error("mapping condition failed",{event:m.event,error:e}),!1})(e,m))return;if(s&&!function(e,t={},n={}){const r={...t,...n},o={};let i=!e||0===Object.keys(e).length;return Object.keys(r).forEach(t=>{r[t]&&(o[t]=!0,e&&e[t]&&(i=!0))}),!!i&&o}(s,m.consent))return g;let w=y(g)?g:e;if(f){const[t,n]=f,r="this"===t?[e]:await k(e,t,m);w=v(r)?(await Promise.all(r.map(e=>y(e)?k(e,n,m):void 0))).filter(y):void 0}else l?w=await Object.entries(l).reduce(async(t,[n,r])=>{const o=await t,i=await k(e,r,m);return y(i)&&(o[n]=i),o},Promise.resolve({})):p?w=await Promise.all(p.map(t=>E(e,t,m))):u?w=b(e,u,g):a&&(w=await P(a,e=>{if(e instanceof R)throw e;m.logger.error("mapping fn failed",{event:m.event,error:e})})(e,m));d&&!await P(d,e=>{if(e instanceof R)throw e;return m.logger.error("mapping validate failed",{event:m.event,error:e}),!1})(w,m)&&(w=void 0);const O=j(w);return y(O)?O:j(g)},Promise.resolve(void 0))}async function S(e,t={},n){var r,o;if(!y(e))return;const i=w(e)&&e.consent||(null==n?void 0:n.consent)||(null==(r=null==n?void 0:n.collector)?void 0:r.consent),c=null!=(o=null==n?void 0:n.event)?o:w(e)?e:{};return k(e,t,{...n,consent:i,event:c})}var $="observe";function _(e){const t=(e.startsWith("call:")?e.slice(5):e).split(".");return t.some(e=>""===e)?[]:t}function I(e){return"function"==typeof e}function D(e){return"object"==typeof e&&null!==e}var N=["name","length","prototype","arguments","caller"];function A(e,t){if(-1!==N.indexOf(t))return!1;let n=e;for(;I(n);){if(Object.prototype.hasOwnProperty.call(n,t))return!0;const e=Object.getPrototypeOf(n);if(!I(e)||!I(Object.getPrototypeOf(e)))return!1;n=e}return!1}function x(e,t){const n=Reflect.getOwnPropertyDescriptor(e,t);return!(n&&!n.configurable)||"value"in n&&!0===n.writable}function T(e,t){let n=e;for(const e of t){if(I(n)){if(!A(n,e))return!0;if(!x(n,e))return!1}else if(m(n)){if(!(e in n))return!0}else if(!D(n)||!(e in n))return!1;n=Reflect.get(n,e)}return I(n)}function C(e){const t={window:"undefined"!=typeof window?window:globalThis.window,document:"undefined"!=typeof document?document:globalThis.document,...e},n=e&&e[$];if(("undefined"==typeof __WALKEROS_OBSERVE__||__WALKEROS_OBSERVE__)&&function(e){if("object"!=typeof e||null===e)return!1;if(!("paths"in e)||!("record"in e))return!1;const{paths:t,record:n}=e;return Array.isArray(t)&&t.every(e=>"string"==typeof e)&&"function"==typeof n}(n)){delete t[$];const e=function(e,t,n){const r=[],o=[],i=[];for(const n of t){const t=_(n);if(0===t.length)continue;const r=t.join(".");i.push({rest:t,fn:r}),T(e,t)||o.push(r)}const c=new WeakMap,s=new WeakSet;function a(e,t){for(const o of e)if(n)try{n(o,t)}catch(e){}else r.push({fn:o,args:t,ts:Date.now()})}function u(e,t){return 0===t.length||f(e)?e:m(e)&&!t.some(t=>t.rest[0]in e)?Promise.resolve(e).then(e=>u(e,t)):I(e)?y(e,[],t):D(e)?p(e,t):e}function f(e){return(D(e)||I(e))&&s.has(e)}function l(e,t){const n=[],r=[];for(const o of e)o.rest[0]===t&&(1===o.rest.length?n.includes(o.fn)||n.push(o.fn):r.push({rest:o.rest.slice(1),fn:o.fn}));return{leafs:n,deeper:r}}function p(e,t){var n;const r=t.map(e=>`${e.fn}:${e.rest.join(".")}`).join("|"),o=null!=(n=c.get(e))?n:new Map;c.set(e,o);const i=o.get(r);if(i)return i;const s=d(e,t);return o.set(r,s),s}function d(e,t){return I(e)?g(e,t):t.some(t=>!x(e,t.rest[0]))?function(e,t){const n=Object.create(Object.getPrototypeOf(e)),r=v(e,t,()=>o),o=new Proxy(n,{get:(e,t)=>r.get(t),set:(t,n,r)=>Reflect.set(e,n,r,e),has:(t,n)=>Reflect.has(e,n),ownKeys:()=>Reflect.ownKeys(e),getOwnPropertyDescriptor(t,n){const r=Reflect.getOwnPropertyDescriptor(e,n);return r&&{...r,configurable:!0}},defineProperty:(t,n,r)=>Reflect.defineProperty(e,n,r),deleteProperty:(t,n)=>Reflect.deleteProperty(e,n)});return s.add(o),o}(e,t):g(e,t)}function g(e,t){const n=v(e,t,()=>r),r=new Proxy(e,{get:(e,t)=>"string"!=typeof t||x(e,t)?n.get(t):Reflect.get(e,t,e),set:(e,t,n)=>Reflect.set(e,t,n,e)});return s.add(r),r}function v(e,t,n){const r=new Map;return{get(o){const i=Reflect.get(e,o,e);if("string"!=typeof o)return i;if(!I(i)&&!D(i))return i;if(f(i))return i;const c=r.get(o);if(c&&c.value===i)return c.out;const{leafs:s,deeper:a}=l(t,o);if(!(s.length>0||a.length>0)&&(!I(i)||function(e){if(Array.isArray(e))return!0;const t=Object.getPrototypeOf(e);return t===Object.prototype||null===t}(e)))return i;let u=i;return I(i)?u=y(i,s,a,{proxy:n(),target:e}):a.length>0&&(u=p(i,a)),r.set(o,{value:i,out:u}),u}}}function y(e,t,n,r){const o=()=>n.filter(t=>!A(e,t.rest[0])),i=new Map,c=new Proxy(e,{get(e,t){const r=Reflect.get(e,t,e);if("string"!=typeof t||!x(e,t))return r;if(!A(e,t))return r;const{leafs:o,deeper:s}=l(n,t);if(0===o.length&&0===s.length)return r;if(f(r))return r;const a=i.get(t);if(a&&a.value===r)return a.out;let u=r;return I(r)?u=y(r,o,s,{proxy:c,target:e}):D(r)&&s.length>0&&(u=p(r,s)),i.set(t,{value:r,out:u}),u},set:(e,t,n)=>Reflect.set(e,t,n,e),apply(e,n,i){a(t,i);const c=!r||n!==r.proxy&&void 0!==n?n:r.target;return u(Reflect.apply(e,c,i),o())},construct(e,n,r){a(t,n);const i=Reflect.construct(e,n,r===c?e:r),s=u(i,o());return D(s)||I(s)?s:i}});return s.add(c),c}return{env:d(e,i),calls:r,unresolved:o}}(t,n.paths,n.record).env,r=new Set;for(const e of n.paths){const n=_(e)[0];if(void 0===n)continue;const o=t[n];null!==o&&"object"==typeof o&&r.add(n)}const o=Array.from(r,t=>[t,e[t]]);for(const[e,n]of o)t[e]=n}return t}var M=/^\d+$/;async function q(e,t,n){const r={};if(!e)return r;for(const[o,i]of Object.entries(e)){const e=await S(t,i,{collector:n});r[o]=null==e?void 0:String(e)}return r}function V(e){return function(e){return Object.entries(e).filter(([e])=>M.test(e)).sort(([e],[t])=>Number(e)-Number(t))}(e).map(([e,t])=>void 0===t?["deleteCustomDimension",Number(e)]:["setCustomDimension",Number(e),t])}var B=new Set;function W(e,t,n,r){if(!B.has(t)&&B.size<1e3)return B.add(t),void e.warn(n,r);e.debug(n,r)}var L={},G={type:"matomo",config:{},init({config:e,env:t,logger:n}){const{window:r}=C(t),{settings:o={},loadScript:i}=e,{siteId:c,url:s}=o;r._paq=r._paq||[];const a=r._paq,u=e=>{a.push(e)};if(i){if(!c)return n.throw("Config settings siteId missing");if(!s)return n.throw("Config settings url missing");const e=function(e){return`${e.replace(/\/+$/,"")}/`}(s);!function(e,t){const{document:n}=C(t),r=n.createElement("script");r.type="text/javascript",r.src=e+"matomo.js",r.async=!0,r.defer=!0,n.head.appendChild(r)}(e,t),u(["setTrackerUrl",e+"matomo.php"]),u(["setSiteId",c])}o.disableCookies&&u(["disableCookies"]),!1!==o.enableLinkTracking&&u(["enableLinkTracking"]),o.enableHeartBeatTimer&&u(["enableHeartBeatTimer",o.enableHeartBeatTimer])},async push(e,{config:t,rule:n={},data:r,env:o,collector:i,logger:c,id:s}){const{window:a}=C(o),u=a._paq;if(!u)return void c.warn("Matomo _paq queue missing, init() not run");const f=e=>{u.push(e)},l=t.settings||{},p=n.settings||{},{goalId:d}=p,g=v(r)?r:[r],y=("number"==typeof(m=d)?Number.isInteger(m)&&m>0:"string"==typeof m&&K.test(m))?d:void 0;var m;let w;if(void 0!==d&&void 0===y&&W(c,`${s}|${e.name}|invalid goalId`,`Goal of event "${e.name}" skipped: goalId ${JSON.stringify(d)} is not a positive integer`,{event:e.name,reason:"invalid goalId"}),p.siteSearch)w=["trackSiteSearch",...g];else if(p.contentImpression)w=["trackContentImpression",...g];else if(p.contentInteraction)w=["trackContentInteraction",...g];else if(n.name)w=[e.name,...g];else if("page view"===e.name)w=void 0===n.data?["trackPageView",await S(e,"data.title",{collector:i})]:["trackPageView",...g];else if(void 0===y)return void W(c,`${s}|${e.name}|unmapped`,`Event "${e.name}" skipped: no rule name, tracking flag or goal, and not a page view`,{event:e.name,reason:"unmapped"});const h=void 0!==y&&void 0!==p.goalValue?await S(e,p.goalValue,{collector:i}):void 0,{before:b,after:O}=function(e,t){const n=V({...e,...t});if(0===Object.keys(t).length)return{before:n,after:[]};const r={};for(const[n,o]of Object.entries(t))Object.prototype.hasOwnProperty.call(e,n)||void 0===o||(r[n]=void 0);return{before:n,after:[...V(r),...V(e)]}}(await q(l.customDimensions,e,i),await q(p.customDimensions,e,i));b.forEach(f),w&&f(w),void 0!==y&&f(["trackGoal",y,h]),O.forEach(f)}},K=/^[1-9]\d*$/;var F,H=G;return F=o,((o,i,c,s)=>{if(i&&"object"==typeof i||"function"==typeof i)for(let a of n(i))r.call(o,a)||a===c||e(o,a,{get:()=>i[a],enumerable:!(s=t(i,a))||s.enumerable});return o})(e({},"__esModule",{value:!0}),F)})();
package/dist/index.es5.js CHANGED
@@ -1 +1 @@
1
- "use strict";function _array_like_to_array(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}function _array_with_holes(e){if(Array.isArray(e))return e}function _array_without_holes(e){if(Array.isArray(e))return _array_like_to_array(e)}function _assert_this_initialized(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function asyncGeneratorStep(e,t,r,n,o,a,i){try{var c=e[a](i),u=c.value}catch(e){return void r(e)}c.done?t(u):Promise.resolve(u).then(n,o)}function _async_to_generator(e){return function(){var t=this,r=arguments;return new Promise(function(n,o){var a=e.apply(t,r);function i(e){asyncGeneratorStep(a,n,o,i,c,"next",e)}function c(e){asyncGeneratorStep(a,n,o,i,c,"throw",e)}i(void 0)})}}function _call_super(e,t,r){return t=_get_prototype_of(t),_possible_constructor_return(e,_is_native_reflect_construct()?Reflect.construct(t,r||[],_get_prototype_of(e).constructor):t.apply(e,r))}function _class_call_check(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function _construct(e,t,r){return _construct=_is_native_reflect_construct()?Reflect.construct:function(e,t,r){var n=[null];n.push.apply(n,t);var o=new(Function.bind.apply(e,n));return r&&_set_prototype_of(o,r.prototype),o},_construct.apply(null,arguments)}function _define_property(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function _get_prototype_of(e){return _get_prototype_of=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)},_get_prototype_of(e)}function _inherits(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}}),t&&_set_prototype_of(e,t)}function _instanceof(e,t){return null!=t&&"undefined"!=typeof Symbol&&t[Symbol.hasInstance]?!!t[Symbol.hasInstance](e):e instanceof t}function _is_native_function(e){return-1!==Function.toString.call(e).indexOf("[native code]")}function _iterable_to_array(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}function _iterable_to_array_limit(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,o,a=[],i=!0,c=!1;try{for(r=r.call(e);!(i=(n=r.next()).done)&&(a.push(n.value),!t||a.length!==t);i=!0);}catch(e){c=!0,o=e}finally{try{i||null==r.return||r.return()}finally{if(c)throw o}}return a}}function _non_iterable_rest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _non_iterable_spread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _object_spread(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){_define_property(e,t,r[t])})}return e}function ownKeys(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function _object_spread_props(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):ownKeys(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}),e}function _possible_constructor_return(e,t){return!t||"object"!==_type_of(t)&&"function"!=typeof t?_assert_this_initialized(e):t}function _set_prototype_of(e,t){return _set_prototype_of=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},_set_prototype_of(e,t)}function _sliced_to_array(e,t){return _array_with_holes(e)||_iterable_to_array_limit(e,t)||_unsupported_iterable_to_array(e,t)||_non_iterable_rest()}function _to_consumable_array(e){return _array_without_holes(e)||_iterable_to_array(e)||_unsupported_iterable_to_array(e)||_non_iterable_spread()}function _type_of(e){return e&&"undefined"!=typeof Symbol&&e.constructor===Symbol?"symbol":typeof e}function _unsupported_iterable_to_array(e,t){if(e){if("string"==typeof e)return _array_like_to_array(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(r):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?_array_like_to_array(e,t):void 0}}function _wrap_native_super(e){var t="function"==typeof Map?new Map:void 0;return _wrap_native_super=function(e){if(null===e||!_is_native_function(e))return e;if("function"!=typeof e)throw new TypeError("Super expression must either be null or a function");if(void 0!==t){if(t.has(e))return t.get(e);t.set(e,r)}function r(){return _construct(e,arguments,_get_prototype_of(this).constructor)}return r.prototype=Object.create(e.prototype,{constructor:{value:r,enumerable:!1,writable:!0,configurable:!0}}),_set_prototype_of(r,e)},_wrap_native_super(e)}function _is_native_reflect_construct(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(_is_native_reflect_construct=function(){return!!e})()}function _ts_generator(e,t){var r,n,o,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},i=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),c=Object.defineProperty;return c(i,"next",{value:u(0)}),c(i,"throw",{value:u(1)}),c(i,"return",{value:u(2)}),"function"==typeof Symbol&&c(i,Symbol.iterator,{value:function(){return this}}),i;function u(c){return function(u){return function(c){if(r)throw new TypeError("Generator is already executing.");for(;i&&(i=0,c[0]&&(a=0)),a;)try{if(r=1,n&&(o=2&c[0]?n.return:c[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,c[1])).done)return o;switch(n=0,o&&(c=[2&c[0],o.value]),c[0]){case 0:case 1:o=c;break;case 4:return a.label++,{value:c[1],done:!1};case 5:a.label++,n=c[1],c=[0];continue;case 7:c=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==c[0]&&2!==c[0])){a=0;continue}if(3===c[0]&&(!o||c[1]>o[0]&&c[1]<o[3])){a.label=c[1];break}if(6===c[0]&&a.label<o[1]){a.label=o[1],o=c;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(c);break}o[2]&&a.ops.pop(),a.trys.pop();continue}c=t.call(e,a)}catch(e){c=[6,e],n=0}finally{r=o=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}([c,u])}}}var Destination=function(){var e=function(e,t){if("collector"===e)return"collector";if(!t)throw new Error("stepId(".concat(e,") requires an id"));return"".concat(e,".").concat(t)},t=function(e,t){var r=e.destinations[t];if(!r)throw new Error("Destination not found: ".concat(t));return r},r=function(e,t){var r=e.transformers[t];if(!r)throw new Error("Transformer not found: ".concat(t));return r},n=function(e,t){var r=e.sources[t];if(!r)throw new Error("Source not found: ".concat(t));return r},o=function(e,t){var r=e.stores[t];if(!r)throw new Error("Store not found: ".concat(t));return r},a=function(e,t){return _async_to_generator(function(){return _ts_generator(this,function(r){switch(r.label){case 0:return[4,e.get(t)];case 1:return[2,r.sent()]}})})()},i=function(e){return Array.isArray(e)},c=function(e){return void 0!==e},u=function(e){return"object"==(void 0===e?"undefined":_type_of(e))&&null!==e&&"then"in e&&"function"==typeof e.then},l=function(e){return"object"==(void 0===e?"undefined":_type_of(e))&&null!==e&&!i(e)&&"[object Object]"===Object.prototype.toString.call(e)},s=function(e){return"string"==typeof e},f=function(e){return B(e)?e:void 0},_=function(e,t,r){return function(){for(var n=arguments.length,o=new Array(n),a=0;a<n;a++)o[a]=arguments[a];return _async_to_generator(function(){var n;return _ts_generator(this,function(a){switch(a.label){case 0:return a.trys.push([0,2,4,6]),[4,e.apply(void 0,_to_consumable_array(o))];case 1:case 3:return[2,a.sent()];case 2:return n=a.sent(),t?[4,t(n)]:[2];case 4:return[4,null==r?void 0:r()];case 5:return a.sent(),[7];case 6:return[2]}})})()}},p=function(e){return _async_to_generator(function(e){var t,r,n,o,a,u,l,s,f,p,y,v,d,b,g,h,m=arguments;return _ts_generator(this,function(w){switch(w.label){case 0:if(t=m.length>1&&void 0!==m[1]?m[1]:{},a=(r=m.length>2&&void 0!==m[2]?m[2]:{}).consent||(null===(o=r.collector)||void 0===o?void 0:o.consent),u=null!==(n=r.event)&&void 0!==n?n:{},!r.collector)throw new Error("getMappingValue: context.collector is required");l={event:u,mapping:t,collector:r.collector,logger:r.collector.logger,consent:a},s=i(t)?t:[t],f=!0,p=!1,y=void 0,w.label=1;case 1:w.trys.push([1,6,7,8]),v=s[Symbol.iterator](),w.label=2;case 2:return(f=(d=v.next()).done)?[3,5]:(b=d.value,[4,_(G,function(e){if(_instanceof(e,q))throw e;r.collector&&r.collector.status.failed++,l.logger.error("mapping processing failed",{event:u,error:e})})(e,b,_object_spread_props(_object_spread({},l),{mapping:b}))]);case 3:if(g=w.sent(),c(g))return[2,g];w.label=4;case 4:return f=!0,[3,2];case 5:return[3,8];case 6:return h=w.sent(),p=!0,y=h,[3,8];case 7:try{f||null==v.return||v.return()}finally{if(p)throw y}return[7];case 8:return[2]}})}).apply(this,arguments)},y=function(e){return _async_to_generator(function(e){var t,r,n,o,a,i,u=arguments;return _ts_generator(this,function(s){return t=u.length>1&&void 0!==u[1]?u[1]:{},r=u.length>2&&void 0!==u[2]?u[2]:{},c(e)?(a=l(e)&&e.consent||r.consent||(null===(o=r.collector)||void 0===o?void 0:o.consent),i=null!==(n=r.event)&&void 0!==n?n:l(e)?e:{},[2,p(e,t,_object_spread_props(_object_spread({},r),{consent:a,event:i}))]):[2]})}).apply(this,arguments)},v=function(e){var t=(e.startsWith(K)?e.slice(5):e).split(".");return t.some(function(e){return""===e})?[]:t},d=function(e){return"function"==typeof e},b=function(e){return"object"==(void 0===e?"undefined":_type_of(e))&&null!==e},g=function(e,t){if(-1!==F.indexOf(t))return!1;for(var r=e;d(r);){if(Object.prototype.hasOwnProperty.call(r,t))return!0;var n=Object.getPrototypeOf(r);if(!d(n)||!d(Object.getPrototypeOf(n)))return!1;r=n}return!1},h=function(e,t){var r=Reflect.getOwnPropertyDescriptor(e,t);return!(r&&!r.configurable)||"value"in r&&!0===r.writable},m=function(e,t){var r=e,n=!0,o=!1,a=void 0;try{for(var i,c=t[Symbol.iterator]();!(n=(i=c.next()).done);n=!0){var l=i.value;if(d(r)){if(!g(r,l))return!0;if(!h(r,l))return!1}else if(u(r)){if(!(l in r))return!0}else if(!b(r)||!(l in r))return!1;r=Reflect.get(r,l)}}catch(e){o=!0,a=e}finally{try{n||null==c.return||c.return()}finally{if(o)throw a}}return d(r)},w=function(e){var t=_object_spread({window:"undefined"!=typeof window?window:globalThis.window,document:"undefined"!=typeof document?document:globalThis.document},e),r=e&&e[W];if(("undefined"==typeof __WALKEROS_OBSERVE__||__WALKEROS_OBSERVE__)&&function(e){if("object"!=(void 0===e?"undefined":_type_of(e))||null===e)return!1;if(!("paths"in e)||!("record"in e))return!1;var t=e.paths,r=e.record;return Array.isArray(t)&&t.every(function(e){return"string"==typeof e})&&"function"==typeof r}(r)){delete t[W];var n=function(e,t,r){var n=[],o=[],a=[],i=!0,c=!1,l=void 0;try{for(var s,f=t[Symbol.iterator]();!(i=(s=f.next()).done);i=!0){var _=s.value,p=v(_);if(0!==p.length){var y=p.join(".");a.push({rest:p,fn:y}),m(e,p)||o.push(y)}}}catch(e){c=!0,l=e}finally{try{i||null==f.return||f.return()}finally{if(c)throw l}}var w=new WeakMap,O=new WeakSet;function j(e,t){var o=!0,a=!1,i=void 0;try{for(var c,u=e[Symbol.iterator]();!(o=(c=u.next()).done);o=!0){var l=c.value;if(r)try{r(l,t)}catch(e){}else n.push({fn:l,args:t,ts:Date.now()})}}catch(e){a=!0,i=e}finally{try{o||null==u.return||u.return()}finally{if(a)throw i}}}function S(e,t){return 0===t.length||P(e)?e:u(e)&&!t.some(function(t){return t.rest[0]in e})?Promise.resolve(e).then(function(e){return S(e,t)}):d(e)?A(e,[],t):b(e)?E(e,t):e}function P(e){return(b(e)||d(e))&&O.has(e)}function k(e,t){var r=[],n=[],o=!0,a=!1,i=void 0;try{for(var c,u=e[Symbol.iterator]();!(o=(c=u.next()).done);o=!0){var l=c.value;l.rest[0]===t&&(1===l.rest.length?r.includes(l.fn)||r.push(l.fn):n.push({rest:l.rest.slice(1),fn:l.fn}))}}catch(e){a=!0,i=e}finally{try{o||null==u.return||u.return()}finally{if(a)throw i}}return{leafs:r,deeper:n}}function E(e,t){var r,n=t.map(function(e){return"".concat(e.fn,":").concat(e.rest.join("."))}).join("|"),o=null!==(r=w.get(e))&&void 0!==r?r:new Map;w.set(e,o);var a=o.get(n);if(a)return a;var i=R(e,t);return o.set(n,i),i}function R(e,t){return d(e)?x(e,t):t.some(function(t){return!h(e,t.rest[0])})?function(e,t){var r=Object.create(Object.getPrototypeOf(e)),n=I(e,t,function(){return o}),o=new Proxy(r,{get:function(e,t){return n.get(t)},set:function(t,r,n){return Reflect.set(e,r,n,e)},has:function(t,r){return Reflect.has(e,r)},ownKeys:function(){return Reflect.ownKeys(e)},getOwnPropertyDescriptor:function(t,r){var n=Reflect.getOwnPropertyDescriptor(e,r);return n&&_object_spread_props(_object_spread({},n),{configurable:!0})},defineProperty:function(t,r,n){return Reflect.defineProperty(e,r,n)},deleteProperty:function(t,r){return Reflect.deleteProperty(e,r)}});return O.add(o),o}(e,t):x(e,t)}function x(e,t){var r=I(e,t,function(){return n}),n=new Proxy(e,{get:function(e,t){return"string"!=typeof t||h(e,t)?r.get(t):Reflect.get(e,t,e)},set:function(e,t,r){return Reflect.set(e,t,r,e)}});return O.add(n),n}function I(e,t,r){var n=new Map;return{get:function(o){var a=Reflect.get(e,o,e);if("string"!=typeof o)return a;if(!d(a)&&!b(a))return a;if(P(a))return a;var i=n.get(o);if(i&&i.value===a)return i.out;var c=k(t,o),u=c.leafs,l=c.deeper;if(!(u.length>0||l.length>0)&&(!d(a)||function(e){if(Array.isArray(e))return!0;var t=Object.getPrototypeOf(e);return t===Object.prototype||null===t}(e)))return a;var s=a;return d(a)?s=A(a,u,l,{proxy:r(),target:e}):l.length>0&&(s=E(a,l)),n.set(o,{value:a,out:s}),s}}}function A(e,t,r,n){var o=function(){return r.filter(function(t){return!g(e,t.rest[0])})},a=new Map,i=new Proxy(e,{get:function(e,t){var n=Reflect.get(e,t,e);if("string"!=typeof t||!h(e,t))return n;if(!g(e,t))return n;var o=k(r,t),c=o.leafs,u=o.deeper;if(0===c.length&&0===u.length)return n;if(P(n))return n;var l=a.get(t);if(l&&l.value===n)return l.out;var s=n;return d(n)?s=A(n,c,u,{proxy:i,target:e}):b(n)&&u.length>0&&(s=E(n,u)),a.set(t,{value:n,out:s}),s},set:function(e,t,r){return Reflect.set(e,t,r,e)},apply:function(e,r,a){j(t,a);var i=!n||r!==n.proxy&&void 0!==r?r:n.target;return S(Reflect.apply(e,i,a),o())},construct:function(e,r,n){j(t,r);var a=Reflect.construct(e,r,n===i?e:n),c=S(a,o());return b(c)||d(c)?c:a}});return O.add(i),i}return{env:R(e,a),calls:n,unresolved:o}}(t,r.paths,r.record).env,o=new Set,a=!0,i=!1,c=void 0;try{for(var l,s=r.paths[Symbol.iterator]();!(a=(l=s.next()).done);a=!0){var f=l.value,_=v(f)[0];if(void 0!==_){var p=t[_];null!==p&&"object"==(void 0===p?"undefined":_type_of(p))&&o.add(_)}}}catch(e){i=!0,c=e}finally{try{a||null==s.return||s.return()}finally{if(i)throw c}}var y=Array.from(o,function(e){return[e,n[e]]}),w=!0,O=!1,j=void 0;try{for(var S,P=y[Symbol.iterator]();!(w=(S=P.next()).done);w=!0){var k=_sliced_to_array(S.value,2),E=k[0],R=k[1];t[E]=R}}catch(e){O=!0,j=e}finally{try{w||null==P.return||P.return()}finally{if(O)throw j}}}return t},O=function(e,t,r){return _async_to_generator(function(){var n,o,a,i,c,u,l,s,f,_,p;return _ts_generator(this,function(v){switch(v.label){case 0:if(n={},!e)return[2,n];o=!0,a=!1,i=void 0,v.label=1;case 1:v.trys.push([1,6,7,8]),c=Object.entries(e)[Symbol.iterator](),v.label=2;case 2:return(o=(u=c.next()).done)?[3,5]:(l=_sliced_to_array(u.value,2),s=l[0],f=l[1],[4,y(t,f,{collector:r})]);case 3:_=v.sent(),n[s]=null==_?void 0:String(_),v.label=4;case 4:return o=!0,[3,2];case 5:return[3,8];case 6:return p=v.sent(),a=!0,i=p,[3,8];case 7:try{o||null==c.return||c.return()}finally{if(a)throw i}return[7];case 8:return[2,n]}})})()},j=function(e){return P(e).map(function(e){var t=_sliced_to_array(e,2),r=t[0],n=t[1];return void 0===n?["deleteCustomDimension",Number(r)]:["setCustomDimension",Number(r),n]})},S=function(e,t){var r=j(_object_spread({},e,t));if(0===Object.keys(t).length)return{before:r,after:[]};var n={},o=!0,a=!1,i=void 0;try{for(var c,u=Object.entries(t)[Symbol.iterator]();!(o=(c=u.next()).done);o=!0){var l=_sliced_to_array(c.value,2),s=l[0],f=l[1];Object.prototype.hasOwnProperty.call(e,s)||void 0===f||(n[s]=void 0)}}catch(e){a=!0,i=e}finally{try{o||null==u.return||u.return()}finally{if(a)throw i}}return{before:r,after:_to_consumable_array(j(n)).concat(_to_consumable_array(j(e)))}},P=function(e){return Object.entries(e).filter(function(e){var t=_sliced_to_array(e,1)[0];return L.test(t)}).sort(function(e,t){var r=_sliced_to_array(e,1)[0],n=_sliced_to_array(t,1)[0];return Number(r)-Number(n)})},k=function(e,t,r,n){if(!$.has(t)&&$.size<U)return $.add(t),void e.warn(r,n);e.debug(r,n)},E=Object.defineProperty,R=Object.getOwnPropertyDescriptor,x=Object.getOwnPropertyNames,I=Object.prototype.hasOwnProperty,A={};!function(e,t){for(var r in t)E(e,r,{get:t[r],enumerable:!0})}(A,{DestinationMatomo:function(){return z},default:function(){return Q},destinationMatomo:function(){return H}});var D=Object.defineProperty,T=function(e,t){for(var r in t)D(e,r,{get:t[r],enumerable:!0})};T({},{stepId:function(){return e}});T({},{getDestination:function(){return t}});T({},{Level:function(){return M}});var N,M=((N=M||{})[N.ERROR=0]="ERROR",N[N.WARN=1]="WARN",N[N.INFO=2]="INFO",N[N.DEBUG=3]="DEBUG",N);T({},{getTransformer:function(){return r}});T({},{getSource:function(){return n}});function C(e){for(var t=arguments.length>2?arguments[2]:void 0,r=(arguments.length>1&&void 0!==arguments[1]?arguments[1]:"").split("."),n=e,o=0;o<r.length;o++){var a=r[o];if("*"===a&&i(n)){var u=r.slice(o+1).join("."),s=[],f=!0,_=!1,p=void 0;try{for(var y,v=n[Symbol.iterator]();!(f=(y=v.next()).done);f=!0){var d=C(y.value,u,t);s.push(d)}}catch(e){_=!0,p=e}finally{try{f||null==v.return||v.return()}finally{if(_)throw p}}return s}if(void 0===(n=l(n)||i(n)?n[a]:void 0))break}return c(n)?n:t}function B(e){return function(e){return"boolean"==typeof e}(e)||s(e)||function(e){return"number"==typeof e&&!Number.isNaN(e)}(e)||!c(e)||i(e)&&e.every(B)||l(e)&&Object.values(e).every(B)}T({},{getStore:function(){return o},getStoreValue:function(){return a}});var q=function(){function e(t,r){var n;return _class_call_check(this,e),(n=_call_super(this,e,[t,r])).name="FatalError",Object.setPrototypeOf(n,e.prototype),n}return _inherits(e,_wrap_native_super(Error)),e}();function G(e,t,r){return _async_to_generator(function(){return _ts_generator(this,function(n){return[2,(i(t)?t:[t]).reduce(function(t,n){return _async_to_generator(function(){var o,a,u,l,y,v,d,b,g,h,m,w,O,j,S,P,k,E,R,x,I,A,D,T,N;return _ts_generator(this,function(M){switch(M.label){case 0:return[4,t];case 1:return(o=M.sent())?[2,o]:(a=s(n)?{key:n}:n,Object.keys(a).length?(u=a.condition,l=a.consent,y=a.fn,v=a.key,d=a.loop,b=a.map,g=a.set,h=a.validate,m=a.value,w=_object_spread_props(_object_spread({},r),{mapping:n}),(O=u)?[4,_(u,function(e){if(_instanceof(e,q))throw e;return w.logger.error("mapping condition failed",{event:w.event,error:e}),!1})(e,w)]:[3,3]):[2]);case 2:O=!M.sent(),M.label=3;case 3:return O?[2]:l&&!function(e){var t=_object_spread({},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},arguments.length>2&&void 0!==arguments[2]?arguments[2]:{}),r={},n=!e||0===Object.keys(e).length;return Object.keys(t).forEach(function(o){t[o]&&(r[o]=!0,e&&e[o]&&(n=!0))}),!!n&&r}(l,w.consent)?[2,m]:(j=c(m)?m:e,d?(S=_sliced_to_array(d,2),P=S[0],k=S[1],"this"!==P?[3,4]:(R=[e],[3,6])):[3,10]);case 4:return[4,p(e,P,w)];case 5:R=M.sent(),M.label=6;case 6:return i(E=R)?[4,Promise.all(E.map(function(e){return c(e)?p(e,k,w):void 0}))]:[3,8];case 7:return x=M.sent().filter(c),[3,9];case 8:x=void 0,M.label=9;case 9:return j=x,[3,21];case 10:return b?[4,Object.entries(b).reduce(function(t,r){var n=_sliced_to_array(r,2),o=n[0],a=n[1];return _async_to_generator(function(){var r,n;return _ts_generator(this,function(i){switch(i.label){case 0:return[4,t];case 1:return r=i.sent(),[4,p(e,a,w)];case 2:return n=i.sent(),[2,(c(n)&&(r[o]=n),r)]}})})()},Promise.resolve({}))]:[3,12];case 11:return j=M.sent(),[3,20];case 12:return g?[4,Promise.all(g.map(function(t){return G(e,t,w)}))]:[3,14];case 13:return I=j=M.sent(),[3,19];case 14:return v?(A=j=C(e,v,m),[3,18]):[3,15];case 15:return(D=y)?[4,_(y,function(e){if(_instanceof(e,q))throw e;w.logger.error("mapping fn failed",{event:w.event,error:e})})(e,w)]:[3,17];case 16:D=j=M.sent(),M.label=17;case 17:A=D,M.label=18;case 18:I=A,M.label=19;case 19:M.label=20;case 20:M.label=21;case 21:return(T=h)?[4,_(h,function(e){if(_instanceof(e,q))throw e;return w.logger.error("mapping validate failed",{event:w.event,error:e}),!1})(j,w)]:[3,23];case 22:T=!M.sent(),M.label=23;case 23:return T&&(j=void 0),N=f(j),[2,c(N)?N:f(m)]}})})()},Promise.resolve(void 0))]})})()}var V,W="observe",K="call:",F=["name","length","prototype","arguments","caller"],L=/^\d+$/,U=1e3,$=new Set,z={},H={type:"matomo",config:{},init:function(e){var t=e.config,r=e.env,n=e.logger,o=w(r).window,a=t.settings,i=void 0===a?{}:a,c=t.loadScript,u=i.siteId,l=i.url;o._paq=o._paq||[];var s=o._paq,f=function(e){s.push(e)};if(c){if(!u)return n.throw("Config settings siteId missing");if(!l)return n.throw("Config settings url missing");var _=function(e){return"".concat(e.replace(/\/+$/,""),"/")}(l);!function(e,t){var r=w(t).document,n=r.createElement("script");n.type="text/javascript",n.src=e+"matomo.js",n.async=!0,n.defer=!0,r.head.appendChild(n)}(_,r),f(["setTrackerUrl",_+"matomo.php"]),f(["setSiteId",u])}i.disableCookies&&f(["disableCookies"]),!1!==i.enableLinkTracking&&f(["enableLinkTracking"]),i.enableHeartBeatTimer&&f(["enableHeartBeatTimer",i.enableHeartBeatTimer])},push:function(e,t){return _async_to_generator(function(e,t){var r,n,o,a,c,u,l,s,f,_,p,v,d,b,g,h,m,j,P,E,R,x,I,A,D,T;return _ts_generator(this,function(N){switch(N.label){case 0:return r=t.config,n=t.rule,o=void 0===n?{}:n,a=t.data,c=t.env,u=t.collector,l=t.logger,s=t.id,f=w(c),_=f.window,(p=_._paq)?(v=function(e){p.push(e)},d=r.settings||{},b=o.settings||{},g=b.goalId,h=i(a)?a:[a],m=("number"==typeof(M=g)?Number.isInteger(M)&&M>0:"string"==typeof M&&J.test(M))?g:void 0,void 0!==g&&void 0===m&&k(l,"".concat(s,"|").concat(e.name,"|invalid goalId"),'Goal of event "'.concat(e.name,'" skipped: goalId ').concat(JSON.stringify(g)," is not a positive integer"),{event:e.name,reason:"invalid goalId"}),b.siteSearch?(j=["trackSiteSearch"].concat(_to_consumable_array(h)),[3,9]):[3,1]):(l.warn("Matomo _paq queue missing, init() not run"),[2]);case 1:return b.contentImpression?(j=["trackContentImpression"].concat(_to_consumable_array(h)),[3,9]):[3,2];case 2:return b.contentInteraction?(j=["trackContentInteraction"].concat(_to_consumable_array(h)),[3,9]):[3,3];case 3:return o.name?(j=[e.name].concat(_to_consumable_array(h)),[3,9]):[3,4];case 4:return"page view"!==e.name?[3,8]:void 0!==o.data?[3,6]:(E=["trackPageView"],[4,y(e,"data.title",{collector:u})]);case 5:return P=E.concat([N.sent()]),[3,7];case 6:P=["trackPageView"].concat(_to_consumable_array(h)),N.label=7;case 7:return j=P,[3,9];case 8:if(void 0===m)return k(l,"".concat(s,"|").concat(e.name,"|unmapped"),'Event "'.concat(e.name,'" skipped: no rule name, tracking flag or goal, and not a page view'),{event:e.name,reason:"unmapped"}),[2];N.label=9;case 9:return void 0===m||void 0===b.goalValue?[3,11]:[4,y(e,b.goalValue,{collector:u})];case 10:return x=N.sent(),[3,12];case 11:x=void 0,N.label=12;case 12:return R=x,[4,O(d.customDimensions,e,u)];case 13:return T=[N.sent()],[4,O(b.customDimensions,e,u)];case 14:return I=S.apply(void 0,T.concat([N.sent()])),A=I.before,D=I.after,A.forEach(v),j&&v(j),void 0!==m&&v(["trackGoal",m,R]),D.forEach(v),[2]}var M})}).apply(this,arguments)}},J=/^[1-9]\d*$/,Q=H;return V=A,function(e,t,r,n){if(t&&"object"===(void 0===t?"undefined":_type_of(t))||"function"==typeof t){var o=!0,a=!1,i=void 0;try{for(var c,u=function(){var o=c.value;I.call(e,o)||o===r||E(e,o,{get:function(){return t[o]},enumerable:!(n=R(t,o))||n.enumerable})},l=x(t)[Symbol.iterator]();!(o=(c=l.next()).done);o=!0)u()}catch(e){a=!0,i=e}finally{try{o||null==l.return||l.return()}finally{if(a)throw i}}}return e}(E({},"__esModule",{value:!0}),V)}();
1
+ "use strict";function _array_like_to_array(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}function _array_with_holes(e){if(Array.isArray(e))return e}function _array_without_holes(e){if(Array.isArray(e))return _array_like_to_array(e)}function _assert_this_initialized(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function asyncGeneratorStep(e,t,r,n,o,a,i){try{var c=e[a](i),u=c.value}catch(e){return void r(e)}c.done?t(u):Promise.resolve(u).then(n,o)}function _async_to_generator(e){return function(){var t=this,r=arguments;return new Promise(function(n,o){var a=e.apply(t,r);function i(e){asyncGeneratorStep(a,n,o,i,c,"next",e)}function c(e){asyncGeneratorStep(a,n,o,i,c,"throw",e)}i(void 0)})}}function _call_super(e,t,r){return t=_get_prototype_of(t),_possible_constructor_return(e,_is_native_reflect_construct()?Reflect.construct(t,r||[],_get_prototype_of(e).constructor):t.apply(e,r))}function _class_call_check(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function _construct(e,t,r){return _construct=_is_native_reflect_construct()?Reflect.construct:function(e,t,r){var n=[null];n.push.apply(n,t);var o=new(Function.bind.apply(e,n));return r&&_set_prototype_of(o,r.prototype),o},_construct.apply(null,arguments)}function _define_property(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function _get_prototype_of(e){return _get_prototype_of=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)},_get_prototype_of(e)}function _inherits(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}}),t&&_set_prototype_of(e,t)}function _instanceof(e,t){return null!=t&&"undefined"!=typeof Symbol&&t[Symbol.hasInstance]?!!t[Symbol.hasInstance](e):e instanceof t}function _is_native_function(e){return-1!==Function.toString.call(e).indexOf("[native code]")}function _iterable_to_array(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}function _iterable_to_array_limit(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,o,a=[],i=!0,c=!1;try{for(r=r.call(e);!(i=(n=r.next()).done)&&(a.push(n.value),!t||a.length!==t);i=!0);}catch(e){c=!0,o=e}finally{try{i||null==r.return||r.return()}finally{if(c)throw o}}return a}}function _non_iterable_rest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _non_iterable_spread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _object_spread(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){_define_property(e,t,r[t])})}return e}function ownKeys(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function _object_spread_props(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):ownKeys(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}),e}function _possible_constructor_return(e,t){return!t||"object"!==_type_of(t)&&"function"!=typeof t?_assert_this_initialized(e):t}function _set_prototype_of(e,t){return _set_prototype_of=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},_set_prototype_of(e,t)}function _sliced_to_array(e,t){return _array_with_holes(e)||_iterable_to_array_limit(e,t)||_unsupported_iterable_to_array(e,t)||_non_iterable_rest()}function _to_consumable_array(e){return _array_without_holes(e)||_iterable_to_array(e)||_unsupported_iterable_to_array(e)||_non_iterable_spread()}function _type_of(e){return e&&"undefined"!=typeof Symbol&&e.constructor===Symbol?"symbol":typeof e}function _unsupported_iterable_to_array(e,t){if(e){if("string"==typeof e)return _array_like_to_array(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(r):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?_array_like_to_array(e,t):void 0}}function _wrap_native_super(e){var t="function"==typeof Map?new Map:void 0;return _wrap_native_super=function(e){if(null===e||!_is_native_function(e))return e;if("function"!=typeof e)throw new TypeError("Super expression must either be null or a function");if(void 0!==t){if(t.has(e))return t.get(e);t.set(e,r)}function r(){return _construct(e,arguments,_get_prototype_of(this).constructor)}return r.prototype=Object.create(e.prototype,{constructor:{value:r,enumerable:!1,writable:!0,configurable:!0}}),_set_prototype_of(r,e)},_wrap_native_super(e)}function _is_native_reflect_construct(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(_is_native_reflect_construct=function(){return!!e})()}function _ts_generator(e,t){var r,n,o,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},i=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),c=Object.defineProperty;return c(i,"next",{value:u(0)}),c(i,"throw",{value:u(1)}),c(i,"return",{value:u(2)}),"function"==typeof Symbol&&c(i,Symbol.iterator,{value:function(){return this}}),i;function u(c){return function(u){return function(c){if(r)throw new TypeError("Generator is already executing.");for(;i&&(i=0,c[0]&&(a=0)),a;)try{if(r=1,n&&(o=2&c[0]?n.return:c[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,c[1])).done)return o;switch(n=0,o&&(c=[2&c[0],o.value]),c[0]){case 0:case 1:o=c;break;case 4:return a.label++,{value:c[1],done:!1};case 5:a.label++,n=c[1],c=[0];continue;case 7:c=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==c[0]&&2!==c[0])){a=0;continue}if(3===c[0]&&(!o||c[1]>o[0]&&c[1]<o[3])){a.label=c[1];break}if(6===c[0]&&a.label<o[1]){a.label=o[1],o=c;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(c);break}o[2]&&a.ops.pop(),a.trys.pop();continue}c=t.call(e,a)}catch(e){c=[6,e],n=0}finally{r=o=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}([c,u])}}}var Destination=function(){var e=function(e,t){if("collector"===e)return"collector";if(!t)throw new Error("stepId(".concat(e,") requires an id"));return"".concat(e,".").concat(t)},t=function(e,t){var r=e.destinations[t];if(!r)throw new Error("Destination not found: ".concat(t));return r},r=function(e,t){var r=e.transformers[t];if(!r)throw new Error("Transformer not found: ".concat(t));return r},n=function(e,t){var r=e.sources[t];if(!r)throw new Error("Source not found: ".concat(t));return r},o=function(e,t){var r=e.stores[t];if(!r)throw new Error("Store not found: ".concat(t));return r},a=function(e,t){return _async_to_generator(function(){return _ts_generator(this,function(r){switch(r.label){case 0:return[4,e.get(t)];case 1:return[2,r.sent()]}})})()},i=function(e){return Array.isArray(e)},c=function(e){return void 0!==e},u=function(e){return"object"==(void 0===e?"undefined":_type_of(e))&&null!==e&&"then"in e&&"function"==typeof e.then},l=function(e){return"object"==(void 0===e?"undefined":_type_of(e))&&null!==e&&!i(e)&&"[object Object]"===Object.prototype.toString.call(e)},s=function(e){return"string"==typeof e},f=function(e){return B(e)?e:void 0},_=function(e,t,r){return function(){for(var n=arguments.length,o=new Array(n),a=0;a<n;a++)o[a]=arguments[a];return _async_to_generator(function(){var n;return _ts_generator(this,function(a){switch(a.label){case 0:return a.trys.push([0,2,4,6]),[4,e.apply(void 0,_to_consumable_array(o))];case 1:case 3:return[2,a.sent()];case 2:return n=a.sent(),t?[4,t(n)]:[2];case 4:return[4,null==r?void 0:r()];case 5:return a.sent(),[7];case 6:return[2]}})})()}},p=function(e,t){return _async_to_generator(function(e){var t,r,n,o,a,u,l,s,f,p,y,v,d,b,g,h=arguments;return _ts_generator(this,function(m){switch(m.label){case 0:if(t=h.length>1&&void 0!==h[1]?h[1]:{},!(r=h.length>2?h[2]:void 0).collector)throw new Error("getMappingValue: context.collector is required");o=r.consent||r.collector.consent,a=null!==(n=r.event)&&void 0!==n?n:{},u={event:a,mapping:t,collector:r.collector,logger:r.collector.logger,consent:o},l=i(t)?t:[t],s=!0,f=!1,p=void 0,m.label=1;case 1:m.trys.push([1,6,7,8]),y=l[Symbol.iterator](),m.label=2;case 2:return(s=(v=y.next()).done)?[3,5]:(d=v.value,[4,_(G,function(e){if(_instanceof(e,q))throw e;r.collector.status.failed++,u.logger.error("mapping processing failed",{event:a,error:e})})(e,d,_object_spread_props(_object_spread({},u),{mapping:d}))]);case 3:if(b=m.sent(),c(b))return[2,b];m.label=4;case 4:return s=!0,[3,2];case 5:return[3,8];case 6:return g=m.sent(),f=!0,p=g,[3,8];case 7:try{s||null==y.return||y.return()}finally{if(f)throw p}return[7];case 8:return[2]}})}).apply(this,arguments)},y=function(e,t){return _async_to_generator(function(e){var t,r,n,o,a,i,u=arguments;return _ts_generator(this,function(s){return t=u.length>1&&void 0!==u[1]?u[1]:{},r=u.length>2?u[2]:void 0,c(e)?(a=l(e)&&e.consent||(null==r?void 0:r.consent)||(null==r||null===(o=r.collector)||void 0===o?void 0:o.consent),i=null!==(n=null==r?void 0:r.event)&&void 0!==n?n:l(e)?e:{},[2,p(e,t,_object_spread_props(_object_spread({},r),{consent:a,event:i}))]):[2]})}).apply(this,arguments)},v=function(e){var t=(e.startsWith(K)?e.slice(5):e).split(".");return t.some(function(e){return""===e})?[]:t},d=function(e){return"function"==typeof e},b=function(e){return"object"==(void 0===e?"undefined":_type_of(e))&&null!==e},g=function(e,t){if(-1!==F.indexOf(t))return!1;for(var r=e;d(r);){if(Object.prototype.hasOwnProperty.call(r,t))return!0;var n=Object.getPrototypeOf(r);if(!d(n)||!d(Object.getPrototypeOf(n)))return!1;r=n}return!1},h=function(e,t){var r=Reflect.getOwnPropertyDescriptor(e,t);return!(r&&!r.configurable)||"value"in r&&!0===r.writable},m=function(e,t){var r=e,n=!0,o=!1,a=void 0;try{for(var i,c=t[Symbol.iterator]();!(n=(i=c.next()).done);n=!0){var l=i.value;if(d(r)){if(!g(r,l))return!0;if(!h(r,l))return!1}else if(u(r)){if(!(l in r))return!0}else if(!b(r)||!(l in r))return!1;r=Reflect.get(r,l)}}catch(e){o=!0,a=e}finally{try{n||null==c.return||c.return()}finally{if(o)throw a}}return d(r)},w=function(e){var t=_object_spread({window:"undefined"!=typeof window?window:globalThis.window,document:"undefined"!=typeof document?document:globalThis.document},e),r=e&&e[W];if(("undefined"==typeof __WALKEROS_OBSERVE__||__WALKEROS_OBSERVE__)&&function(e){if("object"!=(void 0===e?"undefined":_type_of(e))||null===e)return!1;if(!("paths"in e)||!("record"in e))return!1;var t=e.paths,r=e.record;return Array.isArray(t)&&t.every(function(e){return"string"==typeof e})&&"function"==typeof r}(r)){delete t[W];var n=function(e,t,r){var n=[],o=[],a=[],i=!0,c=!1,l=void 0;try{for(var s,f=t[Symbol.iterator]();!(i=(s=f.next()).done);i=!0){var _=s.value,p=v(_);if(0!==p.length){var y=p.join(".");a.push({rest:p,fn:y}),m(e,p)||o.push(y)}}}catch(e){c=!0,l=e}finally{try{i||null==f.return||f.return()}finally{if(c)throw l}}var w=new WeakMap,O=new WeakSet;function j(e,t){var o=!0,a=!1,i=void 0;try{for(var c,u=e[Symbol.iterator]();!(o=(c=u.next()).done);o=!0){var l=c.value;if(r)try{r(l,t)}catch(e){}else n.push({fn:l,args:t,ts:Date.now()})}}catch(e){a=!0,i=e}finally{try{o||null==u.return||u.return()}finally{if(a)throw i}}}function S(e,t){return 0===t.length||P(e)?e:u(e)&&!t.some(function(t){return t.rest[0]in e})?Promise.resolve(e).then(function(e){return S(e,t)}):d(e)?A(e,[],t):b(e)?E(e,t):e}function P(e){return(b(e)||d(e))&&O.has(e)}function k(e,t){var r=[],n=[],o=!0,a=!1,i=void 0;try{for(var c,u=e[Symbol.iterator]();!(o=(c=u.next()).done);o=!0){var l=c.value;l.rest[0]===t&&(1===l.rest.length?r.includes(l.fn)||r.push(l.fn):n.push({rest:l.rest.slice(1),fn:l.fn}))}}catch(e){a=!0,i=e}finally{try{o||null==u.return||u.return()}finally{if(a)throw i}}return{leafs:r,deeper:n}}function E(e,t){var r,n=t.map(function(e){return"".concat(e.fn,":").concat(e.rest.join("."))}).join("|"),o=null!==(r=w.get(e))&&void 0!==r?r:new Map;w.set(e,o);var a=o.get(n);if(a)return a;var i=R(e,t);return o.set(n,i),i}function R(e,t){return d(e)?x(e,t):t.some(function(t){return!h(e,t.rest[0])})?function(e,t){var r=Object.create(Object.getPrototypeOf(e)),n=I(e,t,function(){return o}),o=new Proxy(r,{get:function(e,t){return n.get(t)},set:function(t,r,n){return Reflect.set(e,r,n,e)},has:function(t,r){return Reflect.has(e,r)},ownKeys:function(){return Reflect.ownKeys(e)},getOwnPropertyDescriptor:function(t,r){var n=Reflect.getOwnPropertyDescriptor(e,r);return n&&_object_spread_props(_object_spread({},n),{configurable:!0})},defineProperty:function(t,r,n){return Reflect.defineProperty(e,r,n)},deleteProperty:function(t,r){return Reflect.deleteProperty(e,r)}});return O.add(o),o}(e,t):x(e,t)}function x(e,t){var r=I(e,t,function(){return n}),n=new Proxy(e,{get:function(e,t){return"string"!=typeof t||h(e,t)?r.get(t):Reflect.get(e,t,e)},set:function(e,t,r){return Reflect.set(e,t,r,e)}});return O.add(n),n}function I(e,t,r){var n=new Map;return{get:function(o){var a=Reflect.get(e,o,e);if("string"!=typeof o)return a;if(!d(a)&&!b(a))return a;if(P(a))return a;var i=n.get(o);if(i&&i.value===a)return i.out;var c=k(t,o),u=c.leafs,l=c.deeper;if(!(u.length>0||l.length>0)&&(!d(a)||function(e){if(Array.isArray(e))return!0;var t=Object.getPrototypeOf(e);return t===Object.prototype||null===t}(e)))return a;var s=a;return d(a)?s=A(a,u,l,{proxy:r(),target:e}):l.length>0&&(s=E(a,l)),n.set(o,{value:a,out:s}),s}}}function A(e,t,r,n){var o=function(){return r.filter(function(t){return!g(e,t.rest[0])})},a=new Map,i=new Proxy(e,{get:function(e,t){var n=Reflect.get(e,t,e);if("string"!=typeof t||!h(e,t))return n;if(!g(e,t))return n;var o=k(r,t),c=o.leafs,u=o.deeper;if(0===c.length&&0===u.length)return n;if(P(n))return n;var l=a.get(t);if(l&&l.value===n)return l.out;var s=n;return d(n)?s=A(n,c,u,{proxy:i,target:e}):b(n)&&u.length>0&&(s=E(n,u)),a.set(t,{value:n,out:s}),s},set:function(e,t,r){return Reflect.set(e,t,r,e)},apply:function(e,r,a){j(t,a);var i=!n||r!==n.proxy&&void 0!==r?r:n.target;return S(Reflect.apply(e,i,a),o())},construct:function(e,r,n){j(t,r);var a=Reflect.construct(e,r,n===i?e:n),c=S(a,o());return b(c)||d(c)?c:a}});return O.add(i),i}return{env:R(e,a),calls:n,unresolved:o}}(t,r.paths,r.record).env,o=new Set,a=!0,i=!1,c=void 0;try{for(var l,s=r.paths[Symbol.iterator]();!(a=(l=s.next()).done);a=!0){var f=l.value,_=v(f)[0];if(void 0!==_){var p=t[_];null!==p&&"object"==(void 0===p?"undefined":_type_of(p))&&o.add(_)}}}catch(e){i=!0,c=e}finally{try{a||null==s.return||s.return()}finally{if(i)throw c}}var y=Array.from(o,function(e){return[e,n[e]]}),w=!0,O=!1,j=void 0;try{for(var S,P=y[Symbol.iterator]();!(w=(S=P.next()).done);w=!0){var k=_sliced_to_array(S.value,2),E=k[0],R=k[1];t[E]=R}}catch(e){O=!0,j=e}finally{try{w||null==P.return||P.return()}finally{if(O)throw j}}}return t},O=function(e,t,r){return _async_to_generator(function(){var n,o,a,i,c,u,l,s,f,_,p;return _ts_generator(this,function(v){switch(v.label){case 0:if(n={},!e)return[2,n];o=!0,a=!1,i=void 0,v.label=1;case 1:v.trys.push([1,6,7,8]),c=Object.entries(e)[Symbol.iterator](),v.label=2;case 2:return(o=(u=c.next()).done)?[3,5]:(l=_sliced_to_array(u.value,2),s=l[0],f=l[1],[4,y(t,f,{collector:r})]);case 3:_=v.sent(),n[s]=null==_?void 0:String(_),v.label=4;case 4:return o=!0,[3,2];case 5:return[3,8];case 6:return p=v.sent(),a=!0,i=p,[3,8];case 7:try{o||null==c.return||c.return()}finally{if(a)throw i}return[7];case 8:return[2,n]}})})()},j=function(e){return P(e).map(function(e){var t=_sliced_to_array(e,2),r=t[0],n=t[1];return void 0===n?["deleteCustomDimension",Number(r)]:["setCustomDimension",Number(r),n]})},S=function(e,t){var r=j(_object_spread({},e,t));if(0===Object.keys(t).length)return{before:r,after:[]};var n={},o=!0,a=!1,i=void 0;try{for(var c,u=Object.entries(t)[Symbol.iterator]();!(o=(c=u.next()).done);o=!0){var l=_sliced_to_array(c.value,2),s=l[0],f=l[1];Object.prototype.hasOwnProperty.call(e,s)||void 0===f||(n[s]=void 0)}}catch(e){a=!0,i=e}finally{try{o||null==u.return||u.return()}finally{if(a)throw i}}return{before:r,after:_to_consumable_array(j(n)).concat(_to_consumable_array(j(e)))}},P=function(e){return Object.entries(e).filter(function(e){var t=_sliced_to_array(e,1)[0];return L.test(t)}).sort(function(e,t){var r=_sliced_to_array(e,1)[0],n=_sliced_to_array(t,1)[0];return Number(r)-Number(n)})},k=function(e,t,r,n){if(!$.has(t)&&$.size<U)return $.add(t),void e.warn(r,n);e.debug(r,n)},E=Object.defineProperty,R=Object.getOwnPropertyDescriptor,x=Object.getOwnPropertyNames,I=Object.prototype.hasOwnProperty,A={};!function(e,t){for(var r in t)E(e,r,{get:t[r],enumerable:!0})}(A,{DestinationMatomo:function(){return z},default:function(){return Q},destinationMatomo:function(){return H}});var D=Object.defineProperty,T=function(e,t){for(var r in t)D(e,r,{get:t[r],enumerable:!0})};T({},{stepId:function(){return e}});T({},{getDestination:function(){return t}});T({},{Level:function(){return M}});var N,M=((N=M||{})[N.ERROR=0]="ERROR",N[N.WARN=1]="WARN",N[N.INFO=2]="INFO",N[N.DEBUG=3]="DEBUG",N);T({},{getTransformer:function(){return r}});T({},{getSource:function(){return n}});function C(e){for(var t=arguments.length>2?arguments[2]:void 0,r=(arguments.length>1&&void 0!==arguments[1]?arguments[1]:"").split("."),n=e,o=0;o<r.length;o++){var a=r[o];if("*"===a&&i(n)){var u=r.slice(o+1).join("."),s=[],f=!0,_=!1,p=void 0;try{for(var y,v=n[Symbol.iterator]();!(f=(y=v.next()).done);f=!0){var d=C(y.value,u,t);s.push(d)}}catch(e){_=!0,p=e}finally{try{f||null==v.return||v.return()}finally{if(_)throw p}}return s}if(void 0===(n=l(n)||i(n)?n[a]:void 0))break}return c(n)?n:t}function B(e){return function(e){return"boolean"==typeof e}(e)||s(e)||function(e){return"number"==typeof e&&!Number.isNaN(e)}(e)||!c(e)||i(e)&&e.every(B)||l(e)&&Object.values(e).every(B)}T({},{getStore:function(){return o},getStoreValue:function(){return a}});var q=function(){function e(t,r){var n;return _class_call_check(this,e),(n=_call_super(this,e,[t,r])).name="FatalError",Object.setPrototypeOf(n,e.prototype),n}return _inherits(e,_wrap_native_super(Error)),e}();function G(e,t,r){return _async_to_generator(function(){return _ts_generator(this,function(n){return[2,(i(t)?t:[t]).reduce(function(t,n){return _async_to_generator(function(){var o,a,u,l,y,v,d,b,g,h,m,w,O,j,S,P,k,E,R,x,I,A,D,T,N;return _ts_generator(this,function(M){switch(M.label){case 0:return[4,t];case 1:return(o=M.sent())?[2,o]:(a=s(n)?{key:n}:n,Object.keys(a).length?(u=a.condition,l=a.consent,y=a.fn,v=a.key,d=a.loop,b=a.map,g=a.set,h=a.validate,m=a.value,w=_object_spread_props(_object_spread({},r),{mapping:n}),(O=u)?[4,_(u,function(e){if(_instanceof(e,q))throw e;return w.logger.error("mapping condition failed",{event:w.event,error:e}),!1})(e,w)]:[3,3]):[2]);case 2:O=!M.sent(),M.label=3;case 3:return O?[2]:l&&!function(e){var t=_object_spread({},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},arguments.length>2&&void 0!==arguments[2]?arguments[2]:{}),r={},n=!e||0===Object.keys(e).length;return Object.keys(t).forEach(function(o){t[o]&&(r[o]=!0,e&&e[o]&&(n=!0))}),!!n&&r}(l,w.consent)?[2,m]:(j=c(m)?m:e,d?(S=_sliced_to_array(d,2),P=S[0],k=S[1],"this"!==P?[3,4]:(R=[e],[3,6])):[3,10]);case 4:return[4,p(e,P,w)];case 5:R=M.sent(),M.label=6;case 6:return i(E=R)?[4,Promise.all(E.map(function(e){return c(e)?p(e,k,w):void 0}))]:[3,8];case 7:return x=M.sent().filter(c),[3,9];case 8:x=void 0,M.label=9;case 9:return j=x,[3,21];case 10:return b?[4,Object.entries(b).reduce(function(t,r){var n=_sliced_to_array(r,2),o=n[0],a=n[1];return _async_to_generator(function(){var r,n;return _ts_generator(this,function(i){switch(i.label){case 0:return[4,t];case 1:return r=i.sent(),[4,p(e,a,w)];case 2:return n=i.sent(),[2,(c(n)&&(r[o]=n),r)]}})})()},Promise.resolve({}))]:[3,12];case 11:return j=M.sent(),[3,20];case 12:return g?[4,Promise.all(g.map(function(t){return G(e,t,w)}))]:[3,14];case 13:return I=j=M.sent(),[3,19];case 14:return v?(A=j=C(e,v,m),[3,18]):[3,15];case 15:return(D=y)?[4,_(y,function(e){if(_instanceof(e,q))throw e;w.logger.error("mapping fn failed",{event:w.event,error:e})})(e,w)]:[3,17];case 16:D=j=M.sent(),M.label=17;case 17:A=D,M.label=18;case 18:I=A,M.label=19;case 19:M.label=20;case 20:M.label=21;case 21:return(T=h)?[4,_(h,function(e){if(_instanceof(e,q))throw e;return w.logger.error("mapping validate failed",{event:w.event,error:e}),!1})(j,w)]:[3,23];case 22:T=!M.sent(),M.label=23;case 23:return T&&(j=void 0),N=f(j),[2,c(N)?N:f(m)]}})})()},Promise.resolve(void 0))]})})()}var V,W="observe",K="call:",F=["name","length","prototype","arguments","caller"],L=/^\d+$/,U=1e3,$=new Set,z={},H={type:"matomo",config:{},init:function(e){var t=e.config,r=e.env,n=e.logger,o=w(r).window,a=t.settings,i=void 0===a?{}:a,c=t.loadScript,u=i.siteId,l=i.url;o._paq=o._paq||[];var s=o._paq,f=function(e){s.push(e)};if(c){if(!u)return n.throw("Config settings siteId missing");if(!l)return n.throw("Config settings url missing");var _=function(e){return"".concat(e.replace(/\/+$/,""),"/")}(l);!function(e,t){var r=w(t).document,n=r.createElement("script");n.type="text/javascript",n.src=e+"matomo.js",n.async=!0,n.defer=!0,r.head.appendChild(n)}(_,r),f(["setTrackerUrl",_+"matomo.php"]),f(["setSiteId",u])}i.disableCookies&&f(["disableCookies"]),!1!==i.enableLinkTracking&&f(["enableLinkTracking"]),i.enableHeartBeatTimer&&f(["enableHeartBeatTimer",i.enableHeartBeatTimer])},push:function(e,t){return _async_to_generator(function(e,t){var r,n,o,a,c,u,l,s,f,_,p,v,d,b,g,h,m,j,P,E,R,x,I,A,D,T;return _ts_generator(this,function(N){switch(N.label){case 0:return r=t.config,n=t.rule,o=void 0===n?{}:n,a=t.data,c=t.env,u=t.collector,l=t.logger,s=t.id,f=w(c),_=f.window,(p=_._paq)?(v=function(e){p.push(e)},d=r.settings||{},b=o.settings||{},g=b.goalId,h=i(a)?a:[a],m=("number"==typeof(M=g)?Number.isInteger(M)&&M>0:"string"==typeof M&&J.test(M))?g:void 0,void 0!==g&&void 0===m&&k(l,"".concat(s,"|").concat(e.name,"|invalid goalId"),'Goal of event "'.concat(e.name,'" skipped: goalId ').concat(JSON.stringify(g)," is not a positive integer"),{event:e.name,reason:"invalid goalId"}),b.siteSearch?(j=["trackSiteSearch"].concat(_to_consumable_array(h)),[3,9]):[3,1]):(l.warn("Matomo _paq queue missing, init() not run"),[2]);case 1:return b.contentImpression?(j=["trackContentImpression"].concat(_to_consumable_array(h)),[3,9]):[3,2];case 2:return b.contentInteraction?(j=["trackContentInteraction"].concat(_to_consumable_array(h)),[3,9]):[3,3];case 3:return o.name?(j=[e.name].concat(_to_consumable_array(h)),[3,9]):[3,4];case 4:return"page view"!==e.name?[3,8]:void 0!==o.data?[3,6]:(E=["trackPageView"],[4,y(e,"data.title",{collector:u})]);case 5:return P=E.concat([N.sent()]),[3,7];case 6:P=["trackPageView"].concat(_to_consumable_array(h)),N.label=7;case 7:return j=P,[3,9];case 8:if(void 0===m)return k(l,"".concat(s,"|").concat(e.name,"|unmapped"),'Event "'.concat(e.name,'" skipped: no rule name, tracking flag or goal, and not a page view'),{event:e.name,reason:"unmapped"}),[2];N.label=9;case 9:return void 0===m||void 0===b.goalValue?[3,11]:[4,y(e,b.goalValue,{collector:u})];case 10:return x=N.sent(),[3,12];case 11:x=void 0,N.label=12;case 12:return R=x,[4,O(d.customDimensions,e,u)];case 13:return T=[N.sent()],[4,O(b.customDimensions,e,u)];case 14:return I=S.apply(void 0,T.concat([N.sent()])),A=I.before,D=I.after,A.forEach(v),j&&v(j),void 0!==m&&v(["trackGoal",m,R]),D.forEach(v),[2]}var M})}).apply(this,arguments)}},J=/^[1-9]\d*$/,Q=H;return V=A,function(e,t,r,n){if(t&&"object"===(void 0===t?"undefined":_type_of(t))||"function"==typeof t){var o=!0,a=!1,i=void 0;try{for(var c,u=function(){var o=c.value;I.call(e,o)||o===r||E(e,o,{get:function(){return t[o]},enumerable:!(n=R(t,o))||n.enumerable})},l=x(t)[Symbol.iterator]();!(o=(c=l.next()).done);o=!0)u()}catch(e){a=!0,i=e}finally{try{o||null==l.return||l.return()}finally{if(a)throw i}}}return e}(E({},"__esModule",{value:!0}),V)}();
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$meta": {
3
3
  "package": "@walkeros/web-destination-matomo",
4
- "version": "4.7.2",
4
+ "version": "4.8.0-next-1791496487198",
5
5
  "type": "destination",
6
6
  "platform": [
7
7
  "web"
@@ -505,7 +505,7 @@
505
505
  "consent": {
506
506
  "functional": true
507
507
  },
508
- "id": "7a4349b3f95f68f5",
508
+ "id": "d6713ca043073f40",
509
509
  "trigger": "load",
510
510
  "entity": "page",
511
511
  "action": "view",
@@ -608,7 +608,7 @@
608
608
  "consent": {
609
609
  "functional": true
610
610
  },
611
- "id": "668fa4b2b68ba1f0",
611
+ "id": "92d254a233d40928",
612
612
  "trigger": "visible",
613
613
  "entity": "promotion",
614
614
  "action": "visible",
@@ -653,8 +653,9 @@
653
653
  ]
654
654
  },
655
655
  "ecommerceCartUpdate": {
656
+ "public": false,
656
657
  "title": "Cart update",
657
- "description": "A cart view calls Matomo trackEcommerceCartUpdate with the nested product items and cart total.",
658
+ "description": "Test fixture for nested product mapping, not a valid Matomo call: Matomo takes trackEcommerceCartUpdate(grandTotal) after an addEcommerceItem call per product.",
658
659
  "in": {
659
660
  "name": "cart view",
660
661
  "data": {
@@ -701,7 +702,7 @@
701
702
  "consent": {
702
703
  "functional": true
703
704
  },
704
- "id": "524b3c3e4a17e030",
705
+ "id": "ce30d9f8c271dfad",
705
706
  "trigger": "load",
706
707
  "entity": "cart",
707
708
  "action": "view",
@@ -723,7 +724,7 @@
723
724
  "nested",
724
725
  {
725
726
  "condition": {
726
- "$code": "e=>q(e)&&\"product\"===e.entity"
727
+ "$code": "e=>\"object\"==typeof e&&null!==e&&\"entity\"in e&&\"product\"===e.entity"
727
728
  },
728
729
  "map": {
729
730
  "sku": "data.id",
@@ -763,8 +764,9 @@
763
764
  ]
764
765
  },
765
766
  "ecommerceOrder": {
767
+ "public": false,
766
768
  "title": "Ecommerce order",
767
- "description": "A completed order calls Matomo trackEcommerceOrder with line items and order totals.",
769
+ "description": "Test fixture for nested product mapping, not a valid Matomo call: Matomo records an order's products only after an addEcommerceItem call per product.",
768
770
  "in": {
769
771
  "name": "order complete",
770
772
  "data": {
@@ -842,7 +844,7 @@
842
844
  "consent": {
843
845
  "functional": true
844
846
  },
845
- "id": "9a1513236db9b3f9",
847
+ "id": "dac46a7e42266a10",
846
848
  "trigger": "load",
847
849
  "entity": "order",
848
850
  "action": "complete",
@@ -864,7 +866,7 @@
864
866
  "nested",
865
867
  {
866
868
  "condition": {
867
- "$code": "e=>q(e)&&\"product\"===e.entity"
869
+ "$code": "e=>\"object\"==typeof e&&null!==e&&\"entity\"in e&&\"product\"===e.entity"
868
870
  },
869
871
  "map": {
870
872
  "sku": "data.id",
@@ -960,7 +962,7 @@
960
962
  "consent": {
961
963
  "functional": true
962
964
  },
963
- "id": "e199612be29e650b",
965
+ "id": "7729fef29004e385",
964
966
  "trigger": "visible",
965
967
  "entity": "promotion",
966
968
  "action": "visible",
@@ -1077,7 +1079,7 @@
1077
1079
  "consent": {
1078
1080
  "functional": true
1079
1081
  },
1080
- "id": "470ec9668a6eb173",
1082
+ "id": "9369fce0defb3c4c",
1081
1083
  "trigger": "load",
1082
1084
  "entity": "page",
1083
1085
  "action": "view",
@@ -1144,7 +1146,7 @@
1144
1146
  "consent": {
1145
1147
  "functional": true
1146
1148
  },
1147
- "id": "a2755b4b53383b31",
1149
+ "id": "96b75e550eeab6cb",
1148
1150
  "trigger": "load",
1149
1151
  "entity": "page",
1150
1152
  "action": "view",
@@ -1181,8 +1183,9 @@
1181
1183
  ]
1182
1184
  },
1183
1185
  "productDetailView": {
1186
+ "public": false,
1184
1187
  "title": "Product detail view",
1185
- "description": "A product view fires Matomo ecommerceProductDetailView with a single-product array.",
1188
+ "description": "Test fixture for a single-product mapping, not a valid Matomo call: Matomo tracks a product view with setEcommerceView followed by trackPageView.",
1186
1189
  "in": {
1187
1190
  "name": "product view",
1188
1191
  "data": {
@@ -1213,7 +1216,7 @@
1213
1216
  "consent": {
1214
1217
  "functional": true
1215
1218
  },
1216
- "id": "438f500006f29924",
1219
+ "id": "8cb8da9f9d1d860c",
1217
1220
  "trigger": "load",
1218
1221
  "entity": "product",
1219
1222
  "action": "view",
@@ -1302,7 +1305,7 @@
1302
1305
  "consent": {
1303
1306
  "functional": true
1304
1307
  },
1305
- "id": "eaf3946c76e82555",
1308
+ "id": "8eb145e25ab9fd96",
1306
1309
  "trigger": "test",
1307
1310
  "entity": "search",
1308
1311
  "action": "submit",
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@walkeros/web-destination-matomo",
3
3
  "description": "Matomo web destination for walkerOS",
4
- "version": "4.7.2",
4
+ "version": "4.8.0-next-1791496487198",
5
5
  "license": "MIT",
6
6
  "main": "./dist/index.js",
7
7
  "module": "./dist/index.mjs",
@@ -38,11 +38,11 @@
38
38
  "update": "npx npm-check-updates -u && npm update"
39
39
  },
40
40
  "dependencies": {
41
- "@walkeros/core": "4.7.2",
42
- "@walkeros/web-core": "4.7.2"
41
+ "@walkeros/core": "4.8.0-next-1791496487198",
42
+ "@walkeros/web-core": "4.8.0-next-1791496487198"
43
43
  },
44
44
  "devDependencies": {
45
- "@walkeros/collector": "4.7.2"
45
+ "@walkeros/collector": "4.8.0-next-1791496487198"
46
46
  },
47
47
  "repository": {
48
48
  "url": "git+https://github.com/elbwalker/walkerOS.git",