{"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 { z } from '@walkeros/core/dev';\n\nexport const SettingsSchema = z.object({\n  siteId: z.string().min(1).describe('Matomo Site ID (like 1, 2, etc.)'),\n  url: z\n    .string()\n    .url()\n    .describe(\n      'Base URL of your Matomo instance (like https://analytics.example.com/ or https://yourname.matomo.cloud/)',\n    ),\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: z\n    .record(z.string(), z.string())\n    .optional()\n    .describe(\n      'Custom dimension ID to property path mapping applied to all events (like { \"1\": \"data.userType\" })',\n    ),\n});\n\nexport type Settings = z.infer<typeof SettingsSchema>;\n","import { z } from '@walkeros/core/dev';\n\nexport const MappingSchema = z.object({\n  goalId: z\n    .string()\n    .optional()\n    .describe('Goal ID to track a conversion alongside this event (like 1)'),\n  goalValue: z\n    .string()\n    .optional()\n    .describe('Property path for goal revenue value (like data.revenue)'),\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: z\n    .record(z.string(), z.string())\n    .optional()\n    .describe(\n      'Per-event custom dimension ID to property path mapping (like { \"3\": \"data.category\" })',\n    ),\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: undefined as unknown as Env['window']['_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\nexport const push: Env = {\n  window: {\n    _paq: [] as unknown[],\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 { getEvent, isObject } from '@walkeros/core';\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: Flow.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: Flow.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 * Custom event tracking with goal conversion.\n * Uses trackEvent with mapped name, followed by trackGoal.\n */\nexport const customEvent: Flow.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: 'goal_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', 'goal_1', undefined]],\n  ],\n};\n\n/**\n * Ecommerce order -- one call with cart items array and order totals.\n */\nexport const ecommerceOrder: Flow.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: Flow.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: Flow.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: Flow.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: Flow.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"],"mappings":"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","names":["z","init"]}