{"version":3,"sources":["../src/lib/walker.ts","../src/lib/trigger.ts","../src/lib/state.ts","../src/lib/session.ts","../src/lib/run.ts","../src/lib/hooks.ts","../src/lib/handle.ts","../src/lib/push.ts","../src/lib/destination.ts","../src/types/destination.ts","../src/types/elb.ts","../src/types/source.ts","../src/types/walker.ts","../src/index.ts"],"sourcesContent":["import type { Walker } from '../types';\nimport type { WalkerOS } from '@elbwalker/types';\nimport { Const, assign, castValue, isArray, trim } from '@elbwalker/utils';\nimport { getAttribute } from '@elbwalker/utils/web';\nexport function getElbAttributeName(\n  prefix: string,\n  name?: string,\n  isProperty = true,\n): string {\n  // separate dynamic properties from walker Const.Commands\n  const separator = isProperty ? '-' : '';\n  name = name != undefined ? separator + name : '';\n  return prefix + name;\n}\n\nexport function getElbValues(\n  prefix: string,\n  element: Element,\n  name: string,\n  isProperty = true,\n): WalkerOS.Properties {\n  const attributeValue =\n    getAttribute(element, getElbAttributeName(prefix, name, isProperty)) || '';\n\n  const elbValues = splitAttribute(attributeValue).reduce((values, str) => {\n    let [key, val] = splitKeyVal(str);\n\n    if (!key) return values;\n\n    // Handle keys without value\n    if (!val) {\n      // Manually remove the : from key on empty values\n      if (key.endsWith(':')) key = key.slice(0, -1);\n      val = '';\n    }\n\n    // Dynamic values\n    if (val.startsWith('#')) {\n      val = val.slice(1); // Remove # symbol\n      try {\n        // Read property value from element\n        let dynamicValue = (element as Element)[val as keyof Element];\n        if (!dynamicValue && val === 'selected') {\n          // Try to read selected value with chance of error\n          dynamicValue = (element as HTMLSelectElement).options[\n            (element as HTMLSelectElement).selectedIndex\n          ].text;\n        }\n\n        val = String(dynamicValue);\n      } catch (error) {\n        val = '';\n      }\n    }\n\n    if (key.endsWith('[]')) {\n      key = key.slice(0, -2); // Remove [] symbol\n      if (!isArray(values[key])) values[key] = [];\n      (values[key] as WalkerOS.PropertyType[]).push(castValue(val));\n    } else {\n      values[key] = castValue(val);\n    }\n\n    return values;\n  }, {} as WalkerOS.Properties);\n\n  return elbValues;\n}\n\nexport function getAllEvents(\n  scope: Element = document.body,\n  prefix: string = Const.Commands.Prefix,\n): Walker.Events {\n  let events: Walker.Events = [];\n  const action = Const.Commands.Action;\n\n  queryAll(scope, `[${getElbAttributeName(prefix, action, false)}]`, (elem) => {\n    Object.keys(getElbValues(prefix, elem, action, false)).forEach(\n      (trigger) => {\n        events = events.concat(getEvents(elem, trigger, prefix));\n      },\n    );\n  });\n\n  return events;\n}\n\nexport function getEvents(\n  target: Element,\n  trigger: Walker.Trigger,\n  prefix: string = Const.Commands.Prefix,\n): Walker.Events {\n  const events: Walker.Events = [];\n\n  // Check for an action (data-elbaction) attribute and resolve it\n  const actions = resolveAttributes(prefix, target, trigger);\n\n  // Stop if there's no valid action combo\n  if (!actions) return events;\n\n  actions.forEach((triggerAction) => {\n    const filter = splitAttribute(triggerAction.actionParams || '', ',').reduce(\n      (filter, param) => {\n        filter[trim(param)] = true;\n        return filter;\n      },\n      {} as Walker.Filter,\n    );\n\n    // Get the entities with their properties\n    const entities = getEntities(prefix, target, filter);\n\n    // Use page as default entity if no one was set\n    if (!entities.length) {\n      const type = 'page';\n      // Only use explicit page properties and ignore generic properties\n      const entitySelector = `[${getElbAttributeName(prefix, type)}]`;\n\n      // Get matching properties from the element and its parents\n      const [data, context] = getThisAndParentProperties(\n        target,\n        entitySelector,\n        prefix,\n        type,\n      );\n\n      entities.push({\n        type, // page\n        data, // Consider only upper data\n        nested: [], // Skip nested in this faked page case\n        context,\n      });\n    }\n\n    // Return a list of all full events\n    entities.forEach((entity) => {\n      events.push({\n        entity: entity.type,\n        action: triggerAction.action,\n        data: entity.data,\n        trigger,\n        context: entity.context,\n        nested: entity.nested,\n      });\n    });\n  });\n\n  return events;\n}\n\nexport function getGlobals(\n  prefix: string = Const.Commands.Prefix,\n): WalkerOS.Properties {\n  const globalsName = getElbAttributeName(\n    prefix,\n    Const.Commands.Globals,\n    false,\n  );\n  const globalSelector = `[${globalsName}]`;\n  let values = {};\n\n  queryAll(document, globalSelector, (element) => {\n    values = assign(\n      values,\n      getElbValues(prefix, element, Const.Commands.Globals, false),\n    );\n  });\n\n  return values;\n}\n\nexport function getPageViewData(\n  prefix: string,\n): [WalkerOS.Properties, WalkerOS.OrderedProperties] {\n  // static page view\n  const loc = window.location;\n  const page = 'page';\n  const [data, context] = getThisAndParentProperties(\n    document.body,\n    `[${getElbAttributeName(prefix, page)}]`,\n    prefix,\n    page,\n  );\n  data.domain = loc.hostname;\n  data.title = document.title;\n  data.referrer = document.referrer;\n\n  if (loc.search) data.search = loc.search;\n  if (loc.hash) data.hash = loc.hash;\n\n  // @TODO get all nested entities\n  return [data, context];\n}\n\nexport function getTriggerActions(str: string): Walker.TriggersActionGroups {\n  const values: Walker.TriggersActionGroups = {};\n\n  const attributes = splitAttribute(str);\n\n  attributes.forEach((str) => {\n    const [triggerAttr, actionAttr] = splitKeyVal(str);\n    const [trigger, triggerParams] = parseAttribute(triggerAttr);\n\n    if (!trigger) return;\n\n    let [action, actionParams] = parseAttribute(actionAttr || '');\n\n    // Shortcut if trigger and action are the same (click:click)\n    action = action || trigger;\n\n    if (!values[trigger]) values[trigger] = [];\n\n    values[trigger].push({ trigger, triggerParams, action, actionParams });\n  });\n\n  return values;\n}\n\nexport function getEntities(\n  prefix: string,\n  target: Element,\n  filter?: Walker.Filter,\n): WalkerOS.Entities {\n  const entities: WalkerOS.Entities = [];\n  let element = target as Node['parentElement'];\n\n  // Unset empty filter object\n  filter = Object.keys(filter || {}).length !== 0 ? filter : undefined;\n\n  while (element) {\n    const entity = getEntity(prefix, element, target, filter);\n    if (entity) entities.push(entity);\n\n    element = getParent(prefix, element);\n  }\n\n  return entities;\n}\n\nfunction getEntity(\n  prefix: string,\n  element: Element,\n  origin?: Element,\n  filter?: Walker.Filter,\n): WalkerOS.Entity | null {\n  const type = getAttribute(element, getElbAttributeName(prefix));\n\n  // It's not a (valid) entity element or should be filtered\n  if (!type || (filter && !filter[type])) return null;\n\n  const scopeElems = [element]; // All related elements\n  const dataSelector = `[${getElbAttributeName(\n    prefix,\n    type,\n  )}],[${getElbAttributeName(prefix, '')}]`; // [data-elb-entity,data-elb-]\n  const linkName = getElbAttributeName(prefix, Const.Commands.Link, false); // data-elblink\n\n  let data: WalkerOS.Properties = {};\n  const nested: WalkerOS.Entities = [];\n  const [parentData, context] = getThisAndParentProperties(\n    origin || element,\n    dataSelector,\n    prefix,\n    type,\n  );\n\n  // Add linked elements (data-elblink)\n  queryAll(element, `[${linkName}]`, (link) => {\n    const [linkId, linkState] = splitKeyVal(getAttribute(link, linkName));\n\n    // Get all linked child elements if link is a parent\n    if (linkState === 'parent')\n      queryAll(document.body, `[${linkName}=\"${linkId}:child\"]`, (wormhole) => {\n        scopeElems.push(wormhole);\n\n        // A linked child can also be an entity\n        const nestedEntity = getEntity(prefix, wormhole);\n        if (nestedEntity) nested.push(nestedEntity);\n      });\n  });\n\n  // Get all property elements including linked elements\n  const propertyElems: Array<Element> = [];\n  scopeElems.forEach((elem) => {\n    // Also check for property on same level\n    if (elem.matches(dataSelector)) propertyElems.push(elem);\n\n    queryAll(elem, dataSelector, (elem) => propertyElems.push(elem));\n  });\n\n  // Get properties\n  let genericData: WalkerOS.Properties = {};\n  propertyElems.forEach((child) => {\n    // Eventually override closer properties\n    genericData = assign(genericData, getElbValues(prefix, child, ''));\n    data = assign(data, getElbValues(prefix, child, type));\n  });\n\n  // Merge properties with the hierarchy generic > data > parent\n  data = assign(assign(genericData, data), parentData);\n\n  // Get nested entities\n  scopeElems.forEach((elem) => {\n    queryAll(\n      elem,\n      `[${getElbAttributeName(prefix)}]`,\n      (nestedEntityElement) => {\n        const nestedEntity = getEntity(prefix, nestedEntityElement);\n        if (nestedEntity) nested.push(nestedEntity);\n      },\n    );\n  });\n\n  return { type, data, context, nested };\n}\n\nfunction getParent(prefix: string, elem: HTMLElement): HTMLElement | null {\n  const linkName = getElbAttributeName(prefix, Const.Commands.Link, false); // data-elblink\n\n  // Link\n  if (elem.matches(`[${linkName}]`)) {\n    const [linkId, linkState] = splitKeyVal(getAttribute(elem, linkName));\n    if (linkState === 'child') {\n      // If current element is a child-link jump to the parent\n      return document.querySelector(`[${linkName}=\"${linkId}:parent\"]`);\n    }\n  }\n\n  // Shadow DOM traversal\n  if (\n    !elem.parentElement &&\n    elem.getRootNode &&\n    elem.getRootNode() instanceof ShadowRoot\n  ) {\n    return (elem.getRootNode() as ShadowRoot).host as HTMLElement;\n  }\n\n  return elem.parentElement;\n}\n\nfunction getThisAndParentProperties(\n  element: Element,\n  entitySelector: string,\n  prefix: string,\n  type: string,\n): [data: WalkerOS.Properties, context: WalkerOS.OrderedProperties] {\n  let data: WalkerOS.Properties = {};\n  const context: WalkerOS.OrderedProperties = {};\n  let parent = element as Node['parentElement'];\n  const contextSelector = `[${getElbAttributeName(\n    prefix,\n    Const.Commands.Context,\n    false,\n  )}]`;\n\n  // Get all bubbling-up properties with decreasing priority\n  let contextI = 0; // Context counter\n  while (parent) {\n    // Properties\n    if (parent.matches(entitySelector)) {\n      // Get higher properties first\n      data = assign(getElbValues(prefix, parent, ''), data); // Generic\n      data = assign(getElbValues(prefix, parent, type), data); // Explicit\n    }\n\n    // Context\n    if (parent.matches(contextSelector)) {\n      Object.entries(\n        getElbValues(prefix, parent, Const.Commands.Context, false),\n      ).forEach(([key, val]) => {\n        // Don't override context with same but higher key\n        if (val && !context[key]) context[key] = [val, contextI];\n      });\n\n      // Increase context counter with each parent level\n      ++contextI;\n    }\n\n    parent = getParent(prefix, parent);\n  }\n\n  return [data, context];\n}\n\nfunction queryAll(\n  scope: Document | Element,\n  selector: string,\n  fn: (element: Element) => void,\n): void {\n  const elements = scope.querySelectorAll(selector);\n  elements.forEach(fn);\n}\n\nfunction resolveAttributes(\n  prefix: string,\n  target: Element,\n  trigger: Walker.Trigger,\n): Walker.TriggerActions {\n  let element = target as Node['parentElement'];\n\n  while (element) {\n    const attribute = getAttribute(\n      element,\n      getElbAttributeName(prefix, Const.Commands.Action, false),\n    );\n\n    // Get action string related to trigger\n    const triggerActions = getTriggerActions(attribute);\n\n    // Action found on element or is not a click trigger\n    // @TODO aggregate all click triggers, too\n    if (triggerActions[trigger] || trigger !== 'click')\n      return triggerActions[trigger];\n\n    element = getParent(prefix, element);\n  }\n\n  return [];\n}\n\nfunction splitAttribute(str: string, separator = ';'): Walker.Attributes {\n  const values: Walker.Attributes = [];\n\n  if (!str) return values;\n\n  const reg = new RegExp(`(?:[^${separator}']+|'[^']*')+`, 'ig');\n  return str.match(reg) || [];\n}\n\nfunction splitKeyVal(str: string): Walker.KeyVal {\n  const [key, value] = str.split(/:(.+)/, 2);\n  return [trim(key), trim(value)];\n}\n\nfunction parseAttribute(str: string): Walker.KeyVal {\n  // action(a, b, c)\n  const [key, value] = str.split('(', 2);\n  const param = value ? value.slice(0, -1) : ''; // Remove the )\n  // key = 'action'\n  // param = 'a, b, c'\n  return [key, param];\n}\n","import { Const, onApply, throttle, tryCatch } from '@elbwalker/utils';\nimport { elb as elbOrg, getAttribute, isVisible } from '@elbwalker/utils/web';\nimport { Walker, SourceWalkerjs, Elb } from '../types';\nimport {\n  getElbAttributeName,\n  getEvents,\n  getPageViewData,\n  getTriggerActions,\n} from './walker';\n\nlet visibleObserver: IntersectionObserver | undefined;\nlet scrollElements: Walker.ScrollElements = [];\nlet scrollListener: EventListenerOrEventListenerObject | undefined;\n\nexport const createElb: (customLayer?: Elb.Layer) => Elb.Fn = (\n  customLayer?,\n) => {\n  return (\n    customLayer\n      ? function () {\n          customLayer.push(arguments);\n        }\n      : elbOrg\n  ) as Elb.Fn;\n};\n\nexport const Trigger: { [key: string]: Walker.Trigger } = {\n  Click: 'click',\n  Custom: 'custom',\n  Hover: 'hover',\n  Load: 'load',\n  Pulse: 'pulse',\n  Scroll: 'scroll',\n  Submit: 'submit',\n  Visible: 'visible',\n  Wait: 'wait',\n} as const;\n\nexport async function ready<T extends (...args: never[]) => R, R>(\n  instance: SourceWalkerjs.Instance,\n  fn: T,\n  ...args: Parameters<T>\n): Promise<R | undefined> {\n  const readyFn = () => {\n    const result = fn(...args);\n    onApply(instance, 'ready');\n    return result;\n  };\n\n  if (document.readyState !== 'loading') {\n    return readyFn();\n  } else {\n    document.addEventListener('DOMContentLoaded', readyFn);\n  }\n}\n\n// Called for each new run to setup triggers\nexport function load(instance: SourceWalkerjs.Instance) {\n  const { pageview, prefix } = instance.config;\n  // Trigger static page view if enabled\n  if (pageview) {\n    const [data, context] = getPageViewData(prefix);\n    instance.push('page view', data, Trigger.Load, context);\n  }\n\n  initScopeTrigger(instance);\n}\n\nexport function initGlobalTrigger(instance: SourceWalkerjs.Instance): void {\n  document.addEventListener(\n    'click',\n    tryCatch(function (this: Document, ev: MouseEvent) {\n      triggerClick.call(this, instance, ev);\n    }),\n  );\n  document.addEventListener(\n    'submit',\n    tryCatch(function (this: Document, ev: SubmitEvent) {\n      triggerSubmit.call(this, instance, ev);\n    }),\n  );\n}\n\nexport function initScopeTrigger(\n  instance: SourceWalkerjs.Instance,\n  scope: Elb.Scope = document,\n) {\n  // Reset all scroll events @TODO check if it's right here\n  scrollElements = [];\n\n  // Load the visible observer\n  visibleObserver =\n    visibleObserver ||\n    tryCatch(observerVisible, () => {\n      return undefined;\n    })(instance, 1000);\n\n  // default data-elbaction\n  const selectorAction = getElbAttributeName(\n    instance.config.prefix,\n    Const.Commands.Action,\n    false,\n  );\n\n  if (scope === document) {\n    // Disconnect previous on full loads\n    visibleObserver && visibleObserver.disconnect();\n  } else {\n    // Handle the elements action(s), too\n    handleActionElem(instance, scope as HTMLElement, selectorAction);\n  }\n\n  // Handle all children action(s)\n  scope\n    .querySelectorAll<HTMLElement>(`[${selectorAction}]`)\n    .forEach((elem) => handleActionElem(instance, elem, selectorAction));\n\n  if (scrollElements.length) scroll(instance);\n}\n\nasync function handleTrigger(\n  instance: SourceWalkerjs.Instance,\n  element: Element,\n  trigger: Walker.Trigger,\n  // @TODO add triggerParams to filter for specific trigger\n) {\n  const events = getEvents(element, trigger, instance.config.prefix);\n  return Promise.all(\n    events.map((event: Walker.Event) =>\n      instance.push({\n        event: `${event.entity} ${event.action}`,\n        ...event,\n        trigger,\n      }),\n    ),\n  );\n}\n\nfunction handleActionElem(\n  instance: SourceWalkerjs.Instance,\n  elem: HTMLElement,\n  selectorAction: string,\n) {\n  const actionAttr = getAttribute(elem, selectorAction);\n\n  if (!actionAttr) return;\n\n  // TriggersActionGroups ([trigger: string]: TriggerActions)\n  Object.values(getTriggerActions(actionAttr)).forEach((triggerActions) =>\n    // TriggerActions (Array<TriggerAction>)\n    triggerActions.forEach((triggerAction) => {\n      // TriggerAction ({ trigger, triggerParams, action, actionParams })\n      switch (triggerAction.trigger) {\n        case Trigger.Hover:\n          triggerHover(instance, elem);\n          break;\n        case Trigger.Load:\n          triggerLoad(instance, elem);\n          break;\n        case Trigger.Pulse:\n          triggerPulse(instance, elem, triggerAction.triggerParams);\n          break;\n        case Trigger.Scroll:\n          triggerScroll(elem, triggerAction.triggerParams);\n          break;\n        case Trigger.Visible:\n          triggerVisible(elem, visibleObserver);\n          break;\n        case Trigger.Wait:\n          triggerWait(instance, elem, triggerAction.triggerParams);\n          break;\n      }\n    }),\n  );\n}\n\nfunction triggerClick(instance: SourceWalkerjs.Instance, ev: MouseEvent) {\n  handleTrigger(instance, ev.target as Element, Trigger.Click);\n}\n\nfunction triggerHover(instance: SourceWalkerjs.Instance, elem: HTMLElement) {\n  elem.addEventListener(\n    'mouseenter',\n    tryCatch(function (this: Document, ev: MouseEvent) {\n      if (ev.target instanceof Element)\n        handleTrigger(instance, ev.target, Trigger.Hover);\n    }),\n  );\n}\n\nfunction triggerLoad(instance: SourceWalkerjs.Instance, elem: HTMLElement) {\n  handleTrigger(instance, elem, Trigger.Load);\n}\n\nfunction triggerPulse(\n  instance: SourceWalkerjs.Instance,\n  elem: HTMLElement,\n  triggerParams: string = '',\n) {\n  setInterval(() => {\n    // Only trigger when tab is active\n    if (!document.hidden) handleTrigger(instance, elem, Trigger.Pulse);\n  }, parseInt(triggerParams || '') || 15000);\n}\n\nfunction triggerScroll(elem: HTMLElement, triggerParams: string = '') {\n  // Scroll depth in percent, default 50%\n  const depth = parseInt(triggerParams || '') || 50;\n\n  // Ignore invalid parameters\n  if (depth < 0 || depth > 100) return;\n\n  scrollElements.push([elem, depth]);\n}\n\nfunction triggerSubmit(instance: SourceWalkerjs.Instance, ev: Event) {\n  handleTrigger(instance, ev.target as Element, Trigger.Submit);\n}\n\nfunction triggerVisible(\n  elem: HTMLElement,\n  visibleObserver?: IntersectionObserver,\n) {\n  if (visibleObserver) visibleObserver!.observe(elem);\n}\n\nfunction triggerWait(\n  instance: SourceWalkerjs.Instance,\n  elem: HTMLElement,\n  triggerParams: string = '',\n) {\n  setTimeout(\n    () => handleTrigger(instance, elem, Trigger.Wait),\n    parseInt(triggerParams || '') || 15000,\n  );\n}\n\nfunction scroll(instance: SourceWalkerjs.Instance) {\n  const scrolling = (\n    scrollElements: Walker.ScrollElements,\n    instance: SourceWalkerjs.Instance,\n  ) => {\n    return scrollElements.filter(([element, depth]) => {\n      // Distance from top to the bottom of the visible screen\n      const windowBottom = window.scrollY + window.innerHeight;\n      // Distance from top to the elements relevant content\n      const elemTop = element.offsetTop;\n\n      // Skip calculations if not in viewport yet\n      if (windowBottom < elemTop) return true;\n\n      // Height of the elements box as 100 percent base\n      const elemHeight = element.clientHeight;\n      // Distance from top to the elements bottom\n      const elemBottom = elemTop + elemHeight;\n      // Height of the non-visible pixels below visible screen\n      const hidden = elemBottom - windowBottom;\n      // Visible percentage of the element\n      const scrollDepth = (1 - hidden / (elemHeight || 1)) * 100;\n\n      // Check if the elements visibility skipped the required border\n      if (scrollDepth >= depth) {\n        // Enough scrolling, it's time\n        handleTrigger(instance, element, Trigger.Scroll);\n\n        // Remove the element from scrollEvents\n        return false;\n      }\n\n      // Keep observing the element\n      return true;\n    });\n  };\n\n  // Don't add unnecessary scroll listeners\n  if (!scrollListener) {\n    scrollListener = throttle(function () {\n      scrollElements = scrolling.call(document, scrollElements, instance);\n    });\n\n    document.addEventListener('scroll', scrollListener);\n  }\n}\n\nfunction observerVisible(\n  instance: SourceWalkerjs.Instance,\n  duration = 1000,\n): IntersectionObserver | undefined {\n  if (!window.IntersectionObserver) return;\n\n  return new window.IntersectionObserver(\n    (entries) => {\n      entries.forEach((entry) => {\n        const target = entry.target as HTMLElement;\n        const timerId = 'elbTimerId';\n\n        // Check for an existing timer\n        let timer = Number(target.dataset[timerId]);\n\n        if (entry.intersectionRatio > 0) {\n          // Check if a large target element is in viewport\n          const largeElemInViewport =\n            target.offsetHeight > window.innerHeight && isVisible(target);\n\n          // Element is more than 50% in viewport\n          if (largeElemInViewport || entry.intersectionRatio >= 0.5) {\n            // Take existing scheduled function or create a new one\n            timer =\n              timer ||\n              window.setTimeout(async function () {\n                if (isVisible(target)) {\n                  await handleTrigger(\n                    instance,\n                    target as Element,\n                    Trigger.Visible,\n                  );\n\n                  // Just count once\n                  delete target.dataset[timerId];\n                  if (visibleObserver) visibleObserver.unobserve(target);\n                }\n              }, duration);\n\n            // Remember the timer, temporarily\n            target.dataset[timerId] = String(timer);\n\n            // We're done here\n            return;\n          }\n        }\n\n        // Element isn't in viewport\n        // Clearing a timer is more easy than computing isVisible\n        if (timer) {\n          clearTimeout(timer);\n          delete target.dataset[timerId];\n        }\n      });\n    },\n    {\n      rootMargin: '0px',\n      threshold: [0, 0.1, 0.2, 0.3, 0.4, 0.5], // Trigger for the first 50%\n    },\n  );\n}\n","import { Const, assign } from '@elbwalker/utils';\nimport type { SourceWalkerjs } from '../types';\n\nexport function getState(\n  initConfig: SourceWalkerjs.InitConfig,\n  instance: Partial<SourceWalkerjs.Instance> = {},\n): SourceWalkerjs.State {\n  const defaultConfig: SourceWalkerjs.Config = {\n    dataLayer: false, // Do not use dataLayer by default\n    dataLayerConfig: {}, // Configuration for dataLayer\n    elbLayer: window.elbLayer || (window.elbLayer = []), // Async access api in window as array\n    globalsStatic: {}, // Static global properties\n    pageview: true, // Trigger a page view event by default\n    prefix: Const.Commands.Prefix, // HTML prefix attribute\n    run: false, // Run the walker by default\n    session: {\n      // Configuration for session handling\n      storage: false, // Do not use storage by default\n    },\n    sessionStatic: {}, // Static session data\n    tagging: 0, // Helpful to differentiate the used setup version\n  };\n\n  const config: SourceWalkerjs.Config = assign(\n    defaultConfig,\n    {\n      ...(instance.config || {}), // current config\n      ...initConfig, // new config\n    },\n    { merge: false, extend: false },\n  );\n\n  // Optional values\n  if (initConfig.elb) config.elb = initConfig.elb;\n  if (initConfig.instance) config.instance = initConfig.instance;\n\n  // Process default mode to enable both auto-run and dataLayer destination\n  if (initConfig.default) {\n    config.run = true;\n    config.dataLayer = true;\n  }\n\n  // Extract remaining values from initConfig\n  const {\n    consent = {}, // Handle the consent states\n    custom = {}, // Custom state support\n    destinations = {}, // Destination list\n    hooks = {}, // Manage the hook functions\n    on = {}, // On events listener rules\n    user = {}, // Handles the user ids\n  } = initConfig;\n\n  // Globals enhanced with the static globals from init and previous values\n  const globals = { ...config.globalsStatic };\n\n  return {\n    allowed: false, // Wait for explicit run command to start\n    config,\n    consent,\n    count: 0, // Event counter for each run\n    custom,\n    destinations,\n    globals,\n    group: '', // Random id to group events of a run\n    hooks,\n    on,\n    queue: [], // Temporary event queue for all events of a run\n    round: 0, // The first round is a special one due to state changes\n    session: undefined, // Session data\n    timing: 0, // Offset counter to calculate timing property\n    user,\n    version: '',\n  };\n}\n","import type { WalkerOS } from '@elbwalker/types';\nimport type { SessionCallback } from '@elbwalker/utils/web';\nimport { assign, isSameType, onApply, useHooks } from '@elbwalker/utils';\nimport { sessionStart as sessionStartOrg } from '@elbwalker/utils/web';\nimport { SourceWalkerjs } from '../types';\nimport { SessionStartOptions } from '../types/source';\n\nexport function createSessionStart(instance: SourceWalkerjs.Instance) {\n  return function (\n    options: SessionStartOptions = {},\n  ): void | WalkerOS.SessionData {\n    const { config = {}, ...otherOptions } = options;\n    return sessionStart(instance, {\n      config: { pulse: true, ...config },\n      data: { ...instance.session, updated: Date.now() },\n      ...otherOptions,\n    });\n  };\n}\n\nexport function sessionStart(\n  instance: SourceWalkerjs.Instance,\n  options: SessionStartOptions = {},\n): void | WalkerOS.SessionData {\n  const sessionConfig = assign(instance.config.session || {}, options.config);\n  const sessionData = assign(instance.config.sessionStatic, options.data);\n\n  // A wrapper for the callback\n  const cb: SessionCallback = (session, instance, defaultCb) => {\n    let result: void | undefined | WalkerOS.SessionData;\n    if (sessionConfig.cb !== false)\n      // Run either the default callback or the provided one\n      result = (sessionConfig.cb || defaultCb)(session, instance, defaultCb);\n\n    if (isSameType(instance, {} as SourceWalkerjs.Instance)) {\n      // Assign the session\n      instance.session = session;\n\n      // Run on session events\n      onApply(instance, 'session');\n    }\n\n    return result;\n  };\n\n  const session = useHooks(\n    sessionStartOrg,\n    'SessionStart',\n    instance.hooks,\n  )({\n    ...sessionConfig, // Session detection configuration\n    cb, // Custom wrapper callback\n    data: sessionData, // Static default session data\n    instance,\n  });\n\n  return session;\n}\n","import type { SourceWalkerjs } from '../types';\nimport { assign, getId, onApply, tryCatch } from '@elbwalker/utils';\nimport { getGlobals } from './walker';\nimport { pushPredefined } from './push';\nimport { load } from './trigger';\nimport { sessionStart } from './session';\n\nexport function run(\n  instance: SourceWalkerjs.Instance,\n  state: Partial<SourceWalkerjs.State> = {},\n) {\n  const { config, destinations } = instance;\n\n  const newState = assign(\n    {\n      allowed: true, // When run is called, the walker may start running\n      count: 0, // Reset the run counter\n      queue: [], // Reset the queue for each run without merging\n      group: getId(), // Generate a new group id for each run\n      globals: assign(\n        // Load globals properties\n        // Use the static globals and search for tagged ones\n        // Due to site performance only once every run\n        config.globalsStatic,\n        getGlobals(config.prefix),\n      ),\n    },\n    { ...state },\n  );\n\n  // Update the instance reference with the updated state\n  assign(instance, newState, { merge: false, shallow: false, extend: false });\n\n  // Reset all destination queues\n  Object.values(destinations).forEach((destination) => {\n    destination.queue = [];\n  });\n\n  // Increase round counter\n  if (++instance.round == 1) {\n    // Run predefined elbLayer stack once for all non-command events\n    pushPredefined(instance, false);\n  } else {\n    // Reset timing with each new run\n    instance.timing = performance.now();\n  }\n\n  // Session handling\n  const sessionConfig = config.session;\n  if (sessionConfig) {\n    // Disable session start for window after first round (for SPAs)\n    if (!sessionConfig.storage && instance.round > 1)\n      sessionConfig.isStart = false;\n\n    sessionStart(instance, {\n      ...sessionConfig, // Session detection configuration\n      data: config.sessionStatic, // Static default session data\n    });\n  }\n\n  // Call the predefined run events\n  onApply(instance, 'run');\n\n  tryCatch(load)(instance);\n}\n","import type { Hooks } from '@elbwalker/types';\nimport type { SourceWalkerjs } from '../types';\n\nexport function addHook<Hook extends keyof Hooks.Functions>(\n  instance: SourceWalkerjs.Instance,\n  name: Hook,\n  hookFn: Hooks.Functions[Hook],\n) {\n  instance.hooks[name] = hookFn;\n}\n","import type { Hooks, On } from '@elbwalker/types';\nimport type { SourceWalkerjs, Elb } from '../types';\nimport { initScopeTrigger, ready } from './trigger';\nimport { getState } from './state';\nimport { run } from './run';\nimport { addHook } from './hooks';\nimport {\n  commonHandleCommand,\n  Const,\n  createPushResult,\n  isObject,\n  on,\n} from '@elbwalker/utils';\n\nexport async function handleCommand(\n  instance: SourceWalkerjs.Instance,\n  action: string,\n  data?: Elb.PushData,\n  options?: Elb.PushOptions,\n): Promise<Elb.PushResult> {\n  let result: Elb.PushResult | undefined;\n\n  switch (action) {\n    case Const.Commands.Config:\n      if (isObject(data))\n        instance.config = getState(\n          data as SourceWalkerjs.Config,\n          instance,\n        ).config;\n      break;\n\n    case Const.Commands.Hook:\n      if (typeof data === 'string' && typeof options === 'function') {\n        addHook(\n          instance,\n          data as keyof Hooks.Functions,\n          options as Hooks.AnyFunction,\n        );\n      }\n      break;\n\n    case Const.Commands.Init:\n      const elems: unknown[] = Array.isArray(data) ? data : [data || document];\n      elems.forEach((elem) => {\n        if (elem instanceof Element || elem instanceof Document) {\n          initScopeTrigger(instance, elem);\n        }\n      });\n      break;\n\n    case Const.Commands.On:\n      if (data && options) {\n        on(instance, data as On.Types, options as On.Options);\n      }\n      break;\n\n    case Const.Commands.Run:\n      await ready(\n        instance,\n        run,\n        instance,\n        data as Partial<SourceWalkerjs.State>,\n      );\n      break;\n\n    default:\n      result = await commonHandleCommand(instance, action, data, options);\n  }\n\n  return createPushResult(result);\n}\n","import type { WalkerOS } from '@elbwalker/types';\nimport type { Elb, SourceWalkerjs } from '../types';\nimport { handleCommand } from './handle';\nimport {\n  Const,\n  isArguments,\n  isArray,\n  isElementOrDocument,\n  isObject,\n  isSameType,\n  isString,\n  createPush,\n} from '@elbwalker/utils';\nimport { getEntities } from './walker';\n\nexport function getPush(instance: SourceWalkerjs.Instance): Elb.Fn {\n  const prepareEvent: Elb.Arguments<WalkerOS.PartialEvent> = (\n    nameOrEvent,\n    pushData,\n    options,\n    pushContext,\n    nested,\n    custom,\n  ) => {\n    const [entity] = String(\n      isObject(nameOrEvent) ? nameOrEvent.event : nameOrEvent,\n    ).split(' ');\n\n    // Get data and context either from elements or parameters\n    let data = isSameType(pushData, {} as WalkerOS.Properties) ? pushData : {};\n\n    let eventContext: WalkerOS.OrderedProperties = {};\n\n    let elemParameter: undefined | Element;\n    let dataIsElem = false;\n    if (isElementOrDocument(pushData)) {\n      elemParameter = pushData;\n      dataIsElem = true;\n    }\n\n    if (isElementOrDocument(pushContext)) {\n      elemParameter = pushContext;\n    } else if (isObject(pushContext) && Object.keys(pushContext).length) {\n      eventContext = pushContext;\n    }\n\n    if (elemParameter) {\n      const entityObj = getEntities(instance.config.prefix, elemParameter).find(\n        (obj) => obj.type === entity,\n      );\n      if (entityObj) {\n        if (dataIsElem) data = entityObj.data;\n        eventContext = entityObj.context;\n      }\n    }\n\n    if (entity === 'page') {\n      data.id = data.id || window.location.pathname;\n    }\n\n    return {\n      data,\n      context: eventContext,\n      nested,\n      custom,\n      trigger: options ? String(options) : '',\n      timing: Math.round((performance.now() - instance.timing) / 10) / 100,\n      source: {\n        type: 'web',\n        id: window.location.href,\n        previous_id: document.referrer,\n      },\n    };\n  };\n\n  return createPush<SourceWalkerjs.Instance, Elb.Fn>(\n    instance,\n    handleCommand,\n    prepareEvent,\n  );\n}\n\nexport function elbLayerInit(instance: SourceWalkerjs.Instance) {\n  const elbLayer = instance.config.elbLayer;\n\n  elbLayer.push = function (...args: Elb.Layer) {\n    // Pushed as Arguments\n    if (isArguments(args[0])) args = [...Array.from(args[0])];\n\n    const i = Array.prototype.push.apply(this, [args]);\n    instance.push(...(args as Parameters<Elb.Fn>));\n\n    return i;\n  };\n\n  // Call all predefined commands\n  pushPredefined(instance, true);\n}\n\nexport function pushPredefined(\n  instance: SourceWalkerjs.Instance,\n  commandsOnly: boolean,\n) {\n  // Handle existing events in the elbLayer on first run\n  // there is a special execution order for all predefined events\n  // walker events gets prioritized before others\n  // this guarantees a fully configuration before the first run\n  const walkerCommand = `${Const.Commands.Walker} `; // Space on purpose\n  const events: Array<Parameters<Elb.Fn>> = [];\n  let isFirstRunEvent = true;\n\n  // At that time the elbLayer was not yet initialized\n  instance.config.elbLayer.map((pushedItem) => {\n    const item = isArguments(pushedItem)\n      ? [...Array.from(pushedItem)]\n      : isArray(pushedItem)\n      ? pushedItem\n      : [pushedItem];\n\n    const firstParam = item[0];\n    const isCommand =\n      !isObject(firstParam) && String(firstParam).startsWith(walkerCommand);\n\n    if (!isObject(firstParam)) {\n      const args = Array.from(item);\n      if (!isString(args[0])) return;\n\n      // Skip the first stacked run event since it's the reason we're here\n      // and to prevent duplicate execution which we don't want\n      const runCommand = `${Const.Commands.Walker} ${Const.Commands.Run}`;\n      if (isFirstRunEvent && args[0] == runCommand) {\n        isFirstRunEvent = false; // Next time it's on\n        return;\n      }\n    }\n\n    // Handle commands and events separately\n    if (\n      (commandsOnly && isCommand) || // Only commands\n      (!commandsOnly && !isCommand) // Only events\n    )\n      events.push(item as Parameters<Elb.Fn>);\n  });\n\n  events.map((item) => {\n    instance.push(...item);\n  });\n}\n","import type { DestinationWeb } from '../types';\n\nexport function dataLayerDestination(): DestinationWeb.DestinationInit {\n  window.dataLayer = window.dataLayer || [];\n  const dataLayerPush = (event: unknown) => {\n    (window.dataLayer as unknown[]).push(event);\n  };\n  const destination: DestinationWeb.DestinationInit = {\n    push: (event, config, mapping, options = {}) => {\n      // Do not process events from dataLayer source\n      if (event.source?.type === 'dataLayer') return;\n\n      const data = options.data || event;\n      dataLayerPush(data);\n    },\n    pushBatch: (batch) => {\n      dataLayerPush({\n        event: 'batch',\n        batched_event: batch.key,\n        events: batch.data.length ? batch.data : batch.events,\n      });\n    },\n    type: 'dataLayer',\n  };\n\n  return destination;\n}\n","import type {\n  Destination as WalkerOSDestination,\n  Mapping as WalkerOSMapping,\n} from '@elbwalker/types';\n\nexport interface Destination<Custom = unknown, CustomEvent = unknown>\n  extends WalkerOSDestination.Destination<Custom, CustomEvent> {\n  config: Config<Custom, CustomEvent>;\n  push: WalkerOSDestination.PushFn<Custom, CustomEvent>;\n  init?: WalkerOSDestination.InitFn<Custom, CustomEvent>;\n}\n\nexport type DestinationInit = WalkerOSDestination.DestinationInit;\n\nexport interface Config<Custom = unknown, CustomEvent = unknown>\n  extends WalkerOSDestination.Config<Custom, CustomEvent> {}\n\nexport interface Mapping<CustomEvent = unknown>\n  extends WalkerOSMapping.Config<CustomEvent> {}\n\nexport interface EventMapping<CustomEvent = unknown>\n  extends WalkerOSMapping.EventConfig<CustomEvent> {}\n","import type { Elb, On, WalkerOS } from '@elbwalker/types';\nimport type { Destination, DestinationInit, Config } from './destination';\nimport type { State } from './source';\nimport type { Trigger } from './walker';\n\nexport interface Fn<R = Return, D = PushData, O = PushOptions, C = PushContext>\n  extends Elb.Fn<R, D, O, C>,\n    Arguments<R>,\n    CommandInit<R>,\n    CommandDestination<R>,\n    CommandOn<R>,\n    CommandRun<R> {}\n\nexport type Arguments<R = void> = Elb.Arguments<\n  R,\n  PushData,\n  PushOptions,\n  PushContext\n>;\n\nexport type CommandInit<R = void> = (\n  event: 'walker init',\n  scope: Scope | Scope[],\n) => R;\n\nexport type CommandDestination<R = void> = (\n  event: 'walker destination',\n  destination: Destination | DestinationInit,\n  config?: Config,\n) => R;\n\nexport type CommandRun<R = void> = (\n  event: 'walker run',\n  state?: Partial<State>,\n) => R;\n\nexport type CommandOn<R = void> = (\n  event: 'walker on',\n  type: 'consent',\n  rules: WalkerOS.SingleOrArray<On.ConsentConfig>,\n) => R;\n\nexport type PushData =\n  | Elb.PushData\n  | Destination\n  | DestinationInit\n  | Partial<State>\n  | ScopeType;\n\nexport type PushOptions =\n  | Elb.PushOptions\n  | Trigger\n  | WalkerOS.SingleOrArray<On.Options>\n  | Config;\n\nexport type PushContext = Elb.PushContext | Element;\n\nexport type Scope = Element | Document;\n\nexport type ScopeType = Scope | Scope[];\n\nexport type PushResult = Elb.PushResult;\n\nexport type Return<R = Promise<PushResult>> = R;\n\nexport type Layer = Elb.Layer;\n","import type { Hooks, WalkerOS } from '@elbwalker/types';\nimport type { SessionConfig } from '@elbwalker/utils/web';\nimport type { Destination, Config as DestConfig } from './destination';\nimport type { Fn, Layer } from './elb';\nimport type { Events, Trigger } from './walker';\n\ndeclare global {\n  interface Window {\n    elbwalker: Instance;\n    walkerjs: Instance;\n    elbLayer: Layer;\n    dataLayer: WalkerOS.Events | unknown;\n    elb: Fn;\n  }\n}\n\nexport interface Instance extends WalkerOS.Instance {\n  config: Config;\n  destinations: Destinations;\n  push: Fn;\n  getAllEvents: (scope: Element, prefix: string) => Events;\n  getEvents: (target: Element, trigger: Trigger, prefix: string) => Events;\n  getGlobals: () => WalkerOS.Properties;\n  sessionStart: (options?: SessionStartOptions) => void | WalkerOS.SessionData;\n}\n\nexport interface State extends WalkerOS.State {\n  config: Config;\n  destinations: Destinations;\n}\n\nexport interface Config extends WalkerOS.Config {\n  dataLayer: boolean;\n  dataLayerConfig: DestConfig;\n  elbLayer: Layer;\n  pageview: boolean;\n  prefix: string;\n  run: boolean;\n  session: false | SessionConfig;\n  globalsStatic: WalkerOS.Properties;\n  sessionStatic: Partial<WalkerOS.SessionData>;\n  elb?: string;\n  instance?: string;\n}\n\nexport interface InitConfig extends Partial<Config> {\n  consent?: WalkerOS.Consent;\n  custom?: WalkerOS.Properties;\n  destinations?: Destinations;\n  hooks?: Hooks.Functions;\n  on?: WalkerOS.OnConfig;\n  tagging?: number;\n  user?: WalkerOS.User;\n}\n\nexport interface SessionStartOptions {\n  config?: SessionConfig;\n  data?: Partial<WalkerOS.SessionData>;\n}\n\nexport interface Destinations {\n  [name: string]: Destination;\n}\n","import type { WalkerOS } from '@elbwalker/types';\n\nexport type Events = Event[];\n\nexport interface Event {\n  entity: string;\n  action: string;\n  data?: WalkerOS.Properties;\n  context?: WalkerOS.OrderedProperties;\n  trigger?: Trigger;\n  nested: WalkerOS.Entities;\n}\n\nexport type KeyVal = [string, string];\n\nexport type Attributes = Array<string>;\n\nexport type Trigger =\n  | 'click'\n  | 'custom'\n  | 'hover'\n  | 'load'\n  | 'pulse'\n  | 'scroll'\n  | 'submit'\n  | 'visible'\n  | 'wait'\n  | string;\n\nexport interface Filter {\n  [name: string]: boolean;\n}\n\nexport interface TriggersActionGroups {\n  [trigger: string]: TriggerActions;\n}\n\nexport type TriggerActions = Array<TriggerAction>;\n\ninterface TriggerAction {\n  trigger: string;\n  triggerParams?: string;\n  action: string;\n  actionParams?: string;\n}\n\nexport type ScrollElements = Array<[HTMLElement, number]>;\n","import type { Elb, SourceWalkerjs } from './types';\nimport { addDestination, onApply } from '@elbwalker/utils';\nimport { sessionStart } from '@elbwalker/utils/web';\nimport { getPush, elbLayerInit } from './lib/push';\nimport { run } from './lib/run';\nimport { createSessionStart } from './lib/session';\nimport { getState } from './lib/state';\nimport { createElb, initGlobalTrigger, ready } from './lib/trigger';\nimport { getAllEvents, getEvents, getGlobals } from './lib/walker';\nimport { dataLayerDestination } from './lib/destination';\n\n// Export types and elb\nexport * from './types';\n\nexport const elb: Elb.Fn = createElb();\n\nexport function createSourceWalkerjs(\n  customConfig?: SourceWalkerjs.InitConfig,\n): {\n  elb: Elb.Fn;\n  instance: SourceWalkerjs.Instance;\n} {\n  const instance = Walkerjs(customConfig);\n  const elb = instance.push;\n\n  return { elb, instance };\n}\n\nexport function Walkerjs(\n  customConfig: SourceWalkerjs.InitConfig = {},\n): SourceWalkerjs.Instance {\n  const version = '3.4.2'; // Source version\n  const state = getState(customConfig);\n  const instance: SourceWalkerjs.Instance = {\n    ...state,\n    version,\n    // Placeholder functions to be overwritten with instance-reference\n    push: (() => {}) as unknown as Elb.Fn,\n    getAllEvents,\n    getEvents,\n    getGlobals,\n    sessionStart: (() => {}) as unknown as typeof sessionStart,\n  };\n\n  const { config } = instance;\n\n  // Overwrite the push function with the instance-reference\n  instance.push = getPush(instance);\n  instance.sessionStart = createSessionStart(instance);\n\n  // Setup pushes via elbLayer\n  elbLayerInit(instance);\n\n  // Assign instance and/or elb to the window object\n  if (config.elb)\n    (window as unknown as Record<string, unknown>)[config.elb] = createElb(\n      config.elbLayer,\n    );\n  if (config.instance)\n    (window as unknown as Record<string, unknown>)[config.instance] = instance;\n\n  // Run on events for default consent states\n  onApply(instance, 'consent');\n\n  // Add default destination to push events to dataLayer\n  if (config.dataLayer)\n    addDestination(instance, dataLayerDestination(), config.dataLayerConfig);\n\n  // Automatically start running\n  if (config.run) ready(instance, run, instance);\n\n  // Register trigger like click, submit, etc.\n  initGlobalTrigger(instance);\n\n  // Let's get it on!\n  return instance;\n}\n\nexport default Walkerjs;\n"],"mappings":"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","names":["o","filter","str","elem","r","o","visibleObserver","scrollElements","instance","u","session","instance","b","i","elb"]}