@walkeros/web-source-browser 0.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +93 -0
- package/dist/index.browser.js +1 -0
- package/dist/index.d.mts +139 -0
- package/dist/index.d.ts +139 -0
- package/dist/index.es5.js +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +1 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +54 -0
package/README.md
ADDED
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
<p align="left">
|
|
2
|
+
<a href="https://elbwalker.com">
|
|
3
|
+
<img title="elbwalker" src='https://www.elbwalker.com/img/elbwalker_logo.png' width="256px"/>
|
|
4
|
+
</a>
|
|
5
|
+
</p>
|
|
6
|
+
|
|
7
|
+
# Browser DOM Source for walkerOS
|
|
8
|
+
|
|
9
|
+
The walkerOS Browser DOM Source provides automatic event collection from browser
|
|
10
|
+
interactions and DOM elements, plus a tagger utility for generating HTML data
|
|
11
|
+
attributes. It serves as the primary source for capturing user behavior, page
|
|
12
|
+
views, and element interactions directly from the DOM without requiring manual
|
|
13
|
+
event instrumentation.
|
|
14
|
+
|
|
15
|
+
## Role in walkerOS Ecosystem
|
|
16
|
+
|
|
17
|
+
walkerOS follows a **source → collector → destination** architecture:
|
|
18
|
+
|
|
19
|
+
- **Sources**: Capture events from various environments (browser DOM, dataLayer,
|
|
20
|
+
server requests)
|
|
21
|
+
- **Collector**: Processes, validates, and routes events with consent awareness
|
|
22
|
+
- **Destinations**: Send processed events to analytics platforms (GA4, Meta,
|
|
23
|
+
custom APIs)
|
|
24
|
+
|
|
25
|
+
The Browser DOM Source automatically detects and captures user interactions,
|
|
26
|
+
page lifecycle events, and element visibility changes, transforming them into
|
|
27
|
+
standardized walkerOS events that flow through the collector to your configured
|
|
28
|
+
destinations.
|
|
29
|
+
|
|
30
|
+
## Installation
|
|
31
|
+
|
|
32
|
+
```sh
|
|
33
|
+
npm install @walkeros/web-source-browser
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## Usage
|
|
37
|
+
|
|
38
|
+
Here's a basic example of how to use the Browser DOM source:
|
|
39
|
+
|
|
40
|
+
```typescript
|
|
41
|
+
import { elb } from '@walkeros/collector';
|
|
42
|
+
import { sourceBrowser, createTagger } from '@walkeros/web-source-browser';
|
|
43
|
+
|
|
44
|
+
// Initialize the browser source
|
|
45
|
+
sourceBrowser({ elb });
|
|
46
|
+
|
|
47
|
+
// Use the tagger to generate HTML data attributes
|
|
48
|
+
const tagger = createTagger();
|
|
49
|
+
const attrs = tagger('product').data('id', '123').action('load', 'view').get();
|
|
50
|
+
// Result: { 'data-elb': 'product', 'data-elb-product': 'id:123', 'data-elbaction': 'load:view' }
|
|
51
|
+
|
|
52
|
+
// The source will now automatically capture:
|
|
53
|
+
// - Page views
|
|
54
|
+
// - Click events
|
|
55
|
+
// - Form submissions
|
|
56
|
+
// - Element visibility changes
|
|
57
|
+
// - Custom data attributes
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## Automatic Event Capture
|
|
61
|
+
|
|
62
|
+
The browser source automatically captures:
|
|
63
|
+
|
|
64
|
+
- **Page Events**: Page views, navigation, and lifecycle events
|
|
65
|
+
- **Click Events**: Button clicks, link clicks, and element interactions
|
|
66
|
+
- **Form Events**: Form submissions and field interactions
|
|
67
|
+
- **Visibility Events**: When elements become visible in the viewport
|
|
68
|
+
- **Custom Events**: Events defined through data attributes in HTML
|
|
69
|
+
|
|
70
|
+
## Data Attributes
|
|
71
|
+
|
|
72
|
+
Use HTML data attributes to define custom tracking:
|
|
73
|
+
|
|
74
|
+
```html
|
|
75
|
+
<!-- Automatic click tracking -->
|
|
76
|
+
<button data-elb="promotion" data-elb-promotion="click">Shop Now</button>
|
|
77
|
+
|
|
78
|
+
<!-- Custom event data -->
|
|
79
|
+
<div data-elb="product" data-elb-product="view" data-name="Premium Plan">
|
|
80
|
+
Product content
|
|
81
|
+
</div>
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
## Contribute
|
|
85
|
+
|
|
86
|
+
Feel free to contribute by submitting an
|
|
87
|
+
[issue](https://github.com/elbwalker/walkerOS/issues), starting a
|
|
88
|
+
[discussion](https://github.com/elbwalker/walkerOS/discussions), or getting in
|
|
89
|
+
[contact](https://calendly.com/elb-alexander/30min).
|
|
90
|
+
|
|
91
|
+
## License
|
|
92
|
+
|
|
93
|
+
This project is licensed under the MIT License.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var Source=(()=>{var e,t,n=Object.defineProperty,r=Object.getOwnPropertyDescriptor,o=Object.getOwnPropertyNames,s=Object.prototype.hasOwnProperty,i={};((e,t)=>{for(var r in t)n(e,r,{get:t[r],enumerable:!0})})(i,{SourceBrowser:()=>he,createTagger:()=>we,default:()=>ve,getAllEvents:()=>D,getEvents:()=>M,getGlobals:()=>T,sourceBrowser:()=>ke});var c=Object.getOwnPropertyNames,a=(e={"package.json"(e,t){t.exports={name:"@walkeros/core",description:"Core types and platform-agnostic utilities for walkerOS",version:"0.0.7",main:"./dist/index.js",module:"./dist/index.mjs",types:"./dist/index.d.ts",license:"MIT",files:["dist/**"],scripts:{build:"tsup --silent",clean:"rm -rf .turbo && rm -rf node_modules && rm -rf dist",dev:"jest --watchAll --colors",lint:'tsc && eslint "**/*.ts*"',test:"jest",update:"npx npm-check-updates -u && npm update"},dependencies:{},devDependencies:{},repository:{url:"git+https://github.com/elbwalker/walkerOS.git",directory:"packages/core"},author:"elbwalker <hello@elbwalker.com>",homepage:"https://github.com/elbwalker/walkerOS#readme",bugs:{url:"https://github.com/elbwalker/walkerOS/issues"},keywords:["walker","walkerOS","analytics","tracking","data collection","measurement","data privacy","privacy friendly","web analytics","product analytics","core","types","utils"],funding:[{type:"GitHub Sponsors",url:"https://github.com/sponsors/elbwalker"}]}}},function(){return t||(0,e[c(e)[0]])((t={exports:{}}).exports,t),t.exports}),l={Storage:{Local:"local",Session:"session",Cookie:"cookie"}},u={merge:!0,shallow:!0,extend:!0};function d(e,t={},n={}){n={...u,...n};const r=Object.entries(t).reduce((t,[r,o])=>{const s=e[r];return n.merge&&Array.isArray(s)&&Array.isArray(o)?t[r]=o.reduce((e,t)=>e.includes(t)?e:[...e,t],[...s]):(n.extend||r in e)&&(t[r]=o),t},{});return n.shallow?{...e,...r}:(Object.assign(e,r),e)}function f(e){return Array.isArray(e)}function m(e){return void 0!==e}function g(e){return"object"==typeof e&&null!==e&&!f(e)&&"[object Object]"===Object.prototype.toString.call(e)}function p(e){return"string"==typeof e}function b(e){if("true"===e)return!0;if("false"===e)return!1;const t=Number(e);return e==t&&""!==e?t:String(e)}var h,w,{version:y}=a();function k(e=6){let t="";for(let n=36;t.length<e;)t+=(Math.random()*n|0).toString(n);return t}function v(e,t,n){return function(...r){try{return e(...r)}catch(e){if(!t)return;return t(e)}finally{null==n||n()}}}function S(e){return e?e.trim().replace(/^'|'$/g,"").trim():""}var O=Object.getOwnPropertyNames,j=(h={"package.json"(e,t){t.exports={name:"@walkeros/collector",description:"Unified platform-agnostic collector for walkerOS",version:"0.0.7",main:"./dist/index.js",module:"./dist/index.mjs",types:"./dist/index.d.ts",license:"MIT",files:["dist/**"],scripts:{build:"tsup --silent",clean:"rm -rf .turbo && rm -rf node_modules && rm -rf dist",dev:"jest --watchAll --colors",lint:'tsc && eslint "**/*.ts*"',test:"jest",update:"npx npm-check-updates -u && npm update"},dependencies:{"@walkeros/core":"0.0.7"},devDependencies:{},repository:{url:"git+https://github.com/elbwalker/walkerOS.git",directory:"packages/collector"},author:"elbwalker <hello@elbwalker.com>",homepage:"https://github.com/elbwalker/walkerOS#readme",bugs:{url:"https://github.com/elbwalker/walkerOS/issues"},keywords:["walker","walkerOS","analytics","tracking","data collection","measurement","data privacy","privacy friendly","collector","event processing"],funding:[{type:"GitHub Sponsors",url:"https://github.com/sponsors/elbwalker"}]}}},{Commands:{Action:"action",Config:"config",Consent:"consent",Context:"context",Custom:"custom",Destination:"destination",Elb:"elb",Globals:"globals",Hook:"hook",Init:"init",Link:"link",On:"on",Prefix:"data-elb",Ready:"ready",Run:"run",Session:"session",User:"user",Walker:"walker"},Utils:{Storage:{Cookie:"cookie",Local:"local",Session:"session"}}});function C(e,t,n,r){let o=n||[];if(n||(o=e.on[t]||[],Object.values(e.destinations).forEach(e=>{var n;const r=null==(n=e.config.on)?void 0:n[t];r&&(o=o.concat(r))})),o.length)switch(t){case j.Commands.Consent:!function(e,t,n){const r=n||e.consent;t.forEach(t=>{Object.keys(r).filter(e=>e in t).forEach(n=>{v(t[n])(e,r)})})}(e,o,r);break;case j.Commands.Ready:case j.Commands.Run:i=o,(s=e).allowed&&i.forEach(e=>{v(e)(s)});break;case j.Commands.Session:!function(e,t){e.session&&t.forEach(t=>{v(t)(e,e.session)})}(e,o)}var s,i}function x(e,t){return(e.getAttribute(t)||"").trim()}var E=function(){const e=window;(e.elbLayer=e.elbLayer||[]).push(arguments)};function L(e){const t=getComputedStyle(e);if("none"===t.display)return!1;if("visible"!==t.visibility)return!1;if(t.opacity&&Number(t.opacity)<.1)return!1;let n;const r=window.innerHeight,o=e.getBoundingClientRect(),s=o.height,i=o.y,c=i+s,a={x:o.x+e.offsetWidth/2,y:o.y+e.offsetHeight/2};if(s<=r){if(e.offsetWidth+o.width===0||e.offsetHeight+o.height===0)return!1;if(a.x<0)return!1;if(a.x>(document.documentElement.clientWidth||window.innerWidth))return!1;if(a.y<0)return!1;if(a.y>(document.documentElement.clientHeight||window.innerHeight))return!1;n=document.elementFromPoint(a.x,a.y)}else{const e=r/2;if(i<0&&c<e)return!1;if(c>r&&i>e)return!1;n=document.elementFromPoint(a.x,r/2)}if(n)do{if(n===e)return!0}while(n=n.parentElement);return!1}function $(e={}){const{cb:t,consent:n,collector:r,storage:o}=e,s=(null==r?void 0:r.push)||E;if(!n)return P((o?W:R)(e),r,t);{const r=function(e,t){let n;return(r,o)=>{if(m(n)&&n===(null==r?void 0:r.group))return;n=null==r?void 0:r.group;let s=()=>R(e);if(e.consent){(function(e,t={},n={}){const r={...t,...n},o={};let s=void 0===e;return Object.keys(r).forEach(t=>{r[t]&&(o[t]=!0,e&&e[t]&&(s=!0))}),!!s&&o})((f(e.consent)?e.consent:[e.consent]).reduce((e,t)=>({...e,[t]:!0}),{}),o)&&(s=()=>W(e))}return P(s(),r,t)}}(e,t);s("walker on","consent",(f(n)?n:[n]).reduce((e,t)=>({...e,[t]:r}),{}))}}function P(e,t,n){return!1===n?e:(n||(n=A),n(e,t,A))}var A=(e,t)=>{const n=(null==t?void 0:t.push)||E,r={};return e.id&&(r.session=e.id),e.storage&&e.device&&(r.device=e.device),n("walker user",r),e.isStart&&n({event:"session start",data:e}),e};function I(e,t=l.Storage.Session){var n;function r(e){try{return JSON.parse(e||"")}catch(t){let n=1,r="";return e&&(n=0,r=e),{e:n,v:r}}}let o,s;switch(t){case l.Storage.Cookie:o=decodeURIComponent((null==(n=document.cookie.split("; ").find(t=>t.startsWith(e+"=")))?void 0:n.split("=")[1])||"");break;case l.Storage.Local:s=r(window.localStorage.getItem(e));break;case l.Storage.Session:s=r(window.sessionStorage.getItem(e))}return s&&(o=s.v,0!=s.e&&s.e<Date.now()&&(function(e,t=l.Storage.Session){switch(t){case l.Storage.Cookie:_(e,"",0,t);break;case l.Storage.Local:window.localStorage.removeItem(e);break;case l.Storage.Session:window.sessionStorage.removeItem(e)}}(e,t),o="")),b(o||"")}function _(e,t,n=30,r=l.Storage.Session,o){const s={e:Date.now()+6e4*n,v:String(t)},i=JSON.stringify(s);switch(r){case l.Storage.Cookie:{t="object"==typeof t?JSON.stringify(t):t;let r=`${e}=${encodeURIComponent(t)}; max-age=${60*n}; path=/; SameSite=Lax; secure`;o&&(r+="; domain="+o),document.cookie=r;break}case l.Storage.Local:window.localStorage.setItem(e,i);break;case l.Storage.Session:window.sessionStorage.setItem(e,i)}return I(e,r)}function W(e={}){const t=Date.now(),{length:n=30,deviceKey:r="elbDeviceId",deviceStorage:o="local",deviceAge:s=30,sessionKey:i="elbSessionId",sessionStorage:c="local",pulse:a=!1}=e,l=R(e);let u=!1;const d=v((e,t,n)=>{let r=I(e,n);return r||(r=k(8),_(e,r,1440*t,n)),String(r)})(r,s,o),f=v((e,r)=>{const o=JSON.parse(String(I(e,r)));return a||(o.isNew=!1,l.marketing&&(Object.assign(o,l),u=!0),u||o.updated+6e4*n<t?(delete o.id,delete o.referrer,o.start=t,o.count++,o.runs=1,u=!0):o.runs++),o},()=>{u=!0})(i,c)||{},m={id:k(12),start:t,isNew:!0,count:1,runs:1},g=Object.assign(m,l,f,{device:d},{isStart:u,storage:!0,updated:t},e.data);return _(i,JSON.stringify(g),2*n,c),g}function R(e={}){let t=e.isStart||!1;const n={isStart:t,storage:!1};if(!1===e.isStart)return n;if(!t){const[e]=performance.getEntriesByType("navigation");if("navigate"!==e.type)return n}const r=new URL(e.url||window.location.href),o=e.referrer||document.referrer,s=o&&new URL(o).hostname,i=function(e,t={}){const n="clickId",r={},o={utm_campaign:"campaign",utm_content:"content",utm_medium:"medium",utm_source:"source",utm_term:"term",dclid:n,fbclid:n,gclid:n,msclkid:n,ttclid:n,twclid:n,igshid:n,sclid:n};return Object.entries(d(o,t)).forEach(([t,o])=>{const s=e.searchParams.get(t);s&&(o===n&&(o=t,r[n]=t),r[o]=s)}),r}(r,e.parameters);if(Object.keys(i).length&&(i.marketing||(i.marketing=!0),t=!0),!t){const n=e.domains||[];n.push(r.hostname),t=!n.includes(s)}return t?Object.assign({isStart:t,storage:!1,start:Date.now(),id:k(12),referrer:s},i,e.data):n}function H(e,t,n=!0){return e+(t=null!=t?(n?"-":"")+t:"")}function N(e,t,n,r=!0){return B(x(t,H(e,n,r))||"").reduce((e,n)=>{let[r,o]=F(n);if(!r)return e;if(o||(r.endsWith(":")&&(r=r.slice(0,-1)),o=""),o.startsWith("#")){o=o.slice(1);try{let e=t[o];e||"selected"!==o||(e=t.options[t.selectedIndex].text),o=String(e)}catch(e){o=""}}return r.endsWith("[]")?(r=r.slice(0,-2),f(e[r])||(e[r]=[]),e[r].push(b(o))):e[r]=b(o),e},{})}function D(e=document.body,t=j.Commands.Prefix){let n=[];const r=j.Commands.Action,o=`[${H(t,r,!1)}]`,s=e=>{Object.keys(N(t,e,r,!1)).forEach(r=>{n=n.concat(M(e,r,t))})};return e!==document&&e.matches(o)&&s(e),q(e,o,s),n}function M(e,t,n=j.Commands.Prefix){const r=[],o=function(e,t,n){let r=t;for(;r;){const t=U(x(r,H(e,j.Commands.Action,!1)));if(t[n]||"click"!==n)return t[n];r=G(e,r)}return[]}(n,e,t);return o?(o.forEach(o=>{const s=B(o.actionParams||"",",").reduce((e,t)=>(e[S(t)]=!0,e),{}),i=function(e,t,n){const r=[];let o=t;n=0!==Object.keys(n||{}).length?n:void 0;for(;o;){const s=V(e,o,t,n);s&&r.push(s),o=G(e,o)}return r}(n,e,s);if(!i.length){const t="page",r=`[${H(n,t)}]`,[o,s]=J(e,r,n,t);i.push({type:t,data:o,nested:[],context:s})}i.forEach(e=>{r.push({entity:e.type,action:o.action,data:e.data,trigger:t,context:e.context,nested:e.nested})})}),r):r}function T(e=j.Commands.Prefix,t=document){const n=H(e,j.Commands.Globals,!1);let r={};return q(t,`[${n}]`,t=>{r=d(r,N(e,t,j.Commands.Globals,!1))}),r}function U(e){const t={};return B(e).forEach(e=>{const[n,r]=F(e),[o,s]=K(n);if(!o)return;let[i,c]=K(r||"");i=i||o,t[o]||(t[o]=[]),t[o].push({trigger:o,triggerParams:s,action:i,actionParams:c})}),t}function V(e,t,n,r){const o=x(t,H(e));if(!o||r&&!r[o])return null;const s=[t],i=`[${H(e,o)}],[${H(e,"")}]`,c=H(e,j.Commands.Link,!1);let a={};const l=[],[u,f]=J(n||t,i,e,o);q(t,`[${c}]`,t=>{const[n,r]=F(x(t,c));"parent"===r&&q(document.body,`[${c}="${n}:child"]`,t=>{s.push(t);const n=V(e,t);n&&l.push(n)})});const m=[];s.forEach(e=>{e.matches(i)&&m.push(e),q(e,i,e=>m.push(e))});let g={};return m.forEach(t=>{g=d(g,N(e,t,"")),a=d(a,N(e,t,o))}),a=d(d(g,a),u),s.forEach(t=>{q(t,`[${H(e)}]`,t=>{const n=V(e,t);n&&l.push(n)})}),{type:o,data:a,context:f,nested:l}}function G(e,t){const n=H(e,j.Commands.Link,!1);if(t.matches(`[${n}]`)){const[e,r]=F(x(t,n));if("child"===r)return document.querySelector(`[${n}="${e}:parent"]`)}return!t.parentElement&&t.getRootNode&&t.getRootNode()instanceof ShadowRoot?t.getRootNode().host:t.parentElement}function J(e,t,n,r){let o={};const s={};let i=e;const c=`[${H(n,j.Commands.Context,!1)}]`;let a=0;for(;i;)i.matches(t)&&(o=d(N(n,i,""),o),o=d(N(n,i,r),o)),i.matches(c)&&(Object.entries(N(n,i,j.Commands.Context,!1)).forEach(([e,t])=>{t&&!s[e]&&(s[e]=[t,a])}),++a),i=G(n,i);return[o,s]}function q(e,t,n){e.querySelectorAll(t).forEach(n)}function B(e,t=";"){if(!e)return[];const n=new RegExp(`(?:[^${t}']+|'[^']*')+`,"ig");return e.match(n)||[]}function F(e){const[t,n]=e.split(/:(.+)/,2);return[S(t),S(n)]}function K(e){const[t,n]=e.split("(",2);return[t,n?n.slice(0,-1):""]}var Y=new WeakMap,z=new WeakMap;function Q(e){const t=Date.now();let n=z.get(e);return(!n||t-n.lastChecked>500)&&(n={isVisible:L(e),lastChecked:t},z.set(e,n)),n.isVisible}function X(e){if(window.IntersectionObserver)return v(()=>new window.IntersectionObserver(t=>{t.forEach(t=>{!function(e,t){var n,r;const o=t.target,s=e._visibilityState;if(!s)return;const i=s.timers.get(o);if(t.intersectionRatio>0){const r=Date.now();let c=Y.get(o);(!c||r-c.lastChecked>1e3)&&(c={isLarge:o.offsetHeight>window.innerHeight,lastChecked:r},Y.set(o,c));if(t.intersectionRatio>=.5||c.isLarge&&Q(o)){const t=null==(n=s.elementConfigs)?void 0:n.get(o);if((null==t?void 0:t.multiple)&&t.blocked)return;if(!i){const t=window.setTimeout(async()=>{var t;if(Q(o)){await ue(e,o,ce.Visible,"data-elb");const n=null==(t=s.elementConfigs)?void 0:t.get(o);(null==n?void 0:n.multiple)?n.blocked=!0:function(e,t){const n=e._visibilityState;if(!n)return;n.observer&&n.observer.unobserve(t);const r=n.timers.get(t);r&&(clearTimeout(r),n.timers.delete(t)),Y.delete(t),z.delete(t)}(e,o)}},s.duration);s.timers.set(o,t)}return}}i&&(clearTimeout(i),s.timers.delete(o));const c=null==(r=s.elementConfigs)?void 0:r.get(o);(null==c?void 0:c.multiple)&&(c.blocked=!1)}(e,t)})},{rootMargin:"0px",threshold:[0,.5]}),()=>{})()}function Z(e,t,n={multiple:!1}){var r;const o=e._visibilityState;(null==o?void 0:o.observer)&&t&&(o.elementConfigs||(o.elementConfigs=new WeakMap),o.elementConfigs.set(t,{multiple:null!=(r=n.multiple)&&r,blocked:!1}),o.observer.observe(t))}function ee(e){const t=e._visibilityState;t&&(t.observer&&t.observer.disconnect(),delete e._visibilityState)}function te(e,t,n,r,o,s,i){if(p(t)&&t.startsWith("walker ")){if("walker config"===t)return e.push("walker config",n);if("walker consent"===t)return e.push("walker consent",n);if("walker user"===t)return e.push("walker user",n);if("walker run"===t)return e.push("walker run",n)}if(g(t)){const n=t;return n.source||(n.source=oe()),e.push(n)}if(p(t)&&t.length>0){const c={event:t,data:ne(n||{}),context:re(o||{}),custom:i,nested:s,source:oe()};return p(r)&&(c.trigger=r),e.push(c)}if(!m(t))return Promise.resolve({ok:!0,successful:[],queued:[],failed:[]});const c={event:String(t||""),data:ne(n||{}),context:re(o||{}),custom:i,nested:s,source:oe()};return p(r)&&(c.trigger=r),e.push(c)}function ne(e){return e?typeof e==typeof{}?e:{}:{}}function re(e){return e?(t=e)===document||t instanceof Element?{}:g(e)&&Object.keys(e).length?e:{}:{};var t}function oe(){return{type:"browser",id:window.location.href,previous_id:document.referrer}}var se,ie=[],ce={Click:"click",Custom:"custom",Hover:"hover",Load:"load",Pulse:"pulse",Scroll:"scroll",Submit:"submit",Visible:"visible",Visibles:"visibles",Wait:"wait"};function ae(e,t){const{prefix:n,scope:r,pageview:o}=t;if(o){const[t,o]=function(e,t){const n=window.location,r="page",o=t===document?document.body:t,[s,i]=J(o,`[${H(e,r)}]`,e,r);return s.domain=n.hostname,s.title=document.title,s.referrer=document.referrer,n.search&&(s.search=n.search),n.hash&&(s.hash=n.hash),[s,i]}(n,r);te(e,"page view",t,ce.Load,o)}!function(e,t,n){ie=[],ee(e),function(e,t=1e3){e._visibilityState||(e._visibilityState={observer:X(e),timers:new WeakMap,duration:t})}(e,1e3);const r=H(t,j.Commands.Action,!1),o=n||document;o!==document&&de(e,o,r,t);o.querySelectorAll(`[${r}]`).forEach(n=>de(e,n,r,t)),ie.length&&function(e,t){const n=(e,t)=>e.filter(([e,n])=>{const r=window.scrollY+window.innerHeight,o=e.offsetTop;if(r<o)return!0;const s=e.clientHeight;return!(100*(1-(o+s-r)/(s||1))>=n)||(ue(t,e,ce.Scroll,"data-elb"),!1)});se||(se=function(e,t=1e3){let n=null;return function(...r){if(null===n)return n=setTimeout(()=>{n=null},t),e(...r)}}(function(){ie=n.call(t,ie,e)}),t.addEventListener("scroll",se))}(e,o)}(e,n,r)}function le(e,t){t.addEventListener("click",v(function(t){fe.call(this,e,t)})),t.addEventListener("submit",v(function(t){me.call(this,e,t)}))}async function ue(e,t,n,r){const o=M(t,n,r);return Promise.all(o.map(t=>te(e,{event:`${t.entity} ${t.action}`,...t,trigger:n})))}function de(e,t,n,r){const o=x(t,n);o&&Object.values(U(o)).forEach(n=>n.forEach(n=>{switch(n.trigger){case ce.Hover:!function(e,t,n){t.addEventListener("mouseenter",v(function(t){t.target instanceof Element&&ue(e,t.target,ce.Hover,n)}))}(e,t,r);break;case ce.Load:!function(e,t,n){ue(e,t,ce.Load,n)}(e,t,r);break;case ce.Pulse:!function(e,t,n="",r){setInterval(()=>{document.hidden||ue(e,t,ce.Pulse,r)},parseInt(n||"")||15e3)}(e,t,n.triggerParams,r);break;case ce.Scroll:!function(e,t=""){const n=parseInt(t||"")||50;if(n<0||n>100)return;ie.push([e,n])}(t,n.triggerParams);break;case ce.Visible:Z(e,t);break;case ce.Visibles:Z(e,t,{multiple:!0});break;case ce.Wait:!function(e,t,n="",r){setTimeout(()=>ue(e,t,ce.Wait,r),parseInt(n||"")||15e3)}(e,t,n.triggerParams,r)}}))}function fe(e,t){ue(e,t.target,ce.Click,"data-elb")}function me(e,t){t.target&&ue(e,t.target,ce.Submit,"data-elb")}function ge(e,t={}){const n=t.name||"elbLayer";window[n]||(window[n]=[]);const r=window[n];Array.isArray(r)&&r.length>0&&function(e,t){const n=[],r=[];t.forEach(e=>{!function(e){if(be(e)){const t=Array.from(e);return"string"==typeof t[0]&&t[0].startsWith("walker ")}return!1}(e)?r.push(e):n.push(e)}),n.forEach(t=>{pe(e,t)}),r.forEach(t=>{pe(e,t)}),t.length=0}(e,r)}function pe(e,t){null!=t&&""!==t&&"number"!=typeof t&&"string"!=typeof t&&v(()=>{if(be(t)){const n=Array.from(t);if(n.length>=1){const[t,r,o,s]=n;"string"==typeof t&&t.length>0&&te(e,t,r,o,s)}}else if("object"==typeof t&&null!==t){if(0===Object.keys(t).length)return;te(e,t)}},()=>{})()}function be(e){return null!=e&&"object"==typeof e&&"length"in e&&"number"==typeof e.length}var he={};function we(e={}){const t=e.prefix||"data-elb";return function(e){let n=e;const r={},o={},s={},i={},c={};function a(e){return Object.entries(e).map(([e,t])=>`${e}:${function(e){if(!m(e)||null===e)return"undefined";let t=String(e);return t=t.replace(/\\/g,"\\\\"),t=t.replace(/;/g,"\\;"),t=t.replace(/:/g,"\\:"),t=t.replace(/'/g,"\\'"),t}(t)}`).join(";")}const l={entity:e=>(n=e,l),data(e,t){const o=null!=n?n:"";return r[o]||(r[o]={}),p(e)?r[o][e]=t:Object.assign(r[o],e),l},action(e,t){if(p(e))if(m(t))o[e]=t;else if(e.includes(":")){const[t,n]=e.split(":",2);o[t]=n}else o[e]=e;else Object.assign(o,e);return l},context:(e,t)=>(p(e)?s[e]=t:Object.assign(s,e),l),globals:(e,t)=>(p(e)?i[e]=t:Object.assign(i,e),l),link:(e,t)=>(p(e)?c[e]=t:Object.assign(c,e),l),get(){const e={};return n&&(e[t]=n),Object.entries(r).forEach(([n,r])=>{if(Object.keys(r).length>0){e[n?`${t}-${n}`:`${t}-`]=a(r)}}),Object.keys(o).length>0&&(e[`${t}action`]=a(o)),Object.keys(s).length>0&&(e[`${t}context`]=a(s)),Object.keys(i).length>0&&(e[`${t}globals`]=a(i)),Object.keys(c).length>0&&(e[`${t}link`]=a(c)),e}};return l}}var ye,ke=async(e,t)=>{const n=function(e={}){const t=e.scope||document;return{prefix:"data-elb",pageview:!0,session:!0,elb:"elb",name:"walkerjs",elbLayer:"elbLayer",...e,scope:t}}(t.settings),r={...t,settings:n},o=n.scope,s={type:"browser",config:r,collector:e,destroy(){ee(e)}};if(!1!==n.elbLayer&&ge(e,{name:p(n.elbLayer)?n.elbLayer:"elbLayer"}),le(e,o),n.session){const t="boolean"==typeof n.session?{}:n.session;!function(e,t={}){const n=t.config||{},r=d(e.config.sessionStatic||{},t.data||{});var o,s,i;(o=$,s="SessionStart",i=e.hooks,function(...e){let t;const n="post"+s,r=i["pre"+s],c=i[n];return t=r?r({fn:o},...e):o(...e),c&&(t=c({fn:o,result:t},...e)),t})({...n,cb:(e,t,r)=>{let o;const s=n;return!1!==s.cb&&s.cb?o=s.cb(e,t,r):!1!==s.cb&&(o=r(e,t,r)),t&&(t.session=e,C(t,"session")),o},data:r,collector:e})}(e,{config:t})}await async function(e,t,n){const r=()=>{e(t,n),C(t,"ready")};"loading"!==document.readyState?r():document.addEventListener("DOMContentLoaded",r)}(ae,e,n);const i=e._destroy;e._destroy=()=>{var e;null==(e=s.destroy)||e.call(s),i&&i()};return{source:s,elb:(...t)=>{const[n,r,o,s,i,c]=t;return te(e,n,r,o,s,i,c)}}},ve=ke;return ye=i,((e,t,i,c)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let a of o(t))s.call(e,a)||a===i||n(e,a,{get:()=>t[a],enumerable:!(c=r(t,a))||c.enumerable});return e})(n({},"__esModule",{value:!0}),ye)})();
|
package/dist/index.d.mts
ADDED
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import * as _walkeros_core from '@walkeros/core';
|
|
2
|
+
import { Elb, WalkerOS, Collector, Source, Mapping as Mapping$1 } from '@walkeros/core';
|
|
3
|
+
import { DestinationWeb, Elb as Elb$1, SessionConfig, Walker, SessionCallback } from '@walkeros/web-core';
|
|
4
|
+
|
|
5
|
+
type Scope$1 = Element | Document;
|
|
6
|
+
type Trigger$1 = string;
|
|
7
|
+
interface BrowserPush<R = Promise<Elb.PushResult>> {
|
|
8
|
+
(event: WalkerOS.DeepPartialEvent): R;
|
|
9
|
+
(event: 'walker config', config: Partial<Collector.Config>): R;
|
|
10
|
+
(event: 'walker consent', consent: WalkerOS.Consent): R;
|
|
11
|
+
<K extends keyof _walkeros_core.Hooks.Functions>(event: 'walker hook', name: K, hookFn: _walkeros_core.Hooks.Functions[K]): R;
|
|
12
|
+
(event: 'walker user', user: WalkerOS.User): R;
|
|
13
|
+
(event: 'walker init', scope: Scope$1 | Scope$1[]): R;
|
|
14
|
+
(event: 'walker destination', destination: DestinationWeb.Destination | DestinationWeb.Init, config?: DestinationWeb.Config): R;
|
|
15
|
+
(event: 'walker run', state?: Partial<Collector.Instance>): R;
|
|
16
|
+
(event?: unknown, data?: BrowserPushData, options?: BrowserPushOptions, context?: BrowserPushContext, nested?: WalkerOS.Entities, custom?: WalkerOS.Properties): R;
|
|
17
|
+
}
|
|
18
|
+
type BrowserArguments<R = Promise<Elb.PushResult>> = (event?: unknown, data?: BrowserPushData, options?: BrowserPushOptions, context?: BrowserPushContext, nested?: WalkerOS.Entities, custom?: WalkerOS.Properties) => R;
|
|
19
|
+
type BrowserPushData = Elb.PushData | DestinationWeb.Destination | DestinationWeb.Init | Scope$1 | Array<Scope$1> | Trigger$1 | string | object;
|
|
20
|
+
type BrowserPushOptions = Trigger$1 | DestinationWeb.Config | string | object;
|
|
21
|
+
type BrowserPushContext = WalkerOS.OrderedProperties | Element;
|
|
22
|
+
type BrowserCommands<R = Promise<Elb.PushResult>> = CommandInit<R> | CommandDestination<R> | CommandRun<R>;
|
|
23
|
+
type CommandInit<R = Promise<Elb.PushResult>> = (event: 'walker init', scope: Scope$1 | Scope$1[]) => R;
|
|
24
|
+
type CommandDestination<R = Promise<Elb.PushResult>> = (event: 'walker destination', destination: DestinationWeb.Destination | DestinationWeb.Init, config?: DestinationWeb.Config) => R;
|
|
25
|
+
type CommandRun<R = Promise<Elb.PushResult>> = (event: 'walker run', state?: Partial<Collector.Instance>) => R;
|
|
26
|
+
type PushResult = Elb.PushResult;
|
|
27
|
+
type Layer = Elb.Layer;
|
|
28
|
+
|
|
29
|
+
interface BrowserSourceConfig extends Source.Config {
|
|
30
|
+
type: 'browser';
|
|
31
|
+
settings: Settings;
|
|
32
|
+
}
|
|
33
|
+
interface Config {
|
|
34
|
+
settings: Settings;
|
|
35
|
+
mapping?: Mapping;
|
|
36
|
+
}
|
|
37
|
+
interface Settings extends Record<string, unknown> {
|
|
38
|
+
prefix?: string;
|
|
39
|
+
scope?: Element | Document;
|
|
40
|
+
pageview?: boolean;
|
|
41
|
+
session?: boolean | SessionConfig;
|
|
42
|
+
elb?: string;
|
|
43
|
+
name?: string;
|
|
44
|
+
elbLayer?: boolean | string | Elb$1.Layer;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
type ELBLayer = Elb$1.Layer;
|
|
48
|
+
interface ELBLayerConfig {
|
|
49
|
+
name?: string;
|
|
50
|
+
}
|
|
51
|
+
declare global {
|
|
52
|
+
interface Window {
|
|
53
|
+
[key: string]: Elb$1.Layer | unknown;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
interface Mapping {
|
|
57
|
+
}
|
|
58
|
+
type Rule = Mapping$1.Rule<Mapping>;
|
|
59
|
+
type Rules = Mapping$1.Rules<Rule>;
|
|
60
|
+
type Trigger = Walker.Trigger;
|
|
61
|
+
type WalkerEvent = Walker.Event;
|
|
62
|
+
type Events = Walker.Events;
|
|
63
|
+
type Filter = Walker.Filter;
|
|
64
|
+
interface TriggerAction {
|
|
65
|
+
trigger: string;
|
|
66
|
+
triggerParams?: string;
|
|
67
|
+
action: string;
|
|
68
|
+
actionParams?: string;
|
|
69
|
+
}
|
|
70
|
+
type TriggerActions = Walker.TriggerActions;
|
|
71
|
+
type TriggersActionGroups = Walker.TriggersActionGroups;
|
|
72
|
+
type ScrollElements = Walker.ScrollElements;
|
|
73
|
+
type Attributes = Walker.Attributes;
|
|
74
|
+
type KeyVal = Walker.KeyVal;
|
|
75
|
+
type Scope = Document | Element;
|
|
76
|
+
|
|
77
|
+
type index_Attributes = Attributes;
|
|
78
|
+
type index_BrowserArguments<R = Promise<Elb.PushResult>> = BrowserArguments<R>;
|
|
79
|
+
type index_BrowserCommands<R = Promise<Elb.PushResult>> = BrowserCommands<R>;
|
|
80
|
+
type index_BrowserPush<R = Promise<Elb.PushResult>> = BrowserPush<R>;
|
|
81
|
+
type index_BrowserPushContext = BrowserPushContext;
|
|
82
|
+
type index_BrowserPushData = BrowserPushData;
|
|
83
|
+
type index_BrowserPushOptions = BrowserPushOptions;
|
|
84
|
+
type index_BrowserSourceConfig = BrowserSourceConfig;
|
|
85
|
+
type index_CommandDestination<R = Promise<Elb.PushResult>> = CommandDestination<R>;
|
|
86
|
+
type index_CommandInit<R = Promise<Elb.PushResult>> = CommandInit<R>;
|
|
87
|
+
type index_CommandRun<R = Promise<Elb.PushResult>> = CommandRun<R>;
|
|
88
|
+
type index_Config = Config;
|
|
89
|
+
type index_ELBLayer = ELBLayer;
|
|
90
|
+
type index_ELBLayerConfig = ELBLayerConfig;
|
|
91
|
+
type index_Events = Events;
|
|
92
|
+
type index_Filter = Filter;
|
|
93
|
+
type index_KeyVal = KeyVal;
|
|
94
|
+
type index_Layer = Layer;
|
|
95
|
+
type index_Mapping = Mapping;
|
|
96
|
+
type index_PushResult = PushResult;
|
|
97
|
+
type index_Rule = Rule;
|
|
98
|
+
type index_Rules = Rules;
|
|
99
|
+
type index_Scope = Scope;
|
|
100
|
+
type index_ScrollElements = ScrollElements;
|
|
101
|
+
declare const index_SessionCallback: typeof SessionCallback;
|
|
102
|
+
declare const index_SessionConfig: typeof SessionConfig;
|
|
103
|
+
type index_Settings = Settings;
|
|
104
|
+
type index_Trigger = Trigger;
|
|
105
|
+
type index_TriggerAction = TriggerAction;
|
|
106
|
+
type index_TriggerActions = TriggerActions;
|
|
107
|
+
type index_TriggersActionGroups = TriggersActionGroups;
|
|
108
|
+
type index_WalkerEvent = WalkerEvent;
|
|
109
|
+
declare namespace index {
|
|
110
|
+
export { type index_Attributes as Attributes, type index_BrowserArguments as BrowserArguments, type index_BrowserCommands as BrowserCommands, type index_BrowserPush as BrowserPush, type index_BrowserPushContext as BrowserPushContext, type index_BrowserPushData as BrowserPushData, type index_BrowserPushOptions as BrowserPushOptions, type index_BrowserSourceConfig as BrowserSourceConfig, type index_CommandDestination as CommandDestination, type index_CommandInit as CommandInit, type index_CommandRun as CommandRun, type index_Config as Config, type index_ELBLayer as ELBLayer, type index_ELBLayerConfig as ELBLayerConfig, type index_Events as Events, type index_Filter as Filter, type index_KeyVal as KeyVal, type index_Layer as Layer, type index_Mapping as Mapping, type index_PushResult as PushResult, type index_Rule as Rule, type index_Rules as Rules, type index_Scope as Scope, type index_ScrollElements as ScrollElements, index_SessionCallback as SessionCallback, index_SessionConfig as SessionConfig, type index_Settings as Settings, type index_Trigger as Trigger, type index_TriggerAction as TriggerAction, type index_TriggerActions as TriggerActions, type index_TriggersActionGroups as TriggersActionGroups, type index_WalkerEvent as WalkerEvent };
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
declare function getAllEvents(scope?: Scope, prefix?: string): Events;
|
|
114
|
+
declare function getEvents(target: Element, trigger: string, prefix?: string): Events;
|
|
115
|
+
declare function getGlobals(prefix?: string, scope?: Scope): WalkerOS.Properties;
|
|
116
|
+
|
|
117
|
+
interface TaggerConfig {
|
|
118
|
+
prefix?: string;
|
|
119
|
+
}
|
|
120
|
+
interface TaggerInstance {
|
|
121
|
+
entity: (name: string) => TaggerInstance;
|
|
122
|
+
data: ((key: string, value: WalkerOS.Property) => TaggerInstance) & ((data: WalkerOS.Properties) => TaggerInstance);
|
|
123
|
+
action: ((trigger: string, action?: string) => TaggerInstance) & ((actions: Record<string, string>) => TaggerInstance);
|
|
124
|
+
context: ((key: string, value: WalkerOS.Property) => TaggerInstance) & ((context: WalkerOS.Properties) => TaggerInstance);
|
|
125
|
+
globals: ((key: string, value: WalkerOS.Property) => TaggerInstance) & ((globals: WalkerOS.Properties) => TaggerInstance);
|
|
126
|
+
link: ((id: string, type: string) => TaggerInstance) & ((links: Record<string, string>) => TaggerInstance);
|
|
127
|
+
get: () => Record<string, string>;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Creates a new tagger instance for generating walkerOS data attributes.
|
|
131
|
+
*
|
|
132
|
+
* @param config The configuration for the tagger.
|
|
133
|
+
* @returns A new tagger instance.
|
|
134
|
+
*/
|
|
135
|
+
declare function createTagger(config?: TaggerConfig): (entity?: string) => TaggerInstance;
|
|
136
|
+
|
|
137
|
+
declare const sourceBrowser: Source.Init<BrowserSourceConfig, BrowserPush>;
|
|
138
|
+
|
|
139
|
+
export { index as SourceBrowser, type TaggerConfig, type TaggerInstance, createTagger, sourceBrowser as default, getAllEvents, getEvents, getGlobals, sourceBrowser };
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import * as _walkeros_core from '@walkeros/core';
|
|
2
|
+
import { Elb, WalkerOS, Collector, Source, Mapping as Mapping$1 } from '@walkeros/core';
|
|
3
|
+
import { DestinationWeb, Elb as Elb$1, SessionConfig, Walker, SessionCallback } from '@walkeros/web-core';
|
|
4
|
+
|
|
5
|
+
type Scope$1 = Element | Document;
|
|
6
|
+
type Trigger$1 = string;
|
|
7
|
+
interface BrowserPush<R = Promise<Elb.PushResult>> {
|
|
8
|
+
(event: WalkerOS.DeepPartialEvent): R;
|
|
9
|
+
(event: 'walker config', config: Partial<Collector.Config>): R;
|
|
10
|
+
(event: 'walker consent', consent: WalkerOS.Consent): R;
|
|
11
|
+
<K extends keyof _walkeros_core.Hooks.Functions>(event: 'walker hook', name: K, hookFn: _walkeros_core.Hooks.Functions[K]): R;
|
|
12
|
+
(event: 'walker user', user: WalkerOS.User): R;
|
|
13
|
+
(event: 'walker init', scope: Scope$1 | Scope$1[]): R;
|
|
14
|
+
(event: 'walker destination', destination: DestinationWeb.Destination | DestinationWeb.Init, config?: DestinationWeb.Config): R;
|
|
15
|
+
(event: 'walker run', state?: Partial<Collector.Instance>): R;
|
|
16
|
+
(event?: unknown, data?: BrowserPushData, options?: BrowserPushOptions, context?: BrowserPushContext, nested?: WalkerOS.Entities, custom?: WalkerOS.Properties): R;
|
|
17
|
+
}
|
|
18
|
+
type BrowserArguments<R = Promise<Elb.PushResult>> = (event?: unknown, data?: BrowserPushData, options?: BrowserPushOptions, context?: BrowserPushContext, nested?: WalkerOS.Entities, custom?: WalkerOS.Properties) => R;
|
|
19
|
+
type BrowserPushData = Elb.PushData | DestinationWeb.Destination | DestinationWeb.Init | Scope$1 | Array<Scope$1> | Trigger$1 | string | object;
|
|
20
|
+
type BrowserPushOptions = Trigger$1 | DestinationWeb.Config | string | object;
|
|
21
|
+
type BrowserPushContext = WalkerOS.OrderedProperties | Element;
|
|
22
|
+
type BrowserCommands<R = Promise<Elb.PushResult>> = CommandInit<R> | CommandDestination<R> | CommandRun<R>;
|
|
23
|
+
type CommandInit<R = Promise<Elb.PushResult>> = (event: 'walker init', scope: Scope$1 | Scope$1[]) => R;
|
|
24
|
+
type CommandDestination<R = Promise<Elb.PushResult>> = (event: 'walker destination', destination: DestinationWeb.Destination | DestinationWeb.Init, config?: DestinationWeb.Config) => R;
|
|
25
|
+
type CommandRun<R = Promise<Elb.PushResult>> = (event: 'walker run', state?: Partial<Collector.Instance>) => R;
|
|
26
|
+
type PushResult = Elb.PushResult;
|
|
27
|
+
type Layer = Elb.Layer;
|
|
28
|
+
|
|
29
|
+
interface BrowserSourceConfig extends Source.Config {
|
|
30
|
+
type: 'browser';
|
|
31
|
+
settings: Settings;
|
|
32
|
+
}
|
|
33
|
+
interface Config {
|
|
34
|
+
settings: Settings;
|
|
35
|
+
mapping?: Mapping;
|
|
36
|
+
}
|
|
37
|
+
interface Settings extends Record<string, unknown> {
|
|
38
|
+
prefix?: string;
|
|
39
|
+
scope?: Element | Document;
|
|
40
|
+
pageview?: boolean;
|
|
41
|
+
session?: boolean | SessionConfig;
|
|
42
|
+
elb?: string;
|
|
43
|
+
name?: string;
|
|
44
|
+
elbLayer?: boolean | string | Elb$1.Layer;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
type ELBLayer = Elb$1.Layer;
|
|
48
|
+
interface ELBLayerConfig {
|
|
49
|
+
name?: string;
|
|
50
|
+
}
|
|
51
|
+
declare global {
|
|
52
|
+
interface Window {
|
|
53
|
+
[key: string]: Elb$1.Layer | unknown;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
interface Mapping {
|
|
57
|
+
}
|
|
58
|
+
type Rule = Mapping$1.Rule<Mapping>;
|
|
59
|
+
type Rules = Mapping$1.Rules<Rule>;
|
|
60
|
+
type Trigger = Walker.Trigger;
|
|
61
|
+
type WalkerEvent = Walker.Event;
|
|
62
|
+
type Events = Walker.Events;
|
|
63
|
+
type Filter = Walker.Filter;
|
|
64
|
+
interface TriggerAction {
|
|
65
|
+
trigger: string;
|
|
66
|
+
triggerParams?: string;
|
|
67
|
+
action: string;
|
|
68
|
+
actionParams?: string;
|
|
69
|
+
}
|
|
70
|
+
type TriggerActions = Walker.TriggerActions;
|
|
71
|
+
type TriggersActionGroups = Walker.TriggersActionGroups;
|
|
72
|
+
type ScrollElements = Walker.ScrollElements;
|
|
73
|
+
type Attributes = Walker.Attributes;
|
|
74
|
+
type KeyVal = Walker.KeyVal;
|
|
75
|
+
type Scope = Document | Element;
|
|
76
|
+
|
|
77
|
+
type index_Attributes = Attributes;
|
|
78
|
+
type index_BrowserArguments<R = Promise<Elb.PushResult>> = BrowserArguments<R>;
|
|
79
|
+
type index_BrowserCommands<R = Promise<Elb.PushResult>> = BrowserCommands<R>;
|
|
80
|
+
type index_BrowserPush<R = Promise<Elb.PushResult>> = BrowserPush<R>;
|
|
81
|
+
type index_BrowserPushContext = BrowserPushContext;
|
|
82
|
+
type index_BrowserPushData = BrowserPushData;
|
|
83
|
+
type index_BrowserPushOptions = BrowserPushOptions;
|
|
84
|
+
type index_BrowserSourceConfig = BrowserSourceConfig;
|
|
85
|
+
type index_CommandDestination<R = Promise<Elb.PushResult>> = CommandDestination<R>;
|
|
86
|
+
type index_CommandInit<R = Promise<Elb.PushResult>> = CommandInit<R>;
|
|
87
|
+
type index_CommandRun<R = Promise<Elb.PushResult>> = CommandRun<R>;
|
|
88
|
+
type index_Config = Config;
|
|
89
|
+
type index_ELBLayer = ELBLayer;
|
|
90
|
+
type index_ELBLayerConfig = ELBLayerConfig;
|
|
91
|
+
type index_Events = Events;
|
|
92
|
+
type index_Filter = Filter;
|
|
93
|
+
type index_KeyVal = KeyVal;
|
|
94
|
+
type index_Layer = Layer;
|
|
95
|
+
type index_Mapping = Mapping;
|
|
96
|
+
type index_PushResult = PushResult;
|
|
97
|
+
type index_Rule = Rule;
|
|
98
|
+
type index_Rules = Rules;
|
|
99
|
+
type index_Scope = Scope;
|
|
100
|
+
type index_ScrollElements = ScrollElements;
|
|
101
|
+
declare const index_SessionCallback: typeof SessionCallback;
|
|
102
|
+
declare const index_SessionConfig: typeof SessionConfig;
|
|
103
|
+
type index_Settings = Settings;
|
|
104
|
+
type index_Trigger = Trigger;
|
|
105
|
+
type index_TriggerAction = TriggerAction;
|
|
106
|
+
type index_TriggerActions = TriggerActions;
|
|
107
|
+
type index_TriggersActionGroups = TriggersActionGroups;
|
|
108
|
+
type index_WalkerEvent = WalkerEvent;
|
|
109
|
+
declare namespace index {
|
|
110
|
+
export { type index_Attributes as Attributes, type index_BrowserArguments as BrowserArguments, type index_BrowserCommands as BrowserCommands, type index_BrowserPush as BrowserPush, type index_BrowserPushContext as BrowserPushContext, type index_BrowserPushData as BrowserPushData, type index_BrowserPushOptions as BrowserPushOptions, type index_BrowserSourceConfig as BrowserSourceConfig, type index_CommandDestination as CommandDestination, type index_CommandInit as CommandInit, type index_CommandRun as CommandRun, type index_Config as Config, type index_ELBLayer as ELBLayer, type index_ELBLayerConfig as ELBLayerConfig, type index_Events as Events, type index_Filter as Filter, type index_KeyVal as KeyVal, type index_Layer as Layer, type index_Mapping as Mapping, type index_PushResult as PushResult, type index_Rule as Rule, type index_Rules as Rules, type index_Scope as Scope, type index_ScrollElements as ScrollElements, index_SessionCallback as SessionCallback, index_SessionConfig as SessionConfig, type index_Settings as Settings, type index_Trigger as Trigger, type index_TriggerAction as TriggerAction, type index_TriggerActions as TriggerActions, type index_TriggersActionGroups as TriggersActionGroups, type index_WalkerEvent as WalkerEvent };
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
declare function getAllEvents(scope?: Scope, prefix?: string): Events;
|
|
114
|
+
declare function getEvents(target: Element, trigger: string, prefix?: string): Events;
|
|
115
|
+
declare function getGlobals(prefix?: string, scope?: Scope): WalkerOS.Properties;
|
|
116
|
+
|
|
117
|
+
interface TaggerConfig {
|
|
118
|
+
prefix?: string;
|
|
119
|
+
}
|
|
120
|
+
interface TaggerInstance {
|
|
121
|
+
entity: (name: string) => TaggerInstance;
|
|
122
|
+
data: ((key: string, value: WalkerOS.Property) => TaggerInstance) & ((data: WalkerOS.Properties) => TaggerInstance);
|
|
123
|
+
action: ((trigger: string, action?: string) => TaggerInstance) & ((actions: Record<string, string>) => TaggerInstance);
|
|
124
|
+
context: ((key: string, value: WalkerOS.Property) => TaggerInstance) & ((context: WalkerOS.Properties) => TaggerInstance);
|
|
125
|
+
globals: ((key: string, value: WalkerOS.Property) => TaggerInstance) & ((globals: WalkerOS.Properties) => TaggerInstance);
|
|
126
|
+
link: ((id: string, type: string) => TaggerInstance) & ((links: Record<string, string>) => TaggerInstance);
|
|
127
|
+
get: () => Record<string, string>;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Creates a new tagger instance for generating walkerOS data attributes.
|
|
131
|
+
*
|
|
132
|
+
* @param config The configuration for the tagger.
|
|
133
|
+
* @returns A new tagger instance.
|
|
134
|
+
*/
|
|
135
|
+
declare function createTagger(config?: TaggerConfig): (entity?: string) => TaggerInstance;
|
|
136
|
+
|
|
137
|
+
declare const sourceBrowser: Source.Init<BrowserSourceConfig, BrowserPush>;
|
|
138
|
+
|
|
139
|
+
export { index as SourceBrowser, type TaggerConfig, type TaggerInstance, createTagger, sourceBrowser as default, getAllEvents, getEvents, getGlobals, sourceBrowser };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";function _array_like_to_array(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}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 asyncGeneratorStep(e,t,n,r,o,i,a){try{var c=e[i](a),s=c.value}catch(e){return void n(e)}c.done?t(s):Promise.resolve(s).then(r,o)}function _async_to_generator(e){return function(){var t=this,n=arguments;return new Promise(function(r,o){var i=e.apply(t,n);function a(e){asyncGeneratorStep(i,r,o,a,c,"next",e)}function c(e){asyncGeneratorStep(i,r,o,a,c,"throw",e)}a(void 0)})}}function _define_property(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function _instanceof(e,t){return null!=t&&"undefined"!=typeof Symbol&&t[Symbol.hasInstance]?!!t[Symbol.hasInstance](e):e instanceof t}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 n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,o,i=[],a=!0,c=!1;try{for(n=n.call(e);!(a=(r=n.next()).done)&&(i.push(r.value),!t||i.length!==t);a=!0);}catch(e){c=!0,o=e}finally{try{a||null==n.return||n.return()}finally{if(c)throw o}}return i}}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 n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){_define_property(e,t,n[t])})}return e}function ownKeys(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function _object_spread_props(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):ownKeys(Object(t)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}),e}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 n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(n):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?_array_like_to_array(e,t):void 0}}function _ts_generator(e,t){var n,r,o,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},a=Object.create(("function"==typeof Iterator?Iterator:Object).prototype);return a.next=c(0),a.throw=c(1),a.return=c(2),"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function c(c){return function(s){return function(c){if(n)throw new TypeError("Generator is already executing.");for(;a&&(a=0,c[0]&&(i=0)),i;)try{if(n=1,r&&(o=2&c[0]?r.return:c[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,c[1])).done)return o;switch(r=0,o&&(c=[2&c[0],o.value]),c[0]){case 0:case 1:o=c;break;case 4:return i.label++,{value:c[1],done:!1};case 5:i.label++,r=c[1],c=[0];continue;case 7:c=i.ops.pop(),i.trys.pop();continue;default:if(!(o=i.trys,(o=o.length>0&&o[o.length-1])||6!==c[0]&&2!==c[0])){i=0;continue}if(3===c[0]&&(!o||c[1]>o[0]&&c[1]<o[3])){i.label=c[1];break}if(6===c[0]&&i.label<o[1]){i.label=o[1],o=c;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(c);break}o[2]&&i.ops.pop(),i.trys.pop();continue}c=t.call(e,i)}catch(e){c=[6,e],r=0}finally{n=o=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}([c,s])}}}var Source=function(){var e,t,n=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};n=_object_spread({},_e,n);var r=Object.entries(t).reduce(function(t,r){var o=_sliced_to_array(r,2),i=o[0],a=o[1],c=e[i];return n.merge&&Array.isArray(c)&&Array.isArray(a)?t[i]=a.reduce(function(e,t){return e.includes(t)?e:_to_consumable_array(e).concat([t])},_to_consumable_array(c)):(n.extend||i in e)&&(t[i]=a),t},{});return n.shallow?_object_spread({},e,r):(Object.assign(e,r),e)},r=function(e){return Array.isArray(e)},o=function(e){return void 0!==e},i=function(e){return"object"==(void 0===e?"undefined":_type_of(e))&&null!==e&&!r(e)&&"[object Object]"===Object.prototype.toString.call(e)},a=function(e){return"string"==typeof e},c=function(e){if("true"===e)return!0;if("false"===e)return!1;var t=Number(e);return e==t&&""!==e?t:String(e)},s=function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:6,t="";t.length<e;)t+=(36*Math.random()|0).toString(36);return t},u=function(e,t,n){return function(){for(var r=arguments.length,o=new Array(r),i=0;i<r;i++)o[i]=arguments[i];try{return e.apply(void 0,_to_consumable_array(o))}catch(e){if(!t)return;return t(e)}finally{null==n||n()}}},l=function(e){return e?e.trim().replace(/^'|'$/g,"").trim():""},f=function(e,t,n,r){var o,i,a,c=n||[];if(n||(c=e.on[t]||[],Object.values(e.destinations).forEach(function(e){var n,r=null===(n=e.config.on)||void 0===n?void 0:n[t];r&&(c=c.concat(r))})),c.length)switch(t){case he.Commands.Consent:o=e,i=c,a=r||o.consent,i.forEach(function(e){Object.keys(a).filter(function(t){return t in e}).forEach(function(t){u(e[t])(o,a)})});break;case he.Commands.Ready:case he.Commands.Run:!function(e,t){e.allowed&&t.forEach(function(t){u(t)(e)})}(e,c);break;case he.Commands.Session:!function(e,t){e.session&&t.forEach(function(t){u(t)(e,e.session)})}(e,c)}},d=function(e,t){return(e.getAttribute(t)||"").trim()},p=function(e){var t,n=getComputedStyle(e);if("none"===n.display)return!1;if("visible"!==n.visibility)return!1;if(n.opacity&&Number(n.opacity)<.1)return!1;var r=window.innerHeight,o=e.getBoundingClientRect(),i=o.height,a=o.y,c=a+i,s={x:o.x+e.offsetWidth/2,y:o.y+e.offsetHeight/2};if(i<=r){if(e.offsetWidth+o.width===0||e.offsetHeight+o.height===0)return!1;if(s.x<0)return!1;if(s.x>(document.documentElement.clientWidth||window.innerWidth))return!1;if(s.y<0)return!1;if(s.y>(document.documentElement.clientHeight||window.innerHeight))return!1;t=document.elementFromPoint(s.x,s.y)}else{var u=r/2;if(a<0&&c<u)return!1;if(c>r&&a>u)return!1;t=document.elementFromPoint(s.x,r/2)}if(t)do{if(t===e)return!0}while(t=t.parentElement);return!1},v=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.cb,n=e.consent,i=e.collector,a=e.storage,c=(null==i?void 0:i.push)||we;if(!n)return g((a?_:m)(e),i,t);var s,u,l,f=(s=e,u=t,function(e,t){if(!o(l)||l!==(null==e?void 0:e.group)){l=null==e?void 0:e.group;var n=function(){return m(s)};return s.consent&&function(e){var t=_object_spread({},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},arguments.length>2&&void 0!==arguments[2]?arguments[2]:{}),n={},r=void 0===e;return Object.keys(t).forEach(function(o){t[o]&&(n[o]=!0,e&&e[o]&&(r=!0))}),!!r&&n}((r(s.consent)?s.consent:[s.consent]).reduce(function(e,t){return _object_spread_props(_object_spread({},e),_define_property({},t,!0))},{}),t)&&(n=function(){return _(s)}),g(n(),e,u)}});c("walker on","consent",(r(n)?n:[n]).reduce(function(e,t){return _object_spread_props(_object_spread({},e),_define_property({},t,f))},{}))},g=function(e,t,n){return!1===n?e:(n||(n=ke),n(e,t,ke))},y=function(e){var t,n,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:be.Utils.Storage.Session;function o(e){try{return JSON.parse(e||"")}catch(r){var t=1,n="";return e&&(t=0,n=e),{e:t,v:n}}}switch(r){case be.Utils.Storage.Cookie:var i;t=decodeURIComponent((null===(i=document.cookie.split("; ").find(function(t){return t.startsWith(e+"=")}))||void 0===i?void 0:i.split("=")[1])||"");break;case be.Utils.Storage.Local:n=o(window.localStorage.getItem(e));break;case be.Utils.Storage.Session:n=o(window.sessionStorage.getItem(e))}return n&&(t=n.v,0!=n.e&&n.e<Date.now()&&(function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:be.Utils.Storage.Session;switch(t){case be.Utils.Storage.Cookie:b(e,"",0,t);break;case be.Utils.Storage.Local:window.localStorage.removeItem(e);break;case be.Utils.Storage.Session:window.sessionStorage.removeItem(e)}}(e,r),t="")),c(t||"")},b=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:30,r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:be.Utils.Storage.Session,o=arguments.length>4?arguments[4]:void 0,i={e:Date.now()+6e4*n,v:String(t)},a=JSON.stringify(i);switch(r){case be.Utils.Storage.Cookie:t="object"==(void 0===t?"undefined":_type_of(t))?JSON.stringify(t):t;var c="".concat(e,"=").concat(encodeURIComponent(t),"; max-age=").concat(60*n,"; path=/; SameSite=Lax; secure");o&&(c+="; domain="+o),document.cookie=c;break;case be.Utils.Storage.Local:window.localStorage.setItem(e,a);break;case be.Utils.Storage.Session:window.sessionStorage.setItem(e,a)}return y(e,r)},_=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=Date.now(),n=e.length,r=void 0===n?30:n,o=e.deviceKey,i=void 0===o?"elbDeviceId":o,a=e.deviceStorage,c=void 0===a?"local":a,l=e.deviceAge,f=void 0===l?30:l,d=e.sessionKey,p=void 0===d?"elbSessionId":d,v=e.sessionStorage,g=void 0===v?"local":v,_=e.pulse,h=void 0!==_&&_,w=m(e),k=!1,S=u(function(e,t,n){var r=y(e,n);return r||(r=s(8),b(e,r,1440*t,n)),String(r)})(i,f,c),j=u(function(e,n){var o=JSON.parse(String(y(e,n)));return h||(o.isNew=!1,w.marketing&&(Object.assign(o,w),k=!0),k||o.updated+6e4*r<t?(delete o.id,delete o.referrer,o.start=t,o.count++,o.runs=1,k=!0):o.runs++),o},function(){k=!0})(p,g)||{},O={id:s(12),start:t,isNew:!0,count:1,runs:1},x=Object.assign(O,w,j,{device:S},{isStart:k,storage:!0,updated:t},e.data);return b(p,JSON.stringify(x),2*r,g),x},m=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.isStart||!1,r={isStart:t,storage:!1};if(!1===e.isStart)return r;if(!t&&"navigate"!==_sliced_to_array(performance.getEntriesByType("navigation"),1)[0].type)return r;var o=new URL(e.url||window.location.href),i=e.referrer||document.referrer,a=i&&new URL(i).hostname,c=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r="clickId",o={},i={utm_campaign:"campaign",utm_content:"content",utm_medium:"medium",utm_source:"source",utm_term:"term",dclid:r,fbclid:r,gclid:r,msclkid:r,ttclid:r,twclid:r,igshid:r,sclid:r};return Object.entries(n(i,t)).forEach(function(t){var n=_sliced_to_array(t,2),i=n[0],a=n[1],c=e.searchParams.get(i);c&&(a===r&&(a=i,o[r]=i),o[a]=c)}),o}(o,e.parameters);if(Object.keys(c).length&&(c.marketing||(c.marketing=!0),t=!0),!t){var u=e.domains||[];u.push(o.hostname),t=!u.includes(a)}return t?Object.assign({isStart:t,storage:!1,start:Date.now(),id:s(12),referrer:a},c,e.data):r},h=function(e,t){return e+(t=null!=t?(!(arguments.length>2&&void 0!==arguments[2])||arguments[2]?"-":"")+t:"")},w=function(e,t,n){var o=d(t,h(e,n,!(arguments.length>3&&void 0!==arguments[3])||arguments[3]))||"";return L(o).reduce(function(e,n){var o=_sliced_to_array(I(n),2),i=o[0],a=o[1];if(!i)return e;if(a||(i.endsWith(":")&&(i=i.slice(0,-1)),a=""),a.startsWith("#")){a=a.slice(1);try{var s=t[a];s||"selected"!==a||(s=t.options[t.selectedIndex].text),a=String(s)}catch(e){a=""}}return i.endsWith("[]")?(i=i.slice(0,-2),r(e[i])||(e[i]=[]),e[i].push(c(a))):e[i]=c(a),e},{})},k=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:document.body,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:he.Commands.Prefix,n=[],r=he.Commands.Action,o="[".concat(h(t,r,!1),"]"),i=function(e){Object.keys(w(t,e,r,!1)).forEach(function(r){n=n.concat(S(e,r,t))})};return e!==document&&e.matches(o)&&i(e),P(e,o,i),n},S=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:he.Commands.Prefix,r=[],o=A(n,e,t);return o?(o.forEach(function(o){var i=L(o.actionParams||"",",").reduce(function(e,t){return e[l(t)]=!0,e},{}),a=x(n,e,i);if(!a.length){var c="page",s="[".concat(h(n,c),"]"),u=_sliced_to_array(E(e,s,n,c),2),f=u[0],d=u[1];a.push({type:c,data:f,nested:[],context:d})}a.forEach(function(e){r.push({entity:e.type,action:o.action,data:e.data,trigger:t,context:e.context,nested:e.nested})})}),r):r},j=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:he.Commands.Prefix,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:document,r=h(e,he.Commands.Globals,!1),o="[".concat(r,"]"),i={};return P(t,o,function(t){i=n(i,w(e,t,he.Commands.Globals,!1))}),i},O=function(e){var t={};return L(e).forEach(function(e){var n=_sliced_to_array(I(e),2),r=n[0],o=n[1],i=_sliced_to_array(U(r),2),a=i[0],c=i[1];if(a){var s=_sliced_to_array(U(o||""),2),u=s[0],l=s[1];u=u||a,t[a]||(t[a]=[]),t[a].push({trigger:a,triggerParams:c,action:u,actionParams:l})}}),t},x=function(e,t,n){var r=[],o=t;for(n=0!==Object.keys(n||{}).length?n:void 0;o;){var i=Se(e,o,t,n);i&&r.push(i),o=C(e,o)}return r},C=function(e,t){var n=h(e,he.Commands.Link,!1);if(t.matches("[".concat(n,"]"))){var r=_sliced_to_array(I(d(t,n)),2),o=r[0];if("child"===r[1])return document.querySelector("[".concat(n,'="').concat(o,':parent"]'))}return!t.parentElement&&t.getRootNode&&_instanceof(t.getRootNode(),ShadowRoot)?t.getRootNode().host:t.parentElement},E=function(e,t,r,o){for(var i={},a={},c=e,s="[".concat(h(r,he.Commands.Context,!1),"]"),u=0;c;)c.matches(t)&&(i=n(w(r,c,""),i),i=n(w(r,c,o),i)),c.matches(s)&&(Object.entries(w(r,c,he.Commands.Context,!1)).forEach(function(e){var t=_sliced_to_array(e,2),n=t[0],r=t[1];r&&!a[n]&&(a[n]=[r,u])}),++u),c=C(r,c);return[i,a]},P=function(e,t,n){e.querySelectorAll(t).forEach(n)},A=function(e,t,n){for(var r=t;r;){var o=d(r,h(e,he.Commands.Action,!1)),i=O(o);if(i[n]||"click"!==n)return i[n];r=C(e,r)}return[]},L=function(e){if(!e)return[];var t=new RegExp("(?:[^".concat(arguments.length>1&&void 0!==arguments[1]?arguments[1]:";","']+|'[^']*')+"),"ig");return e.match(t)||[]},I=function(e){var t=_sliced_to_array(e.split(/:(.+)/,2),2),n=t[0],r=t[1];return[l(n),l(r)]},U=function(e){var t=_sliced_to_array(e.split("(",2),2),n=t[0],r=t[1];return[n,r?r.slice(0,-1):""]},W=function(e){var t=Date.now(),n=Ce.get(e);return(!n||t-n.lastChecked>500)&&(n={isVisible:p(e),lastChecked:t},Ce.set(e,n)),n.isVisible},D=function(e){if(window.IntersectionObserver)return u(function(){return new window.IntersectionObserver(function(t){t.forEach(function(t){R(e,t)})},{rootMargin:"0px",threshold:[0,.5]})},function(){})()},R=function(e,t){var n,r=t.target,o=e._visibilityState;if(o){var i=o.timers.get(r);if(t.intersectionRatio>0){var a=Date.now(),c=xe.get(r);if((!c||a-c.lastChecked>1e3)&&(c={isLarge:r.offsetHeight>window.innerHeight,lastChecked:a},xe.set(r,c)),t.intersectionRatio>=.5||c.isLarge&&W(r)){var s,u=null===(s=o.elementConfigs)||void 0===s?void 0:s.get(r);if((null==u?void 0:u.multiple)&&u.blocked)return;if(!i){var l=window.setTimeout(function(){return _async_to_generator(function(){var t,n;return _ts_generator(this,function(i){switch(i.label){case 0:return W(r)?[4,K(e,r,Pe.Visible,"data-elb")]:[3,2];case 1:i.sent(),(null==(n=null===(t=o.elementConfigs)||void 0===t?void 0:t.get(r))?void 0:n.multiple)?n.blocked=!0:function(e,t){var n=e._visibilityState;if(n){n.observer&&n.observer.unobserve(t);var r=n.timers.get(t);r&&(clearTimeout(r),n.timers.delete(t)),xe.delete(t),Ce.delete(t)}}(e,r),i.label=2;case 2:return[2]}})})()},o.duration);o.timers.set(r,l)}return}}i&&(clearTimeout(i),o.timers.delete(r));var f=null===(n=o.elementConfigs)||void 0===n?void 0:n.get(r);(null==f?void 0:f.multiple)&&(f.blocked=!1)}},H=function(e,t){var n,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{multiple:!1},o=e._visibilityState;(null==o?void 0:o.observer)&&t&&(o.elementConfigs||(o.elementConfigs=new WeakMap),o.elementConfigs.set(t,{multiple:null!==(n=r.multiple)&&void 0!==n&&n,blocked:!1}),o.observer.observe(t))},N=function(e){var t=e._visibilityState;t&&(t.observer&&t.observer.disconnect(),delete e._visibilityState)},T=function(e,t,n,r,c,s,u){if(a(t)&&t.startsWith("walker ")){if("walker config"===t)return e.push("walker config",n);if("walker consent"===t)return e.push("walker consent",n);if("walker user"===t)return e.push("walker user",n);if("walker run"===t)return e.push("walker run",n)}if(i(t)){var l=t;return l.source||(l.source=V()),e.push(l)}if(a(t)&&t.length>0){var f={event:t,data:M(n||{}),context:G(c||{}),custom:u,nested:s,source:V()};return a(r)&&(f.trigger=r),e.push(f)}if(!o(t))return Promise.resolve({ok:!0,successful:[],queued:[],failed:[]});var d={event:String(t||""),data:M(n||{}),context:G(c||{}),custom:u,nested:s,source:V()};return a(r)&&(d.trigger=r),e.push(d)},M=function(e){return e?(n={},(void 0===(t=e)?"undefined":_type_of(t))==(void 0===n?"undefined":_type_of(n))?e:{}):{};var t,n},G=function(e){return e?(t=e)===document||_instanceof(t,Element)?{}:i(e)&&Object.keys(e).length?e:{}:{};var t},V=function(){return{type:"browser",id:window.location.href,previous_id:document.referrer}},J=function(e,t,n){return _async_to_generator(function(){var r;return _ts_generator(this,function(o){return r=function(){e(t,n),f(t,"ready")},"loading"!==document.readyState?r():document.addEventListener("DOMContentLoaded",r),[2]})})()},q=function(e,t){var n=t.prefix,r=t.scope;if(t.pageview){var o=_sliced_to_array(function(e,t){var n=window.location,r="page",o=t===document?document.body:t,i=_sliced_to_array(E(o,"[".concat(h(e,r),"]"),e,r),2),a=i[0],c=i[1];return a.domain=n.hostname,a.title=document.title,a.referrer=document.referrer,n.search&&(a.search=n.search),n.hash&&(a.hash=n.hash),[a,c]}(n,r),2),i=o[0],a=o[1];T(e,"page view",i,Pe.Load,a)}B(e,n,r)},B=function(e,t,n){Ee=[],N(e),function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1e3;e._visibilityState||(e._visibilityState={observer:D(e),timers:new WeakMap,duration:t})}(e,1e3);var r=h(t,he.Commands.Action,!1),o=n||document;o!==document&&F(e,o,r,t),o.querySelectorAll("[".concat(r,"]")).forEach(function(n){return F(e,n,r,t)}),Ee.length&&te(e,o)},K=function(e,t,n,r){return _async_to_generator(function(){var o;return _ts_generator(this,function(i){return o=S(t,n,r),[2,Promise.all(o.map(function(t){return T(e,_object_spread_props(_object_spread({event:"".concat(t.entity," ").concat(t.action)},t),{trigger:n}))}))]})})()},F=function(e,t,n,r){var o=d(t,n);o&&Object.values(O(o)).forEach(function(n){return n.forEach(function(n){switch(n.trigger){case Pe.Hover:Y(e,t,r);break;case Pe.Load:z(e,t,r);break;case Pe.Pulse:Q(e,t,n.triggerParams,r);break;case Pe.Scroll:X(t,n.triggerParams);break;case Pe.Visible:H(e,t);break;case Pe.Visibles:H(e,t,{multiple:!0});break;case Pe.Wait:ee(e,t,n.triggerParams,r)}})})},$=function(e,t){K(e,t.target,Pe.Click,"data-elb")},Y=function(e,t,n){t.addEventListener("mouseenter",u(function(t){_instanceof(t.target,Element)&&K(e,t.target,Pe.Hover,n)}))},z=function(e,t,n){K(e,t,Pe.Load,n)},Q=function(e,t){var n=arguments.length>3?arguments[3]:void 0;setInterval(function(){document.hidden||K(e,t,Pe.Pulse,n)},parseInt((arguments.length>2&&void 0!==arguments[2]?arguments[2]:"")||"")||15e3)},X=function(e){var t=parseInt((arguments.length>1&&void 0!==arguments[1]?arguments[1]:"")||"")||50;t<0||t>100||Ee.push([e,t])},Z=function(e,t){t.target&&K(e,t.target,Pe.Submit,"data-elb")},ee=function(e,t){var n=arguments.length>3?arguments[3]:void 0;setTimeout(function(){return K(e,t,Pe.Wait,n)},parseInt((arguments.length>2&&void 0!==arguments[2]?arguments[2]:"")||"")||15e3)},te=function(e,t){var n=function(e,t){return e.filter(function(e){var n=_sliced_to_array(e,2),r=n[0],o=n[1],i=window.scrollY+window.innerHeight,a=r.offsetTop;if(i<a)return!0;var c=r.clientHeight;return!(100*(1-(a+c-i)/(c||1))>=o)||(K(t,r,Pe.Scroll,"data-elb"),!1)})};je||(je=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1e3,n=null;return function(){for(var r=arguments.length,o=new Array(r),i=0;i<r;i++)o[i]=arguments[i];if(null===n)return n=setTimeout(function(){n=null},t),e.apply(void 0,_to_consumable_array(o))}}(function(){Ee=n.call(t,Ee,e)}),t.addEventListener("scroll",je))},ne=function(e,t){var n=[],r=[];t.forEach(function(e){oe(e)?n.push(e):r.push(e)}),n.forEach(function(t){re(e,t)}),r.forEach(function(t){re(e,t)}),t.length=0},re=function(e,t){null!=t&&""!==t&&"number"!=typeof t&&"string"!=typeof t&&u(function(){if(ie(t)){var n=Array.from(t);if(n.length>=1){var r=_sliced_to_array(n,4),o=r[0],i=r[1],a=r[2],c=r[3];"string"==typeof o&&o.length>0&&T(e,o,i,a,c)}}else if("object"===(void 0===t?"undefined":_type_of(t))&&null!==t){if(0===Object.keys(t).length)return;T(e,t)}},function(){})()},oe=function(e){if(ie(e)){var t=Array.from(e);return"string"==typeof t[0]&&t[0].startsWith("walker ")}return!1},ie=function(e){return null!=e&&"object"===(void 0===e?"undefined":_type_of(e))&&"length"in e&&"number"==typeof e.length},ae=function(e){var t,r,o,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},a=i.config||{},c=n(e.config.sessionStatic||{},i.data||{}),s=(t=v,r="SessionStart",o=e.hooks,function(){for(var e=arguments.length,n=new Array(e),i=0;i<e;i++)n[i]=arguments[i];var a,c="post"+r,s=o["pre"+r],u=o[c];return a=s?s.apply(void 0,[{fn:t}].concat(_to_consumable_array(n))):t.apply(void 0,_to_consumable_array(n)),u&&(a=u.apply(void 0,[{fn:t,result:a}].concat(_to_consumable_array(n)))),a})(_object_spread_props(_object_spread({},a),{cb:function(e,t,n){var r,o=a;return!1!==o.cb&&o.cb?r=o.cb(e,t,n):!1!==o.cb&&(r=n(e,t,n)),t&&(t.session=e,f(t,"session")),r},data:c,collector:e}));return s},ce=function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).prefix||"data-elb";return function(t){var n=t,r={},i={},c={},s={},u={};function l(e){return Object.entries(e).map(function(e){var t=_sliced_to_array(e,2),n=t[0],r=t[1];return"".concat(n,":").concat(function(e){if(!o(e)||null===e)return"undefined";var t=String(e);return(t=(t=(t=t.replace(/\\/g,"\\\\")).replace(/;/g,"\\;")).replace(/:/g,"\\:")).replace(/'/g,"\\'")}(r))}).join(";")}var f={entity:function(e){return n=e,f},data:function(e,t){var o=null!=n?n:"";return r[o]||(r[o]={}),a(e)?r[o][e]=t:Object.assign(r[o],e),f},action:function(e,t){if(a(e))if(o(t))i[e]=t;else if(e.includes(":")){var n=_sliced_to_array(e.split(":",2),2),r=n[0],c=n[1];i[r]=c}else i[e]=e;else Object.assign(i,e);return f},context:function(e,t){return a(e)?c[e]=t:Object.assign(c,e),f},globals:function(e,t){return a(e)?s[e]=t:Object.assign(s,e),f},link:function(e,t){return a(e)?u[e]=t:Object.assign(u,e),f},get:function(){var t={};return n&&(t[e]=n),Object.entries(r).forEach(function(n){var r=_sliced_to_array(n,2),o=r[0],i=r[1];if(Object.keys(i).length>0){var a=o?"".concat(e,"-").concat(o):"".concat(e,"-");t[a]=l(i)}}),Object.keys(i).length>0&&(t["".concat(e,"action")]=l(i)),Object.keys(c).length>0&&(t["".concat(e,"context")]=l(c)),Object.keys(s).length>0&&(t["".concat(e,"globals")]=l(s)),Object.keys(u).length>0&&(t["".concat(e,"link")]=l(u)),t}};return f}},se=Object.defineProperty,ue=Object.getOwnPropertyDescriptor,le=Object.getOwnPropertyNames,fe=Object.prototype.hasOwnProperty,de={};!function(e,t){for(var n in t)se(e,n,{get:t[n],enumerable:!0})}(de,{SourceBrowser:function(){return Ae},createTagger:function(){return ce},default:function(){return Ie},getAllEvents:function(){return k},getEvents:function(){return S},getGlobals:function(){return j},sourceBrowser:function(){return Le}});var pe,ve,ge=Object.getOwnPropertyNames,ye=(e={"package.json":function(e,t){t.exports={name:"@walkeros/core",description:"Core types and platform-agnostic utilities for walkerOS",version:"0.0.7",main:"./dist/index.js",module:"./dist/index.mjs",types:"./dist/index.d.ts",license:"MIT",files:["dist/**"],scripts:{build:"tsup --silent",clean:"rm -rf .turbo && rm -rf node_modules && rm -rf dist",dev:"jest --watchAll --colors",lint:'tsc && eslint "**/*.ts*"',test:"jest",update:"npx npm-check-updates -u && npm update"},dependencies:{},devDependencies:{},repository:{url:"git+https://github.com/elbwalker/walkerOS.git",directory:"packages/core"},author:"elbwalker <hello@elbwalker.com>",homepage:"https://github.com/elbwalker/walkerOS#readme",bugs:{url:"https://github.com/elbwalker/walkerOS/issues"},keywords:["walker","walkerOS","analytics","tracking","data collection","measurement","data privacy","privacy friendly","web analytics","product analytics","core","types","utils"],funding:[{type:"GitHub Sponsors",url:"https://github.com/sponsors/elbwalker"}]}}},function(){return t||(0,e[ge(e)[0]])((t={exports:{}}).exports,t),t.exports}),be={Utils:{Storage:{Local:"local",Session:"session",Cookie:"cookie"}}},_e={merge:!0,shallow:!0,extend:!0},me=(ye().version,Object.getOwnPropertyNames),he=(pe={"package.json":function(e,t){t.exports={name:"@walkeros/collector",description:"Unified platform-agnostic collector for walkerOS",version:"0.0.7",main:"./dist/index.js",module:"./dist/index.mjs",types:"./dist/index.d.ts",license:"MIT",files:["dist/**"],scripts:{build:"tsup --silent",clean:"rm -rf .turbo && rm -rf node_modules && rm -rf dist",dev:"jest --watchAll --colors",lint:'tsc && eslint "**/*.ts*"',test:"jest",update:"npx npm-check-updates -u && npm update"},dependencies:{"@walkeros/core":"0.0.7"},devDependencies:{},repository:{url:"git+https://github.com/elbwalker/walkerOS.git",directory:"packages/collector"},author:"elbwalker <hello@elbwalker.com>",homepage:"https://github.com/elbwalker/walkerOS#readme",bugs:{url:"https://github.com/elbwalker/walkerOS/issues"},keywords:["walker","walkerOS","analytics","tracking","data collection","measurement","data privacy","privacy friendly","collector","event processing"],funding:[{type:"GitHub Sponsors",url:"https://github.com/sponsors/elbwalker"}]}}},{Commands:{Action:"action",Config:"config",Consent:"consent",Context:"context",Custom:"custom",Destination:"destination",Elb:"elb",Globals:"globals",Hook:"hook",Init:"init",Link:"link",On:"on",Prefix:"data-elb",Ready:"ready",Run:"run",Session:"session",User:"user",Walker:"walker"},Utils:{Storage:{Cookie:"cookie",Local:"local",Session:"session"}}}),we=function(){var e=window;(e.elbLayer=e.elbLayer||[]).push(arguments)},ke=function(e,t){var n=(null==t?void 0:t.push)||we,r={};return e.id&&(r.session=e.id),e.storage&&e.device&&(r.device=e.device),n("walker user",r),e.isStart&&n({event:"session start",data:e}),e};function Se(e,t,r,o){var i=d(t,h(e));if(!i||o&&!o[i])return null;var a=[t],c="[".concat(h(e,i),"],[").concat(h(e,""),"]"),s=h(e,he.Commands.Link,!1),u={},l=[],f=_sliced_to_array(E(r||t,c,e,i),2),p=f[0],v=f[1];P(t,"[".concat(s,"]"),function(t){var n=_sliced_to_array(I(d(t,s)),2),r=n[0];"parent"===n[1]&&P(document.body,"[".concat(s,'="').concat(r,':child"]'),function(t){a.push(t);var n=Se(e,t);n&&l.push(n)})});var g=[];a.forEach(function(e){e.matches(c)&&g.push(e),P(e,c,function(e){return g.push(e)})});var y={};return g.forEach(function(t){y=n(y,w(e,t,"")),u=n(u,w(e,t,i))}),u=n(n(y,u),p),a.forEach(function(t){P(t,"[".concat(h(e),"]"),function(t){var n=Se(e,t);n&&l.push(n)})}),{type:i,data:u,context:v,nested:l}}var je,Oe,xe=new WeakMap,Ce=new WeakMap,Ee=[],Pe={Click:"click",Custom:"custom",Hover:"hover",Load:"load",Pulse:"pulse",Scroll:"scroll",Submit:"submit",Visible:"visible",Visibles:"visibles",Wait:"wait"},Ae={},Le=function(e,t){return _async_to_generator(function(){var n,r,o,i,c,s,l;return _ts_generator(this,function(f){switch(f.label){case 0:return n=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.scope||document;return _object_spread_props(_object_spread({prefix:"data-elb",pageview:!0,session:!0,elb:"elb",name:"walkerjs",elbLayer:"elbLayer"},e),{scope:t})}(t.settings),r=_object_spread_props(_object_spread({},t),{settings:n}),o=n.scope,i={type:"browser",config:r,collector:e,destroy:function(){N(e)}},!1!==n.elbLayer&&function(e){var t=(arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}).name||"elbLayer";window[t]||(window[t]=[]);var n=window[t];Array.isArray(n)&&n.length>0&&ne(e,n)}(e,{name:a(n.elbLayer)?n.elbLayer:"elbLayer"}),function(e,t){t.addEventListener("click",u(function(t){$.call(this,e,t)})),t.addEventListener("submit",u(function(t){Z.call(this,e,t)}))}(e,o),n.session&&(c="boolean"==typeof n.session?{}:n.session,ae(e,{config:c})),[4,J(q,e,n)];case 1:return f.sent(),s=e._destroy,e._destroy=function(){var e;null===(e=i.destroy)||void 0===e||e.call(i),s&&s()},l=function(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];var o=_sliced_to_array(n,6),i=o[0],a=o[1],c=o[2],s=o[3],u=o[4],l=o[5];return T(e,i,a,c,s,u,l)},[2,{source:i,elb:l}]}})})()},Ie=Le;return Oe=de,function(e,t,n,r){if(t&&"object"===(void 0===t?"undefined":_type_of(t))||"function"==typeof t){var o=!0,i=!1,a=void 0;try{for(var c,s=function(){var o=c.value;fe.call(e,o)||o===n||se(e,o,{get:function(){return t[o]},enumerable:!(r=ue(t,o))||r.enumerable})},u=le(t)[Symbol.iterator]();!(o=(c=u.next()).done);o=!0)s()}catch(e){i=!0,a=e}finally{try{o||null==u.return||u.return()}finally{if(i)throw a}}}return e}(se({},"__esModule",{value:!0}),Oe)}();
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var e,t,n,r=Object.defineProperty,o=Object.getOwnPropertyDescriptor,s=Object.getOwnPropertyNames,i=Object.prototype.hasOwnProperty,c={};((e,t)=>{for(var n in t)r(e,n,{get:t[n],enumerable:!0})})(c,{SourceBrowser:()=>ae,createTagger:()=>le,default:()=>fe,getAllEvents:()=>x,getEvents:()=>E,getGlobals:()=>$,sourceBrowser:()=>ue}),module.exports=(e=c,((e,t,n,c)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let a of s(t))i.call(e,a)||a===n||r(e,a,{get:()=>t[a],enumerable:!(c=o(t,a))||c.enumerable});return e})(r({},"__esModule",{value:!0}),e));var a=Object.getOwnPropertyNames,l=(t={"package.json"(e,t){t.exports={name:"@walkeros/core",description:"Core types and platform-agnostic utilities for walkerOS",version:"0.0.7",main:"./dist/index.js",module:"./dist/index.mjs",types:"./dist/index.d.ts",license:"MIT",files:["dist/**"],scripts:{build:"tsup --silent",clean:"rm -rf .turbo && rm -rf node_modules && rm -rf dist",dev:"jest --watchAll --colors",lint:'tsc && eslint "**/*.ts*"',test:"jest",update:"npx npm-check-updates -u && npm update"},dependencies:{},devDependencies:{},repository:{url:"git+https://github.com/elbwalker/walkerOS.git",directory:"packages/core"},author:"elbwalker <hello@elbwalker.com>",homepage:"https://github.com/elbwalker/walkerOS#readme",bugs:{url:"https://github.com/elbwalker/walkerOS/issues"},keywords:["walker","walkerOS","analytics","tracking","data collection","measurement","data privacy","privacy friendly","web analytics","product analytics","core","types","utils"],funding:[{type:"GitHub Sponsors",url:"https://github.com/sponsors/elbwalker"}]}}},function(){return n||(0,t[a(t)[0]])((n={exports:{}}).exports,n),n.exports}),u={merge:!0,shallow:!0,extend:!0};function f(e,t={},n={}){n={...u,...n};const r=Object.entries(t).reduce((t,[r,o])=>{const s=e[r];return n.merge&&Array.isArray(s)&&Array.isArray(o)?t[r]=o.reduce((e,t)=>e.includes(t)?e:[...e,t],[...s]):(n.extend||r in e)&&(t[r]=o),t},{});return n.shallow?{...e,...r}:(Object.assign(e,r),e)}function d(e){return Array.isArray(e)}function b(e){return void 0!==e}function g(e){return"object"==typeof e&&null!==e&&!d(e)&&"[object Object]"===Object.prototype.toString.call(e)}function p(e){return"string"==typeof e}function m(e){if("true"===e)return!0;if("false"===e)return!1;const t=Number(e);return e==t&&""!==e?t:String(e)}var{version:h}=l();function y(e,t,n){return function(...r){try{return e(...r)}catch(e){if(!t)return;return t(e)}finally{null==n||n()}}}function w(e){return e?e.trim().replace(/^'|'$/g,"").trim():""}var k=require("@walkeros/collector"),v=require("@walkeros/web-core"),C=require("@walkeros/collector"),j=require("@walkeros/web-core");function O(e,t,n=!0){return e+(t=null!=t?(n?"-":"")+t:"")}function S(e,t,n,r=!0){return q((0,j.getAttribute)(t,O(e,n,r))||"").reduce((e,n)=>{let[r,o]=H(n);if(!r)return e;if(o||(r.endsWith(":")&&(r=r.slice(0,-1)),o=""),o.startsWith("#")){o=o.slice(1);try{let e=t[o];e||"selected"!==o||(e=t.options[t.selectedIndex].text),o=String(e)}catch(e){o=""}}return r.endsWith("[]")?(r=r.slice(0,-2),d(e[r])||(e[r]=[]),e[r].push(m(o))):e[r]=m(o),e},{})}function x(e=document.body,t=C.Const.Commands.Prefix){let n=[];const r=C.Const.Commands.Action,o=`[${O(t,r,!1)}]`,s=e=>{Object.keys(S(t,e,r,!1)).forEach(r=>{n=n.concat(E(e,r,t))})};return e!==document&&e.matches(o)&&s(e),W(e,o,s),n}function E(e,t,n=C.Const.Commands.Prefix){const r=[],o=function(e,t,n){let r=t;for(;r;){const t=A((0,j.getAttribute)(r,O(e,C.Const.Commands.Action,!1)));if(t[n]||"click"!==n)return t[n];r=P(e,r)}return[]}(n,e,t);return o?(o.forEach(o=>{const s=q(o.actionParams||"",",").reduce((e,t)=>(e[w(t)]=!0,e),{}),i=function(e,t,n){const r=[];let o=t;n=0!==Object.keys(n||{}).length?n:void 0;for(;o;){const s=L(e,o,t,n);s&&r.push(s),o=P(e,o)}return r}(n,e,s);if(!i.length){const t="page",r=`[${O(n,t)}]`,[o,s]=_(e,r,n,t);i.push({type:t,data:o,nested:[],context:s})}i.forEach(e=>{r.push({entity:e.type,action:o.action,data:e.data,trigger:t,context:e.context,nested:e.nested})})}),r):r}function $(e=C.Const.Commands.Prefix,t=document){const n=O(e,C.Const.Commands.Globals,!1);let r={};return W(t,`[${n}]`,t=>{r=f(r,S(e,t,C.Const.Commands.Globals,!1))}),r}function A(e){const t={};return q(e).forEach(e=>{const[n,r]=H(e),[o,s]=I(n);if(!o)return;let[i,c]=I(r||"");i=i||o,t[o]||(t[o]=[]),t[o].push({trigger:o,triggerParams:s,action:i,actionParams:c})}),t}function L(e,t,n,r){const o=(0,j.getAttribute)(t,O(e));if(!o||r&&!r[o])return null;const s=[t],i=`[${O(e,o)}],[${O(e,"")}]`,c=O(e,C.Const.Commands.Link,!1);let a={};const l=[],[u,d]=_(n||t,i,e,o);W(t,`[${c}]`,t=>{const[n,r]=H((0,j.getAttribute)(t,c));"parent"===r&&W(document.body,`[${c}="${n}:child"]`,t=>{s.push(t);const n=L(e,t);n&&l.push(n)})});const b=[];s.forEach(e=>{e.matches(i)&&b.push(e),W(e,i,e=>b.push(e))});let g={};return b.forEach(t=>{g=f(g,S(e,t,"")),a=f(a,S(e,t,o))}),a=f(f(g,a),u),s.forEach(t=>{W(t,`[${O(e)}]`,t=>{const n=L(e,t);n&&l.push(n)})}),{type:o,data:a,context:d,nested:l}}function P(e,t){const n=O(e,C.Const.Commands.Link,!1);if(t.matches(`[${n}]`)){const[e,r]=H((0,j.getAttribute)(t,n));if("child"===r)return document.querySelector(`[${n}="${e}:parent"]`)}return!t.parentElement&&t.getRootNode&&t.getRootNode()instanceof ShadowRoot?t.getRootNode().host:t.parentElement}function _(e,t,n,r){let o={};const s={};let i=e;const c=`[${O(n,C.Const.Commands.Context,!1)}]`;let a=0;for(;i;)i.matches(t)&&(o=f(S(n,i,""),o),o=f(S(n,i,r),o)),i.matches(c)&&(Object.entries(S(n,i,C.Const.Commands.Context,!1)).forEach(([e,t])=>{t&&!s[e]&&(s[e]=[t,a])}),++a),i=P(n,i);return[o,s]}function W(e,t,n){e.querySelectorAll(t).forEach(n)}function q(e,t=";"){if(!e)return[];const n=new RegExp(`(?:[^${t}']+|'[^']*')+`,"ig");return e.match(n)||[]}function H(e){const[t,n]=e.split(/:(.+)/,2);return[w(t),w(n)]}function I(e){const[t,n]=e.split("(",2);return[t,n?n.slice(0,-1):""]}var M=require("@walkeros/web-core"),T=new WeakMap,V=new WeakMap;function R(e){const t=Date.now();let n=V.get(e);return(!n||t-n.lastChecked>500)&&(n={isVisible:(0,M.isVisible)(e),lastChecked:t},V.set(e,n)),n.isVisible}function N(e){if(window.IntersectionObserver)return y(()=>new window.IntersectionObserver(t=>{t.forEach(t=>{!function(e,t){var n,r;const o=t.target,s=e._visibilityState;if(!s)return;const i=s.timers.get(o);if(t.intersectionRatio>0){const r=Date.now();let c=T.get(o);(!c||r-c.lastChecked>1e3)&&(c={isLarge:o.offsetHeight>window.innerHeight,lastChecked:r},T.set(o,c));if(t.intersectionRatio>=.5||c.isLarge&&R(o)){const t=null==(n=s.elementConfigs)?void 0:n.get(o);if((null==t?void 0:t.multiple)&&t.blocked)return;if(!i){const t=window.setTimeout(async()=>{var t;if(R(o)){await Z(e,o,Q.Visible,"data-elb");const n=null==(t=s.elementConfigs)?void 0:t.get(o);(null==n?void 0:n.multiple)?n.blocked=!0:function(e,t){const n=e._visibilityState;if(!n)return;n.observer&&n.observer.unobserve(t);const r=n.timers.get(t);r&&(clearTimeout(r),n.timers.delete(t)),T.delete(t),V.delete(t)}(e,o)}},s.duration);s.timers.set(o,t)}return}}i&&(clearTimeout(i),s.timers.delete(o));const c=null==(r=s.elementConfigs)?void 0:r.get(o);(null==c?void 0:c.multiple)&&(c.blocked=!1)}(e,t)})},{rootMargin:"0px",threshold:[0,.5]}),()=>{})()}function D(e,t,n={multiple:!1}){var r;const o=e._visibilityState;(null==o?void 0:o.observer)&&t&&(o.elementConfigs||(o.elementConfigs=new WeakMap),o.elementConfigs.set(t,{multiple:null!=(r=n.multiple)&&r,blocked:!1}),o.observer.observe(t))}function G(e){const t=e._visibilityState;t&&(t.observer&&t.observer.disconnect(),delete e._visibilityState)}function B(e,t,n,r,o,s,i){if(p(t)&&t.startsWith("walker ")){if("walker config"===t)return e.push("walker config",n);if("walker consent"===t)return e.push("walker consent",n);if("walker user"===t)return e.push("walker user",n);if("walker run"===t)return e.push("walker run",n)}if(g(t)){const n=t;return n.source||(n.source=F()),e.push(n)}if(p(t)&&t.length>0){const c={event:t,data:Y(n||{}),context:z(o||{}),custom:i,nested:s,source:F()};return p(r)&&(c.trigger=r),e.push(c)}if(!b(t))return Promise.resolve({ok:!0,successful:[],queued:[],failed:[]});const c={event:String(t||""),data:Y(n||{}),context:z(o||{}),custom:i,nested:s,source:F()};return p(r)&&(c.trigger=r),e.push(c)}function Y(e){return e?typeof e==typeof{}?e:{}:{}}function z(e){return e?(t=e)===document||t instanceof Element?{}:g(e)&&Object.keys(e).length?e:{}:{};var t}function F(){return{type:"browser",id:window.location.href,previous_id:document.referrer}}var J,K=[],Q={Click:"click",Custom:"custom",Hover:"hover",Load:"load",Pulse:"pulse",Scroll:"scroll",Submit:"submit",Visible:"visible",Visibles:"visibles",Wait:"wait"};function U(e,t){const{prefix:n,scope:r,pageview:o}=t;if(o){const[t,o]=function(e,t){const n=window.location,r="page",o=t===document?document.body:t,[s,i]=_(o,`[${O(e,r)}]`,e,r);return s.domain=n.hostname,s.title=document.title,s.referrer=document.referrer,n.search&&(s.search=n.search),n.hash&&(s.hash=n.hash),[s,i]}(n,r);B(e,"page view",t,Q.Load,o)}!function(e,t,n){K=[],G(e),function(e,t=1e3){e._visibilityState||(e._visibilityState={observer:N(e),timers:new WeakMap,duration:t})}(e,1e3);const r=O(t,k.Const.Commands.Action,!1),o=n||document;o!==document&&ee(e,o,r,t);o.querySelectorAll(`[${r}]`).forEach(n=>ee(e,n,r,t)),K.length&&function(e,t){const n=(e,t)=>e.filter(([e,n])=>{const r=window.scrollY+window.innerHeight,o=e.offsetTop;if(r<o)return!0;const s=e.clientHeight;return!(100*(1-(o+s-r)/(s||1))>=n)||(Z(t,e,Q.Scroll,"data-elb"),!1)});J||(J=function(e,t=1e3){let n=null;return function(...r){if(null===n)return n=setTimeout(()=>{n=null},t),e(...r)}}(function(){K=n.call(t,K,e)}),t.addEventListener("scroll",J))}(e,o)}(e,n,r)}function X(e,t){t.addEventListener("click",y(function(t){te.call(this,e,t)})),t.addEventListener("submit",y(function(t){ne.call(this,e,t)}))}async function Z(e,t,n,r){const o=E(t,n,r);return Promise.all(o.map(t=>B(e,{event:`${t.entity} ${t.action}`,...t,trigger:n})))}function ee(e,t,n,r){const o=(0,v.getAttribute)(t,n);o&&Object.values(A(o)).forEach(n=>n.forEach(n=>{switch(n.trigger){case Q.Hover:!function(e,t,n){t.addEventListener("mouseenter",y(function(t){t.target instanceof Element&&Z(e,t.target,Q.Hover,n)}))}(e,t,r);break;case Q.Load:!function(e,t,n){Z(e,t,Q.Load,n)}(e,t,r);break;case Q.Pulse:!function(e,t,n="",r){setInterval(()=>{document.hidden||Z(e,t,Q.Pulse,r)},parseInt(n||"")||15e3)}(e,t,n.triggerParams,r);break;case Q.Scroll:!function(e,t=""){const n=parseInt(t||"")||50;if(n<0||n>100)return;K.push([e,n])}(t,n.triggerParams);break;case Q.Visible:D(e,t);break;case Q.Visibles:D(e,t,{multiple:!0});break;case Q.Wait:!function(e,t,n="",r){setTimeout(()=>Z(e,t,Q.Wait,r),parseInt(n||"")||15e3)}(e,t,n.triggerParams,r)}}))}function te(e,t){Z(e,t.target,Q.Click,"data-elb")}function ne(e,t){t.target&&Z(e,t.target,Q.Submit,"data-elb")}function re(e,t={}){const n=t.name||"elbLayer";window[n]||(window[n]=[]);const r=window[n];Array.isArray(r)&&r.length>0&&function(e,t){const n=[],r=[];t.forEach(e=>{!function(e){if(se(e)){const t=Array.from(e);return"string"==typeof t[0]&&t[0].startsWith("walker ")}return!1}(e)?r.push(e):n.push(e)}),n.forEach(t=>{oe(e,t)}),r.forEach(t=>{oe(e,t)}),t.length=0}(e,r)}function oe(e,t){null!=t&&""!==t&&"number"!=typeof t&&"string"!=typeof t&&y(()=>{if(se(t)){const n=Array.from(t);if(n.length>=1){const[t,r,o,s]=n;"string"==typeof t&&t.length>0&&B(e,t,r,o,s)}}else if("object"==typeof t&&null!==t){if(0===Object.keys(t).length)return;B(e,t)}},()=>{})()}function se(e){return null!=e&&"object"==typeof e&&"length"in e&&"number"==typeof e.length}var ie=require("@walkeros/collector"),ce=require("@walkeros/web-core");var ae={};function le(e={}){const t=e.prefix||"data-elb";return function(e){let n=e;const r={},o={},s={},i={},c={};function a(e){return Object.entries(e).map(([e,t])=>`${e}:${function(e){if(!b(e)||null===e)return"undefined";let t=String(e);return t=t.replace(/\\/g,"\\\\"),t=t.replace(/;/g,"\\;"),t=t.replace(/:/g,"\\:"),t=t.replace(/'/g,"\\'"),t}(t)}`).join(";")}const l={entity:e=>(n=e,l),data(e,t){const o=null!=n?n:"";return r[o]||(r[o]={}),p(e)?r[o][e]=t:Object.assign(r[o],e),l},action(e,t){if(p(e))if(b(t))o[e]=t;else if(e.includes(":")){const[t,n]=e.split(":",2);o[t]=n}else o[e]=e;else Object.assign(o,e);return l},context:(e,t)=>(p(e)?s[e]=t:Object.assign(s,e),l),globals:(e,t)=>(p(e)?i[e]=t:Object.assign(i,e),l),link:(e,t)=>(p(e)?c[e]=t:Object.assign(c,e),l),get(){const e={};return n&&(e[t]=n),Object.entries(r).forEach(([n,r])=>{if(Object.keys(r).length>0){e[n?`${t}-${n}`:`${t}-`]=a(r)}}),Object.keys(o).length>0&&(e[`${t}action`]=a(o)),Object.keys(s).length>0&&(e[`${t}context`]=a(s)),Object.keys(i).length>0&&(e[`${t}globals`]=a(i)),Object.keys(c).length>0&&(e[`${t}link`]=a(c)),e}};return l}}var ue=async(e,t)=>{const n=function(e={}){const t=e.scope||document;return{prefix:"data-elb",pageview:!0,session:!0,elb:"elb",name:"walkerjs",elbLayer:"elbLayer",...e,scope:t}}(t.settings),r={...t,settings:n},o=n.scope,s={type:"browser",config:r,collector:e,destroy(){G(e)}};if(!1!==n.elbLayer&&re(e,{name:p(n.elbLayer)?n.elbLayer:"elbLayer"}),X(e,o),n.session){const t="boolean"==typeof n.session?{}:n.session;!function(e,t={}){const n=t.config||{},r=f(e.config.sessionStatic||{},t.data||{});var o,s,i;(o=ce.sessionStart,s="SessionStart",i=e.hooks,function(...e){let t;const n="post"+s,r=i["pre"+s],c=i[n];return t=r?r({fn:o},...e):o(...e),c&&(t=c({fn:o,result:t},...e)),t})({...n,cb:(e,t,r)=>{let o;const s=n;return!1!==s.cb&&s.cb?o=s.cb(e,t,r):!1!==s.cb&&(o=r(e,t,r)),t&&(t.session=e,(0,ie.onApply)(t,"session")),o},data:r,collector:e})}(e,{config:t})}await async function(e,t,n){const r=()=>{e(t,n),(0,k.onApply)(t,"ready")};"loading"!==document.readyState?r():document.addEventListener("DOMContentLoaded",r)}(U,e,n);const i=e._destroy;e._destroy=()=>{var e;null==(e=s.destroy)||e.call(s),i&&i()};return{source:s,elb:(...t)=>{const[n,r,o,s,i,c]=t;return B(e,n,r,o,s,i,c)}}},fe=ue;//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/trigger.ts","../src/walker.ts","../src/triggerVisible.ts","../src/translation.ts","../src/elbLayer.ts","../src/session.ts","../src/config.ts","../src/types/index.ts","../src/tagger.ts"],"sourcesContent":["import type { Collector, WalkerOS, Source } from '@walkeros/core';\nimport type { BrowserSourceConfig, Scope } from './types';\nimport type {\n BrowserPushData,\n BrowserPushOptions,\n BrowserPushContext,\n BrowserPush,\n} from './types/elb';\nimport { isString } from '@walkeros/core';\nimport { load, ready, initGlobalTrigger } from './trigger';\nimport { destroyVisibilityTracking } from './triggerVisible';\nimport { initElbLayer } from './elbLayer';\nimport { translateToCoreCollector } from './translation';\nimport { sessionStart } from './session';\nimport { getConfig } from './config';\n\nexport * as SourceBrowser from './types';\n\n// @TODO export examples\n\n// Export walker utility functions\nexport { getAllEvents, getEvents, getGlobals } from './walker';\n\n// Export tagger functionality\nexport { createTagger } from './tagger';\nexport type { TaggerConfig, TaggerInstance } from './tagger';\n\n// Browser source init function for createSource\nexport const sourceBrowser: Source.Init<\n BrowserSourceConfig,\n BrowserPush\n> = async (collector: Collector.Instance, config: BrowserSourceConfig) => {\n // Get full configuration with defaults\n const settings = getConfig(config.settings);\n const fullConfig: BrowserSourceConfig = {\n ...config,\n settings,\n };\n\n const scope = settings.scope as Scope;\n\n // Create the source instance\n const source: Source.Instance<BrowserSourceConfig> = {\n // id: config.id!, // ID is now generated by createSource\n type: 'browser',\n config: fullConfig,\n collector,\n destroy() {\n destroyVisibilityTracking(collector);\n // Additional cleanup could be added here\n },\n };\n\n // Initialize ELB Layer for async command handling\n if (settings.elbLayer !== false) {\n initElbLayer(collector, {\n name: isString(settings.elbLayer) ? settings.elbLayer : 'elbLayer',\n });\n }\n\n // Initialize global event listeners (click, submit)\n initGlobalTrigger(collector, scope);\n\n // Initialize session if enabled\n if (settings.session) {\n const sessionConfig =\n typeof settings.session === 'boolean' ? {} : settings.session;\n sessionStart(collector, { config: sessionConfig });\n }\n\n // Setup auto-initialization via ready state\n await ready(load, collector, settings);\n\n // Setup cleanup for visibility tracking on collector destroy\n const originalDestroy = (\n collector as Collector.Instance & { _destroy?: () => void }\n )._destroy;\n (collector as Collector.Instance & { _destroy?: () => void })._destroy =\n () => {\n source.destroy?.();\n if (originalDestroy) originalDestroy();\n };\n\n // Create browser-specific elb function with flexible arguments\n const elb: BrowserPush = ((...args: unknown[]) => {\n // Use the translation layer to convert flexible browser inputs to collector format\n const [event, data, options, context, nested, custom] = args;\n return translateToCoreCollector(\n collector,\n event,\n data as BrowserPushData,\n options as BrowserPushOptions,\n context as BrowserPushContext,\n nested as WalkerOS.Entities,\n custom as WalkerOS.Properties,\n );\n }) as BrowserPush;\n\n return { source, elb };\n};\n\nexport default sourceBrowser;\n","import type { WalkerOS, Collector } from '@walkeros/core';\nimport type {\n Trigger,\n Scope,\n WalkerEvent,\n Events,\n ScrollElements,\n TriggerAction,\n Settings,\n} from './types';\nimport { throttle, tryCatch } from '@walkeros/core';\nimport { Const, onApply } from '@walkeros/collector';\nimport { elb as elbOrg, getAttribute } from '@walkeros/web-core';\nimport {\n getElbAttributeName,\n getEvents,\n getPageViewData,\n getTriggerActions,\n} from './walker';\nimport {\n initVisibilityTracking,\n triggerVisible,\n destroyVisibilityTracking,\n} from './triggerVisible';\nimport { translateToCoreCollector } from './translation';\n\nlet scrollElements: ScrollElements = [];\nlet scrollListener: EventListenerOrEventListenerObject | undefined;\n\n// Reset function for testing\nexport function resetScrollListener() {\n scrollListener = undefined;\n scrollElements = [];\n}\n\nexport const createElb: (customLayer?: unknown) => unknown = (customLayer?) => {\n return (\n customLayer\n ? function () {\n (customLayer as unknown[]).push(arguments);\n }\n : elbOrg\n ) as unknown;\n};\n\nexport const Triggers: { [key: string]: 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 Visibles: 'visibles',\n Wait: 'wait',\n} as const;\n\nexport async function ready(\n fn: (collector: Collector.Instance, settings: any) => void,\n collector: Collector.Instance,\n settings: any,\n): Promise<void> {\n const readyFn = () => {\n fn(collector, settings);\n onApply(collector, 'ready');\n };\n\n if (document.readyState !== 'loading') {\n readyFn();\n } else {\n document.addEventListener('DOMContentLoaded', readyFn);\n }\n}\n\n// Called for each new run to setup triggers\nexport function load(\n collector: Collector.Instance,\n settings: Required<Settings>,\n) {\n const { prefix, scope, pageview } = settings;\n\n // Trigger static page view if enabled\n if (pageview) {\n const [data, context] = getPageViewData(prefix, scope as Scope);\n translateToCoreCollector(\n collector,\n 'page view',\n data,\n Triggers.Load,\n context,\n );\n }\n\n initScopeTrigger(collector, prefix, scope as Scope);\n}\n\nexport function initGlobalTrigger(\n collector: Collector.Instance,\n scope: Scope,\n): void {\n scope.addEventListener(\n 'click',\n tryCatch(function (this: Scope, ev: unknown) {\n triggerClick.call(this, collector, ev as MouseEvent);\n }) as EventListener,\n );\n scope.addEventListener(\n 'submit',\n tryCatch(function (this: Scope, ev: unknown) {\n triggerSubmit.call(this, collector, ev as SubmitEvent);\n }) as EventListener,\n );\n}\n\nexport function initScopeTrigger(\n collector: Collector.Instance,\n prefix: string,\n elem?: Scope,\n) {\n // Reset all scroll events @TODO check if it's right here\n scrollElements = [];\n\n // Clean up any existing visibility tracking to prevent observer accumulation\n destroyVisibilityTracking(collector);\n\n // Initialize visibility tracking for this collector\n initVisibilityTracking(collector, 1000);\n\n // default data-elbaction\n const selectorAction = getElbAttributeName(\n prefix,\n Const.Commands.Action,\n false,\n );\n\n const scope = elem || document;\n if (scope !== document) {\n // Handle the elements action(s), too\n handleActionElem(collector, scope as HTMLElement, selectorAction, prefix);\n }\n\n // Handle all children action(s)\n scope\n .querySelectorAll<HTMLElement>(`[${selectorAction}]`)\n .forEach((elem) =>\n handleActionElem(collector, elem, selectorAction, prefix),\n );\n\n if (scrollElements.length) scroll(collector, scope);\n}\n\nexport async function handleTrigger(\n collector: Collector.Instance,\n element: Element,\n trigger: string,\n prefix: string,\n // @TODO add triggerParams to filter for specific trigger\n): Promise<unknown[]> {\n const events = getEvents(element, trigger, prefix);\n return Promise.all(\n events.map((event: WalkerEvent) =>\n translateToCoreCollector(collector, {\n event: `${event.entity} ${event.action}`,\n ...event,\n trigger,\n }),\n ),\n );\n}\n\nfunction handleActionElem(\n collector: Collector.Instance,\n elem: HTMLElement,\n selectorAction: string,\n prefix: 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 Triggers.Hover:\n triggerHover(collector, elem, prefix);\n break;\n case Triggers.Load:\n triggerLoad(collector, elem, prefix);\n break;\n case Triggers.Pulse:\n triggerPulse(collector, elem, triggerAction.triggerParams, prefix);\n break;\n case Triggers.Scroll:\n triggerScroll(elem, triggerAction.triggerParams);\n break;\n case Triggers.Visible:\n triggerVisible(collector, elem);\n break;\n case Triggers.Visibles:\n triggerVisible(collector, elem, { multiple: true });\n break;\n case Triggers.Wait:\n triggerWait(collector, elem, triggerAction.triggerParams, prefix);\n break;\n }\n }),\n );\n}\n\nfunction triggerClick(collector: Collector.Instance, ev: MouseEvent) {\n // Use default prefix - will be parameterized when integrating with source config\n handleTrigger(collector, ev.target as Element, Triggers.Click, 'data-elb');\n}\n\nfunction triggerHover(\n collector: Collector.Instance,\n elem: HTMLElement,\n prefix: string,\n) {\n elem.addEventListener(\n 'mouseenter',\n tryCatch(function (this: Document, ev: MouseEvent) {\n if (ev.target instanceof Element)\n handleTrigger(collector, ev.target, Triggers.Hover, prefix);\n }),\n );\n}\n\nfunction triggerLoad(\n collector: Collector.Instance,\n elem: HTMLElement,\n prefix: string,\n) {\n handleTrigger(collector, elem, Triggers.Load, prefix);\n}\n\nfunction triggerPulse(\n collector: Collector.Instance,\n elem: HTMLElement,\n triggerParams: string = '',\n prefix: string,\n) {\n setInterval(\n () => {\n // Only trigger when tab is active\n if (!document.hidden)\n handleTrigger(collector, elem, Triggers.Pulse, prefix);\n },\n parseInt(triggerParams || '') || 15000,\n );\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(collector: Collector.Instance, ev: SubmitEvent) {\n // Use default prefix - will be parameterized when integrating with source config\n if (ev.target) {\n handleTrigger(collector, ev.target as Element, Triggers.Submit, 'data-elb');\n }\n}\n\nfunction triggerWait(\n collector: Collector.Instance,\n elem: HTMLElement,\n triggerParams: string = '',\n prefix: string,\n) {\n setTimeout(\n () => handleTrigger(collector, elem, Triggers.Wait, prefix),\n parseInt(triggerParams || '') || 15000,\n );\n}\n\nfunction scroll(collector: Collector.Instance, scope: Scope) {\n const scrolling = (\n scrollElements: ScrollElements,\n collector: Collector.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(collector, element, Triggers.Scroll, 'data-elb');\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(scope, scrollElements, collector);\n });\n\n scope.addEventListener('scroll', scrollListener);\n }\n}\n","import type { WalkerOS } from '@walkeros/core';\nimport type {\n Scope,\n WalkerEvent,\n Events,\n Filter,\n TriggerAction,\n TriggerActions,\n TriggersActionGroups,\n Attributes,\n KeyVal,\n} from './types';\nimport { assign, castValue, isArray, trim } from '@walkeros/core';\nimport { Const } from '@walkeros/collector';\nimport { getAttribute } from '@walkeros/web-core';\n\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: Scope = document.body,\n prefix: string = Const.Commands.Prefix,\n): Events {\n let events: Events = [];\n const action = Const.Commands.Action;\n const actionSelector = `[${getElbAttributeName(prefix, action, false)}]`;\n\n const processElementEvents = (elem: Element) => {\n Object.keys(getElbValues(prefix, elem, action, false)).forEach(\n (trigger) => {\n events = events.concat(getEvents(elem, trigger, prefix));\n },\n );\n };\n\n // Check if the scope element itself has action attributes\n if (scope !== document && (scope as Element).matches(actionSelector)) {\n processElementEvents(scope as Element);\n }\n\n queryAll(scope, actionSelector, processElementEvents);\n\n return events;\n}\n\nexport function getEvents(\n target: Element,\n trigger: string,\n prefix: string = Const.Commands.Prefix,\n): Events {\n const events: 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 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 scope: Scope = document,\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(scope, 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 scope: Scope,\n): [WalkerOS.Properties, WalkerOS.OrderedProperties] {\n // static page view\n const loc = window.location;\n const page = 'page';\n const scopeElement = scope === document ? document.body : (scope as Element);\n const [data, context] = getThisAndParentProperties(\n scopeElement,\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): TriggersActionGroups {\n const values: 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?: 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?: 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 // Note: This searches the entire document - for scoped operation, we would need\n // to pass scope context down to this function or redesign the linking mechanism\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 // Note: This searches the entire document - for scoped operation, we would need\n // to pass scope context down to this function or redesign the linking mechanism\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: string,\n): 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 = ';'): Attributes {\n const values: 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): KeyVal {\n const [key, value] = str.split(/:(.+)/, 2);\n return [trim(key), trim(value)];\n}\n\nfunction parseAttribute(str: string): 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 type { WalkerOS, Collector } from '@walkeros/core';\nimport { tryCatch } from '@walkeros/core';\nimport { isVisible } from '@walkeros/web-core';\nimport { handleTrigger, Triggers } from './trigger';\n\n// Cache for element size calculations to reduce DOM queries\nconst elementSizeCache = new WeakMap<\n HTMLElement,\n { isLarge: boolean; lastChecked: number }\n>();\n\n// Cache for basic visibility checks to reduce expensive isVisible() calls\nconst visibilityCache = new WeakMap<\n HTMLElement,\n { isVisible: boolean; lastChecked: number }\n>();\n\n// Visibility state interface for collector\ninterface VisibilityState {\n observer?: IntersectionObserver;\n timers: WeakMap<HTMLElement, number>;\n duration: number;\n elementConfigs?: WeakMap<\n HTMLElement,\n { multiple: boolean; blocked: boolean }\n >;\n}\n\n// Extended collector interface with visibility state\ninterface CollectorWithVisibility extends Collector.Instance {\n _visibilityState?: VisibilityState;\n}\n\n/**\n * Cached visibility check to reduce expensive isVisible() calls\n */\nfunction isElementVisible(element: HTMLElement): boolean {\n const now = Date.now();\n let cached = visibilityCache.get(element);\n\n // Cache visibility result for 500ms to balance accuracy with performance\n if (!cached || now - cached.lastChecked > 500) {\n cached = {\n isVisible: isVisible(element),\n lastChecked: now,\n };\n visibilityCache.set(element, cached);\n }\n\n return cached.isVisible;\n}\n\n/**\n * Element cleanup (unobserve + timer + cache cleanup)\n */\nexport function unobserveElement(\n collector: Collector.Instance,\n element: HTMLElement,\n): void {\n const state = (collector as CollectorWithVisibility)._visibilityState;\n if (!state) return;\n\n if (state.observer) {\n state.observer.unobserve(element);\n }\n\n // Clear timer\n const timer = state.timers.get(element);\n if (timer) {\n clearTimeout(timer);\n state.timers.delete(element);\n }\n\n // Clean up caches to prevent memory leaks\n elementSizeCache.delete(element);\n visibilityCache.delete(element);\n}\n\n/**\n * Creates an IntersectionObserver for the given collector\n */\nfunction createObserver(\n collector: Collector.Instance,\n): IntersectionObserver | undefined {\n if (!window.IntersectionObserver) return undefined;\n\n return tryCatch(\n () =>\n new window.IntersectionObserver(\n (entries) => {\n entries.forEach((entry) => {\n handleIntersection(collector, entry);\n });\n },\n {\n rootMargin: '0px',\n threshold: [0, 0.5],\n },\n ),\n () => undefined,\n )();\n}\n\n/**\n * Handles intersection changes for observed elements\n */\nfunction handleIntersection(\n collector: Collector.Instance,\n entry: IntersectionObserverEntry,\n): void {\n const target = entry.target as HTMLElement;\n const state = (collector as CollectorWithVisibility)._visibilityState;\n\n if (!state) return;\n\n const existingTimer = state.timers.get(target);\n\n if (entry.intersectionRatio > 0) {\n // Optimize: Cache element size calculations to avoid repeated DOM queries\n const now = Date.now();\n let cached = elementSizeCache.get(target);\n\n // Cache element size for 1 second to reduce DOM queries\n if (!cached || now - cached.lastChecked > 1000) {\n cached = {\n isLarge: target.offsetHeight > window.innerHeight,\n lastChecked: now,\n };\n elementSizeCache.set(target, cached);\n }\n\n const meetsThreshold = entry.intersectionRatio >= 0.5;\n\n // Optimized visibility strategy:\n // - Standard elements: intersection ratio ≥ 0.5 is sufficient (fast)\n // - Large elements: need additional overlay/occlusion check (slower but necessary)\n const shouldTrigger =\n meetsThreshold || (cached.isLarge && isElementVisible(target));\n\n if (shouldTrigger) {\n // Get element configuration\n const elementConfig = state.elementConfigs?.get(target);\n\n // For multiple triggers, only proceed if this is a re-entry (was not visible, now visible)\n if (elementConfig?.multiple && elementConfig.blocked) return; // Don't trigger again\n\n // Only create timer if none exists\n if (!existingTimer) {\n const timer = window.setTimeout(async () => {\n // Final visibility check before triggering (cached for performance)\n if (isElementVisible(target)) {\n await handleTrigger(\n collector,\n target as Element,\n Triggers.Visible,\n 'data-elb',\n );\n\n // Get fresh element config reference for state update\n const currentConfig = state.elementConfigs?.get(target);\n\n // For multiple triggers, mark as visible after firing\n if (currentConfig?.multiple) {\n currentConfig.blocked = true;\n } else {\n // Clean up and unobserve only if not a multiple trigger\n unobserveElement(collector, target);\n }\n }\n }, state.duration);\n\n state.timers.set(target, timer);\n }\n return;\n }\n }\n\n // Element isn't sufficiently in viewport - clear existing timer\n if (existingTimer) {\n clearTimeout(existingTimer);\n state.timers.delete(target);\n }\n\n // For multiple triggers, mark as not visible for re-entry detection\n const elementConfig = state.elementConfigs?.get(target);\n if (elementConfig?.multiple) {\n elementConfig.blocked = false;\n }\n}\n\n/**\n * Initializes visibility tracking for a collector\n */\nexport function initVisibilityTracking(\n collector: Collector.Instance,\n duration = 1000,\n): void {\n if ((collector as CollectorWithVisibility)._visibilityState) return; // Already initialized\n\n (collector as CollectorWithVisibility)._visibilityState = {\n observer: createObserver(collector),\n timers: new WeakMap(),\n duration,\n } as VisibilityState;\n}\n\n/**\n * Main trigger function for visible elements\n */\nexport function triggerVisible(\n collector: Collector.Instance,\n element: HTMLElement,\n config: { multiple?: boolean } = { multiple: false },\n): void {\n const state = (collector as CollectorWithVisibility)._visibilityState;\n if (state?.observer && element) {\n // Store element config for later use in intersection handling\n if (!state.elementConfigs) {\n state.elementConfigs = new WeakMap();\n }\n state.elementConfigs.set(element, {\n multiple: config.multiple ?? false,\n blocked: false,\n });\n state.observer.observe(element);\n }\n}\n\n/**\n * Destroys visibility tracking for a collector, cleaning up all resources\n */\nexport function destroyVisibilityTracking(collector: Collector.Instance): void {\n const state = (collector as CollectorWithVisibility)._visibilityState;\n if (!state) return;\n\n if (state.observer) {\n state.observer.disconnect();\n }\n\n delete (collector as CollectorWithVisibility)._visibilityState;\n}\n","import type { WalkerOS, Elb, Collector } from '@walkeros/core';\nimport {\n isString,\n isObject,\n isDefined,\n isSameType,\n isElementOrDocument,\n} from '@walkeros/core';\nimport type {\n BrowserPushData,\n BrowserPushOptions,\n BrowserPushContext,\n} from './types/elb';\n\n/**\n * Translation layer that converts flexible browser source inputs\n * to the strict core collector format\n */\nexport function translateToCoreCollector(\n collector: Collector.Instance,\n eventOrCommand: unknown,\n data?: BrowserPushData,\n options?: BrowserPushOptions,\n context?: BrowserPushContext,\n nested?: WalkerOS.Entities,\n custom?: WalkerOS.Properties,\n): Promise<Elb.PushResult> {\n // Handle walker commands - pass command and data only\n if (isString(eventOrCommand) && eventOrCommand.startsWith('walker ')) {\n if (eventOrCommand === 'walker config') {\n return (\n collector.push as (\n event: 'walker config',\n config: Collector.InitConfig,\n ) => Promise<Elb.PushResult>\n )('walker config', data as Collector.InitConfig);\n } else if (eventOrCommand === 'walker consent') {\n return (\n collector.push as (\n event: 'walker consent',\n consent: WalkerOS.Consent,\n ) => Promise<Elb.PushResult>\n )('walker consent', data as WalkerOS.Consent);\n } else if (eventOrCommand === 'walker user') {\n return (\n collector.push as (\n event: 'walker user',\n user: WalkerOS.User,\n ) => Promise<Elb.PushResult>\n )('walker user', data as WalkerOS.User);\n } else if (eventOrCommand === 'walker run') {\n return (\n collector.push as (\n event: 'walker run',\n options: Collector.InitConfig,\n ) => Promise<Elb.PushResult>\n )('walker run', data as Collector.InitConfig);\n } else if (eventOrCommand === 'walker hook') {\n // This is more complex due to the generic nature, but we can't handle it properly here\n // Fall through to the event handling\n }\n }\n\n // Handle event objects\n if (isObject(eventOrCommand)) {\n const event = eventOrCommand as WalkerOS.DeepPartialEvent;\n\n // If event doesn't have source info, add it\n if (!event.source) event.source = getBrowserSource();\n\n return collector.push(event);\n }\n\n // Handle string events with additional parameters\n if (isString(eventOrCommand) && eventOrCommand.length > 0) {\n const event: WalkerOS.DeepPartialEvent = {\n event: eventOrCommand,\n data: normalizeData(data || {}),\n context: normalizeContext(context || {}),\n custom,\n nested,\n source: getBrowserSource(),\n };\n\n // Add trigger if options is a string (likely a trigger)\n if (isString(options)) {\n (event as WalkerOS.DeepPartialEvent & { trigger?: string }).trigger =\n options;\n }\n\n return collector.push(event);\n }\n\n // For malformed commands, return a resolved promise without calling push\n if (!isDefined(eventOrCommand)) {\n return Promise.resolve({\n ok: true,\n successful: [],\n queued: [],\n failed: [],\n });\n }\n\n // Handle completely flexible format - build event object\n const event: WalkerOS.DeepPartialEvent = {\n event: String(eventOrCommand || ''),\n data: normalizeData(data || {}),\n context: normalizeContext(context || {}),\n custom,\n nested,\n source: getBrowserSource(),\n };\n\n // Add trigger if options is a string (likely a trigger)\n if (isString(options)) {\n (event as WalkerOS.DeepPartialEvent & { trigger?: string }).trigger =\n options;\n }\n\n return collector.push(event);\n}\n\n/**\n * Normalize data to WalkerOS.Properties format\n * Uses the same logic as legacy web collector\n */\nfunction normalizeData(data: BrowserPushData | undefined): WalkerOS.Properties {\n if (!data) return {};\n\n // Use the same logic as legacy: if it's Properties, use it; otherwise empty object\n return isSameType(data, {} as WalkerOS.Properties) ? data : {};\n}\n\n/**\n * Normalize context to WalkerOS.OrderedProperties format\n */\nfunction normalizeContext(\n context: BrowserPushContext | undefined,\n): WalkerOS.OrderedProperties {\n if (!context) return {};\n\n // Handle elements separately - they don't become context directly\n if (isElementOrDocument(context)) {\n return {};\n }\n\n // Only use objects with content as context\n if (isObject(context) && Object.keys(context).length) {\n return context as WalkerOS.OrderedProperties;\n }\n\n return {};\n}\n\n/**\n * Create source information for browser events\n */\nfunction getBrowserSource(): WalkerOS.Source {\n return {\n type: 'browser',\n id: window.location.href,\n previous_id: document.referrer,\n };\n}\n","import type { WalkerOS, Collector } from '@walkeros/core';\nimport type { ELBLayer, ELBLayerConfig } from './types';\nimport type {\n BrowserPushData,\n BrowserPushOptions,\n BrowserPushContext,\n} from './types/elb';\nimport { tryCatch } from '@walkeros/core';\nimport { translateToCoreCollector } from './translation';\n\n/**\n * Initialize ELB Layer for async command handling\n * This creates window.elbLayer array and processes any existing commands\n */\nexport function initElbLayer(\n collector: Collector.Instance,\n config: ELBLayerConfig = {},\n): void {\n const layerName = config.name || 'elbLayer';\n\n // Ensure elbLayer exists on window\n if (!window[layerName]) {\n window[layerName] = [];\n }\n\n const elbLayer = window[layerName] as ELBLayer;\n\n // Process any existing commands that were pushed before initialization\n if (Array.isArray(elbLayer) && elbLayer.length > 0) {\n processELBLayerCommands(collector, elbLayer);\n }\n}\n\n/**\n * Process commands from ELB Layer array\n * Commands are processed in order with walker commands getting priority\n */\nfunction processELBLayerCommands(\n collector: Collector.Instance,\n elbLayer: ELBLayer,\n): void {\n // Separate walker commands from regular events for priority processing\n const walkerCommands: unknown[] = [];\n const regularEvents: unknown[] = [];\n\n // Sort commands by priority (walker commands first)\n elbLayer.forEach((command) => {\n if (isWalkerCommand(command)) {\n walkerCommands.push(command);\n } else {\n regularEvents.push(command);\n }\n });\n\n // Process walker commands first\n walkerCommands.forEach((command) => {\n processCommand(collector, command);\n });\n\n // Then process regular events\n regularEvents.forEach((command) => {\n processCommand(collector, command);\n });\n\n // Clear the array after processing\n elbLayer.length = 0;\n}\n\n/**\n * Process a single command from ELB Layer\n */\nfunction processCommand(collector: Collector.Instance, command: unknown): void {\n // Skip malformed commands entirely\n if (\n command === null ||\n command === undefined ||\n command === '' ||\n typeof command === 'number' ||\n typeof command === 'string'\n ) {\n return;\n }\n\n tryCatch(\n () => {\n if (isArrayLike(command)) {\n // Handle array-like commands: [action, data, options, context]\n const args = Array.from(command as ArrayLike<unknown>);\n\n if (args.length >= 1) {\n const [action, data, options, context] = args;\n\n if (typeof action === 'string' && action.length > 0) {\n // Use translation layer to convert to core collector format\n translateToCoreCollector(\n collector,\n action,\n data as BrowserPushData,\n options as BrowserPushOptions,\n context as BrowserPushContext,\n );\n }\n }\n } else if (typeof command === 'object' && command !== null) {\n // Skip empty objects unless they have properties\n if (Object.keys(command).length === 0) {\n return;\n }\n // Handle object commands directly through translation\n translateToCoreCollector(collector, command);\n }\n },\n () => {\n // Silent error handling - failed commands are ignored\n },\n )();\n}\n\n/**\n * Check if a command is a walker command (starts with 'walker ')\n */\nfunction isWalkerCommand(command: unknown): boolean {\n if (isArrayLike(command)) {\n const args = Array.from(command as ArrayLike<unknown>);\n return typeof args[0] === 'string' && args[0].startsWith('walker ');\n }\n return false;\n}\n\n/**\n * Check if value is array-like (has length property)\n */\nfunction isArrayLike(value: unknown): boolean {\n return (\n value != null &&\n typeof value === 'object' &&\n 'length' in value &&\n typeof (value as unknown[]).length === 'number'\n );\n}\n","import type { WalkerOS, Collector } from '@walkeros/core';\nimport type { SessionCallback } from '@walkeros/web-core';\nimport { assign, useHooks } from '@walkeros/core';\nimport { onApply } from '@walkeros/collector';\nimport { sessionStart as sessionStartOrg } from '@walkeros/web-core';\n\nexport interface SessionStartOptions {\n config?: unknown;\n data?: Collector.SessionData;\n}\n\n// Enhanced session configuration interface\ninterface SessionConfigWithCallback {\n cb?: false | SessionCallback;\n [key: string]: unknown;\n}\n\nexport function createSessionStart(collector: Collector.Instance) {\n return function (\n options: SessionStartOptions = {},\n ): void | Collector.SessionData {\n const { config = {}, data, ...otherOptions } = options;\n return sessionStart(collector, {\n config: Object.assign({ pulse: true }, config),\n data: Object.assign({}, collector.session, {\n updated: Date.now(),\n }) as Collector.SessionData,\n ...otherOptions,\n });\n };\n}\n\nexport function sessionStart(\n collector: Collector.Instance,\n options: SessionStartOptions = {},\n): void | Collector.SessionData {\n const sessionConfig = options.config || {};\n const sessionData = assign(\n collector.config.sessionStatic || {},\n options.data || {},\n );\n\n // A wrapper for the callback\n const cb: SessionCallback = (\n session: Collector.SessionData,\n collector: Collector.Instance | undefined,\n defaultCb: SessionCallback,\n ) => {\n let result: void | undefined | Collector.SessionData;\n const configWithCb = sessionConfig as SessionConfigWithCallback;\n if (configWithCb.cb !== false && configWithCb.cb)\n // Run either the default callback or the provided one\n result = configWithCb.cb(\n session,\n collector,\n defaultCb as SessionCallback,\n );\n else if (configWithCb.cb !== false)\n // Run default callback\n result = (defaultCb as SessionCallback)(\n session,\n collector,\n defaultCb as SessionCallback,\n );\n\n // Assign the session (only if collector is available)\n if (collector) {\n collector.session = session;\n\n // Run on session events\n onApply(collector, 'session');\n }\n\n return result;\n };\n\n const session = useHooks(\n sessionStartOrg,\n 'SessionStart',\n collector.hooks,\n )({\n ...sessionConfig, // Session detection configuration\n cb, // Custom wrapper callback\n data: sessionData, // Static default session data\n collector,\n });\n\n return session;\n}\n","import type { Settings } from './types';\n\n/**\n * Get browser source configuration with defaults\n * @param settings - Partial settings to override defaults\n * @returns Complete settings object with all defaults applied\n */\nexport function getConfig(\n settings: Partial<Settings> = {},\n): Required<Settings> {\n // Ensure scope is valid, default to document if null/undefined\n const validScope = settings.scope || document;\n\n return {\n prefix: 'data-elb',\n pageview: true,\n session: true,\n elb: 'elb',\n name: 'walkerjs',\n elbLayer: 'elbLayer',\n ...settings,\n scope: validScope, // Override to ensure valid scope\n };\n}\n","import type { Mapping as WalkerOSMapping, Source } from '@walkeros/core';\nimport type {\n Walker,\n Elb,\n SessionConfig,\n SessionCallback,\n} from '@walkeros/web-core';\n\n// Export browser-specific elb types\nexport * from './elb';\n\n// Browser source configuration extending core source config\nexport interface BrowserSourceConfig extends Source.Config {\n type: 'browser';\n settings: Settings;\n}\n\nexport interface Config {\n settings: Settings;\n mapping?: Mapping;\n}\n\nexport interface Settings extends Record<string, unknown> {\n prefix?: string;\n scope?: Element | Document;\n pageview?: boolean;\n session?: boolean | SessionConfig;\n elb?: string;\n name?: string;\n elbLayer?: boolean | string | Elb.Layer;\n}\n\n// Re-export session types from web-core to avoid duplication\nexport type { SessionConfig, SessionCallback };\n\n// ELB Layer types for async command handling\nexport type ELBLayer = Elb.Layer;\nexport interface ELBLayerConfig {\n name?: string; // Property name for window.elbLayer (default: 'elbLayer')\n}\n\ndeclare global {\n interface Window {\n [key: string]: Elb.Layer | unknown;\n }\n}\n\n// Source-to-collector mapping rules\nexport interface Mapping {\n // Transform source events to collector format\n}\n\nexport type Rule = WalkerOSMapping.Rule<Mapping>;\nexport type Rules = WalkerOSMapping.Rules<Rule>;\n\n// Re-export Walker types for backward compatibility\nexport type Trigger = Walker.Trigger;\nexport type WalkerEvent = Walker.Event;\nexport type Events = Walker.Events;\nexport type Filter = Walker.Filter;\nexport interface TriggerAction {\n trigger: string;\n triggerParams?: string;\n action: string;\n actionParams?: string;\n}\nexport type TriggerActions = Walker.TriggerActions;\nexport type TriggersActionGroups = Walker.TriggersActionGroups;\nexport type ScrollElements = Walker.ScrollElements;\nexport type Attributes = Walker.Attributes;\nexport type KeyVal = Walker.KeyVal;\n\n// Scope type for DOM operations\nexport type Scope = Document | Element;\n","import type { WalkerOS } from '@walkeros/core';\nimport { isString, isDefined } from '@walkeros/core';\n\nexport interface TaggerConfig {\n prefix?: string;\n}\n\nexport interface TaggerInstance {\n entity: (name: string) => TaggerInstance;\n data: ((key: string, value: WalkerOS.Property) => TaggerInstance) &\n ((data: WalkerOS.Properties) => TaggerInstance);\n action: ((trigger: string, action?: string) => TaggerInstance) &\n ((actions: Record<string, string>) => TaggerInstance);\n context: ((key: string, value: WalkerOS.Property) => TaggerInstance) &\n ((context: WalkerOS.Properties) => TaggerInstance);\n globals: ((key: string, value: WalkerOS.Property) => TaggerInstance) &\n ((globals: WalkerOS.Properties) => TaggerInstance);\n link: ((id: string, type: string) => TaggerInstance) &\n ((links: Record<string, string>) => TaggerInstance);\n get: () => Record<string, string>;\n}\n\n/**\n * Creates a new tagger instance for generating walkerOS data attributes.\n *\n * @param config The configuration for the tagger.\n * @returns A new tagger instance.\n */\nexport function createTagger(\n config: TaggerConfig = {},\n): (entity?: string) => TaggerInstance {\n const prefix = config.prefix || 'data-elb';\n\n return function (entity?: string): TaggerInstance {\n // Internal state\n let currentEntity: string | undefined = entity;\n const dataProperties: Record<string, WalkerOS.Properties> = {};\n const actionProperties: Record<string, string> = {};\n const contextProperties: WalkerOS.Properties = {};\n const globalProperties: WalkerOS.Properties = {};\n const linkProperties: Record<string, string> = {};\n\n // Helper function to escape special characters\n function escapeValue(value: WalkerOS.Property | undefined): string {\n if (!isDefined(value) || value === null) return 'undefined';\n\n let str = String(value);\n\n // Escape backslashes first, then other characters\n str = str.replace(/\\\\/g, '\\\\\\\\');\n str = str.replace(/;/g, '\\\\;');\n str = str.replace(/:/g, '\\\\:');\n str = str.replace(/'/g, \"\\\\'\");\n\n return str;\n }\n\n // Helper function to serialize key-value pairs\n function serializeKeyValue(obj: WalkerOS.Properties): string {\n return Object.entries(obj)\n .map(([key, value]) => `${key}:${escapeValue(value)}`)\n .join(';');\n }\n\n const instance: TaggerInstance = {\n entity(name: string): TaggerInstance {\n currentEntity = name;\n return instance;\n },\n\n data(\n keyOrData: string | WalkerOS.Properties,\n value?: WalkerOS.Property,\n ): TaggerInstance {\n const entityKey = currentEntity ?? '';\n\n if (!dataProperties[entityKey]) {\n dataProperties[entityKey] = {};\n }\n\n if (isString(keyOrData)) {\n dataProperties[entityKey][keyOrData] = value;\n } else {\n Object.assign(dataProperties[entityKey], keyOrData);\n }\n\n return instance;\n },\n\n action(\n triggerOrActions: string | Record<string, string>,\n actionValue?: string,\n ): TaggerInstance {\n if (isString(triggerOrActions)) {\n if (isDefined(actionValue)) {\n // Two parameters: trigger and action\n actionProperties[triggerOrActions] = actionValue;\n } else {\n // Single parameter: could be \"trigger:action\" or just \"trigger\"\n if (triggerOrActions.includes(':')) {\n const [trigger, action] = triggerOrActions.split(':', 2);\n actionProperties[trigger] = action;\n } else {\n actionProperties[triggerOrActions] = triggerOrActions;\n }\n }\n } else {\n Object.assign(actionProperties, triggerOrActions);\n }\n\n return instance;\n },\n\n context(\n keyOrContext: string | WalkerOS.Properties,\n value?: WalkerOS.Property,\n ): TaggerInstance {\n if (isString(keyOrContext)) {\n contextProperties[keyOrContext] = value;\n } else {\n Object.assign(contextProperties, keyOrContext);\n }\n\n return instance;\n },\n\n globals(\n keyOrGlobals: string | WalkerOS.Properties,\n value?: WalkerOS.Property,\n ): TaggerInstance {\n if (isString(keyOrGlobals)) {\n globalProperties[keyOrGlobals] = value;\n } else {\n Object.assign(globalProperties, keyOrGlobals);\n }\n\n return instance;\n },\n\n link(\n idOrLinks: string | Record<string, string>,\n type?: string,\n ): TaggerInstance {\n if (isString(idOrLinks)) {\n linkProperties[idOrLinks] = type!;\n } else {\n Object.assign(linkProperties, idOrLinks);\n }\n\n return instance;\n },\n\n get(): Record<string, string> {\n const attributes: Record<string, string> = {};\n\n // Add entity attribute if set\n if (currentEntity) {\n attributes[prefix] = currentEntity;\n }\n\n // Add data attributes\n Object.entries(dataProperties).forEach(([entityKey, props]) => {\n if (Object.keys(props).length > 0) {\n const attrName = entityKey\n ? `${prefix}-${entityKey}`\n : `${prefix}-`;\n attributes[attrName] = serializeKeyValue(props);\n }\n });\n\n // Add action attributes\n if (Object.keys(actionProperties).length > 0) {\n attributes[`${prefix}action`] = serializeKeyValue(actionProperties);\n }\n\n // Add context attributes\n if (Object.keys(contextProperties).length > 0) {\n attributes[`${prefix}context`] = serializeKeyValue(contextProperties);\n }\n\n // Add global attributes\n if (Object.keys(globalProperties).length > 0) {\n attributes[`${prefix}globals`] = serializeKeyValue(globalProperties);\n }\n\n // Add link attributes\n if (Object.keys(linkProperties).length > 0) {\n attributes[`${prefix}link`] = serializeKeyValue(linkProperties);\n }\n\n return attributes;\n },\n };\n\n return instance;\n };\n}\n"],"mappings":"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","names":["import_collector","import_web_core","filter","str","elem","import_web_core","elementConfig","_a","event","elem","scrollElements","collector","import_collector","import_web_core","session","collector","sessionStartOrg"]}
|
package/dist/index.mjs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e,t,n=Object.getOwnPropertyNames,r=(e={"package.json"(e,t){t.exports={name:"@walkeros/core",description:"Core types and platform-agnostic utilities for walkerOS",version:"0.0.7",main:"./dist/index.js",module:"./dist/index.mjs",types:"./dist/index.d.ts",license:"MIT",files:["dist/**"],scripts:{build:"tsup --silent",clean:"rm -rf .turbo && rm -rf node_modules && rm -rf dist",dev:"jest --watchAll --colors",lint:'tsc && eslint "**/*.ts*"',test:"jest",update:"npx npm-check-updates -u && npm update"},dependencies:{},devDependencies:{},repository:{url:"git+https://github.com/elbwalker/walkerOS.git",directory:"packages/core"},author:"elbwalker <hello@elbwalker.com>",homepage:"https://github.com/elbwalker/walkerOS#readme",bugs:{url:"https://github.com/elbwalker/walkerOS/issues"},keywords:["walker","walkerOS","analytics","tracking","data collection","measurement","data privacy","privacy friendly","web analytics","product analytics","core","types","utils"],funding:[{type:"GitHub Sponsors",url:"https://github.com/sponsors/elbwalker"}]}}},function(){return t||(0,e[n(e)[0]])((t={exports:{}}).exports,t),t.exports}),o={merge:!0,shallow:!0,extend:!0};function s(e,t={},n={}){n={...o,...n};const r=Object.entries(t).reduce((t,[r,o])=>{const s=e[r];return n.merge&&Array.isArray(s)&&Array.isArray(o)?t[r]=o.reduce((e,t)=>e.includes(t)?e:[...e,t],[...s]):(n.extend||r in e)&&(t[r]=o),t},{});return n.shallow?{...e,...r}:(Object.assign(e,r),e)}function i(e){return Array.isArray(e)}function c(e){return void 0!==e}function a(e){return"object"==typeof e&&null!==e&&!i(e)&&"[object Object]"===Object.prototype.toString.call(e)}function l(e){return"string"==typeof e}function u(e){if("true"===e)return!0;if("false"===e)return!1;const t=Number(e);return e==t&&""!==e?t:String(e)}var{version:f}=r();function d(e,t,n){return function(...r){try{return e(...r)}catch(e){if(!t)return;return t(e)}finally{null==n||n()}}}function m(e){return e?e.trim().replace(/^'|'$/g,"").trim():""}import{Const as p,onApply as b}from"@walkeros/collector";import{elb as g,getAttribute as h}from"@walkeros/web-core";import{Const as y}from"@walkeros/collector";import{getAttribute as w}from"@walkeros/web-core";function k(e,t,n=!0){return e+(t=null!=t?(n?"-":"")+t:"")}function v(e,t,n,r=!0){return A(w(t,k(e,n,r))||"").reduce((e,n)=>{let[r,o]=P(n);if(!r)return e;if(o||(r.endsWith(":")&&(r=r.slice(0,-1)),o=""),o.startsWith("#")){o=o.slice(1);try{let e=t[o];e||"selected"!==o||(e=t.options[t.selectedIndex].text),o=String(e)}catch(e){o=""}}return r.endsWith("[]")?(r=r.slice(0,-2),i(e[r])||(e[r]=[]),e[r].push(u(o))):e[r]=u(o),e},{})}function j(e=document.body,t=y.Commands.Prefix){let n=[];const r=y.Commands.Action,o=`[${k(t,r,!1)}]`,s=e=>{Object.keys(v(t,e,r,!1)).forEach(r=>{n=n.concat(S(e,r,t))})};return e!==document&&e.matches(o)&&s(e),L(e,o,s),n}function S(e,t,n=y.Commands.Prefix){const r=[],o=function(e,t,n){let r=t;for(;r;){const t=x(w(r,k(e,y.Commands.Action,!1)));if(t[n]||"click"!==n)return t[n];r=$(e,r)}return[]}(n,e,t);return o?(o.forEach(o=>{const s=A(o.actionParams||"",",").reduce((e,t)=>(e[m(t)]=!0,e),{}),i=function(e,t,n){const r=[];let o=t;n=0!==Object.keys(n||{}).length?n:void 0;for(;o;){const s=C(e,o,t,n);s&&r.push(s),o=$(e,o)}return r}(n,e,s);if(!i.length){const t="page",r=`[${k(n,t)}]`,[o,s]=E(e,r,n,t);i.push({type:t,data:o,nested:[],context:s})}i.forEach(e=>{r.push({entity:e.type,action:o.action,data:e.data,trigger:t,context:e.context,nested:e.nested})})}),r):r}function O(e=y.Commands.Prefix,t=document){const n=k(e,y.Commands.Globals,!1);let r={};return L(t,`[${n}]`,t=>{r=s(r,v(e,t,y.Commands.Globals,!1))}),r}function x(e){const t={};return A(e).forEach(e=>{const[n,r]=P(e),[o,s]=W(n);if(!o)return;let[i,c]=W(r||"");i=i||o,t[o]||(t[o]=[]),t[o].push({trigger:o,triggerParams:s,action:i,actionParams:c})}),t}function C(e,t,n,r){const o=w(t,k(e));if(!o||r&&!r[o])return null;const i=[t],c=`[${k(e,o)}],[${k(e,"")}]`,a=k(e,y.Commands.Link,!1);let l={};const u=[],[f,d]=E(n||t,c,e,o);L(t,`[${a}]`,t=>{const[n,r]=P(w(t,a));"parent"===r&&L(document.body,`[${a}="${n}:child"]`,t=>{i.push(t);const n=C(e,t);n&&u.push(n)})});const m=[];i.forEach(e=>{e.matches(c)&&m.push(e),L(e,c,e=>m.push(e))});let p={};return m.forEach(t=>{p=s(p,v(e,t,"")),l=s(l,v(e,t,o))}),l=s(s(p,l),f),i.forEach(t=>{L(t,`[${k(e)}]`,t=>{const n=C(e,t);n&&u.push(n)})}),{type:o,data:l,context:d,nested:u}}function $(e,t){const n=k(e,y.Commands.Link,!1);if(t.matches(`[${n}]`)){const[e,r]=P(w(t,n));if("child"===r)return document.querySelector(`[${n}="${e}:parent"]`)}return!t.parentElement&&t.getRootNode&&t.getRootNode()instanceof ShadowRoot?t.getRootNode().host:t.parentElement}function E(e,t,n,r){let o={};const i={};let c=e;const a=`[${k(n,y.Commands.Context,!1)}]`;let l=0;for(;c;)c.matches(t)&&(o=s(v(n,c,""),o),o=s(v(n,c,r),o)),c.matches(a)&&(Object.entries(v(n,c,y.Commands.Context,!1)).forEach(([e,t])=>{t&&!i[e]&&(i[e]=[t,l])}),++l),c=$(n,c);return[o,i]}function L(e,t,n){e.querySelectorAll(t).forEach(n)}function A(e,t=";"){if(!e)return[];const n=new RegExp(`(?:[^${t}']+|'[^']*')+`,"ig");return e.match(n)||[]}function P(e){const[t,n]=e.split(/:(.+)/,2);return[m(t),m(n)]}function W(e){const[t,n]=e.split("(",2);return[t,n?n.slice(0,-1):""]}import{isVisible as _}from"@walkeros/web-core";var H=new WeakMap,I=new WeakMap;function M(e){const t=Date.now();let n=I.get(e);return(!n||t-n.lastChecked>500)&&(n={isVisible:_(e),lastChecked:t},I.set(e,n)),n.isVisible}function R(e){if(window.IntersectionObserver)return d(()=>new window.IntersectionObserver(t=>{t.forEach(t=>{!function(e,t){var n,r;const o=t.target,s=e._visibilityState;if(!s)return;const i=s.timers.get(o);if(t.intersectionRatio>0){const r=Date.now();let c=H.get(o);(!c||r-c.lastChecked>1e3)&&(c={isLarge:o.offsetHeight>window.innerHeight,lastChecked:r},H.set(o,c));if(t.intersectionRatio>=.5||c.isLarge&&M(o)){const t=null==(n=s.elementConfigs)?void 0:n.get(o);if((null==t?void 0:t.multiple)&&t.blocked)return;if(!i){const t=window.setTimeout(async()=>{var t;if(M(o)){await K(e,o,z.Visible,"data-elb");const n=null==(t=s.elementConfigs)?void 0:t.get(o);(null==n?void 0:n.multiple)?n.blocked=!0:function(e,t){const n=e._visibilityState;if(!n)return;n.observer&&n.observer.unobserve(t);const r=n.timers.get(t);r&&(clearTimeout(r),n.timers.delete(t)),H.delete(t),I.delete(t)}(e,o)}},s.duration);s.timers.set(o,t)}return}}i&&(clearTimeout(i),s.timers.delete(o));const c=null==(r=s.elementConfigs)?void 0:r.get(o);(null==c?void 0:c.multiple)&&(c.blocked=!1)}(e,t)})},{rootMargin:"0px",threshold:[0,.5]}),()=>{})()}function T(e,t,n={multiple:!1}){var r;const o=e._visibilityState;(null==o?void 0:o.observer)&&t&&(o.elementConfigs||(o.elementConfigs=new WeakMap),o.elementConfigs.set(t,{multiple:null!=(r=n.multiple)&&r,blocked:!1}),o.observer.observe(t))}function V(e){const t=e._visibilityState;t&&(t.observer&&t.observer.disconnect(),delete e._visibilityState)}function N(e,t,n,r,o,s,i){if(l(t)&&t.startsWith("walker ")){if("walker config"===t)return e.push("walker config",n);if("walker consent"===t)return e.push("walker consent",n);if("walker user"===t)return e.push("walker user",n);if("walker run"===t)return e.push("walker run",n)}if(a(t)){const n=t;return n.source||(n.source=G()),e.push(n)}if(l(t)&&t.length>0){const c={event:t,data:q(n||{}),context:D(o||{}),custom:i,nested:s,source:G()};return l(r)&&(c.trigger=r),e.push(c)}if(!c(t))return Promise.resolve({ok:!0,successful:[],queued:[],failed:[]});const u={event:String(t||""),data:q(n||{}),context:D(o||{}),custom:i,nested:s,source:G()};return l(r)&&(u.trigger=r),e.push(u)}function q(e){return e?typeof e==typeof{}?e:{}:{}}function D(e){return e?(t=e)===document||t instanceof Element?{}:a(e)&&Object.keys(e).length?e:{}:{};var t}function G(){return{type:"browser",id:window.location.href,previous_id:document.referrer}}var B,Y=[],z={Click:"click",Custom:"custom",Hover:"hover",Load:"load",Pulse:"pulse",Scroll:"scroll",Submit:"submit",Visible:"visible",Visibles:"visibles",Wait:"wait"};function F(e,t){const{prefix:n,scope:r,pageview:o}=t;if(o){const[t,o]=function(e,t){const n=window.location,r="page",o=t===document?document.body:t,[s,i]=E(o,`[${k(e,r)}]`,e,r);return s.domain=n.hostname,s.title=document.title,s.referrer=document.referrer,n.search&&(s.search=n.search),n.hash&&(s.hash=n.hash),[s,i]}(n,r);N(e,"page view",t,z.Load,o)}!function(e,t,n){Y=[],V(e),function(e,t=1e3){e._visibilityState||(e._visibilityState={observer:R(e),timers:new WeakMap,duration:t})}(e,1e3);const r=k(t,p.Commands.Action,!1),o=n||document;o!==document&&Q(e,o,r,t);o.querySelectorAll(`[${r}]`).forEach(n=>Q(e,n,r,t)),Y.length&&function(e,t){const n=(e,t)=>e.filter(([e,n])=>{const r=window.scrollY+window.innerHeight,o=e.offsetTop;if(r<o)return!0;const s=e.clientHeight;return!(100*(1-(o+s-r)/(s||1))>=n)||(K(t,e,z.Scroll,"data-elb"),!1)});B||(B=function(e,t=1e3){let n=null;return function(...r){if(null===n)return n=setTimeout(()=>{n=null},t),e(...r)}}(function(){Y=n.call(t,Y,e)}),t.addEventListener("scroll",B))}(e,o)}(e,n,r)}function J(e,t){t.addEventListener("click",d(function(t){U.call(this,e,t)})),t.addEventListener("submit",d(function(t){X.call(this,e,t)}))}async function K(e,t,n,r){const o=S(t,n,r);return Promise.all(o.map(t=>N(e,{event:`${t.entity} ${t.action}`,...t,trigger:n})))}function Q(e,t,n,r){const o=h(t,n);o&&Object.values(x(o)).forEach(n=>n.forEach(n=>{switch(n.trigger){case z.Hover:!function(e,t,n){t.addEventListener("mouseenter",d(function(t){t.target instanceof Element&&K(e,t.target,z.Hover,n)}))}(e,t,r);break;case z.Load:!function(e,t,n){K(e,t,z.Load,n)}(e,t,r);break;case z.Pulse:!function(e,t,n="",r){setInterval(()=>{document.hidden||K(e,t,z.Pulse,r)},parseInt(n||"")||15e3)}(e,t,n.triggerParams,r);break;case z.Scroll:!function(e,t=""){const n=parseInt(t||"")||50;if(n<0||n>100)return;Y.push([e,n])}(t,n.triggerParams);break;case z.Visible:T(e,t);break;case z.Visibles:T(e,t,{multiple:!0});break;case z.Wait:!function(e,t,n="",r){setTimeout(()=>K(e,t,z.Wait,r),parseInt(n||"")||15e3)}(e,t,n.triggerParams,r)}}))}function U(e,t){K(e,t.target,z.Click,"data-elb")}function X(e,t){t.target&&K(e,t.target,z.Submit,"data-elb")}function Z(e,t={}){const n=t.name||"elbLayer";window[n]||(window[n]=[]);const r=window[n];Array.isArray(r)&&r.length>0&&function(e,t){const n=[],r=[];t.forEach(e=>{!function(e){if(te(e)){const t=Array.from(e);return"string"==typeof t[0]&&t[0].startsWith("walker ")}return!1}(e)?r.push(e):n.push(e)}),n.forEach(t=>{ee(e,t)}),r.forEach(t=>{ee(e,t)}),t.length=0}(e,r)}function ee(e,t){null!=t&&""!==t&&"number"!=typeof t&&"string"!=typeof t&&d(()=>{if(te(t)){const n=Array.from(t);if(n.length>=1){const[t,r,o,s]=n;"string"==typeof t&&t.length>0&&N(e,t,r,o,s)}}else if("object"==typeof t&&null!==t){if(0===Object.keys(t).length)return;N(e,t)}},()=>{})()}function te(e){return null!=e&&"object"==typeof e&&"length"in e&&"number"==typeof e.length}import{onApply as ne}from"@walkeros/collector";import{sessionStart as re}from"@walkeros/web-core";var oe={};function se(e={}){const t=e.prefix||"data-elb";return function(e){let n=e;const r={},o={},s={},i={},a={};function u(e){return Object.entries(e).map(([e,t])=>`${e}:${function(e){if(!c(e)||null===e)return"undefined";let t=String(e);return t=t.replace(/\\/g,"\\\\"),t=t.replace(/;/g,"\\;"),t=t.replace(/:/g,"\\:"),t=t.replace(/'/g,"\\'"),t}(t)}`).join(";")}const f={entity:e=>(n=e,f),data(e,t){const o=null!=n?n:"";return r[o]||(r[o]={}),l(e)?r[o][e]=t:Object.assign(r[o],e),f},action(e,t){if(l(e))if(c(t))o[e]=t;else if(e.includes(":")){const[t,n]=e.split(":",2);o[t]=n}else o[e]=e;else Object.assign(o,e);return f},context:(e,t)=>(l(e)?s[e]=t:Object.assign(s,e),f),globals:(e,t)=>(l(e)?i[e]=t:Object.assign(i,e),f),link:(e,t)=>(l(e)?a[e]=t:Object.assign(a,e),f),get(){const e={};return n&&(e[t]=n),Object.entries(r).forEach(([n,r])=>{if(Object.keys(r).length>0){e[n?`${t}-${n}`:`${t}-`]=u(r)}}),Object.keys(o).length>0&&(e[`${t}action`]=u(o)),Object.keys(s).length>0&&(e[`${t}context`]=u(s)),Object.keys(i).length>0&&(e[`${t}globals`]=u(i)),Object.keys(a).length>0&&(e[`${t}link`]=u(a)),e}};return f}}var ie=async(e,t)=>{const n=function(e={}){const t=e.scope||document;return{prefix:"data-elb",pageview:!0,session:!0,elb:"elb",name:"walkerjs",elbLayer:"elbLayer",...e,scope:t}}(t.settings),r={...t,settings:n},o=n.scope,i={type:"browser",config:r,collector:e,destroy(){V(e)}};if(!1!==n.elbLayer&&Z(e,{name:l(n.elbLayer)?n.elbLayer:"elbLayer"}),J(e,o),n.session){const t="boolean"==typeof n.session?{}:n.session;!function(e,t={}){const n=t.config||{},r=s(e.config.sessionStatic||{},t.data||{});var o,i,c;(o=re,i="SessionStart",c=e.hooks,function(...e){let t;const n="post"+i,r=c["pre"+i],s=c[n];return t=r?r({fn:o},...e):o(...e),s&&(t=s({fn:o,result:t},...e)),t})({...n,cb:(e,t,r)=>{let o;const s=n;return!1!==s.cb&&s.cb?o=s.cb(e,t,r):!1!==s.cb&&(o=r(e,t,r)),t&&(t.session=e,ne(t,"session")),o},data:r,collector:e})}(e,{config:t})}await async function(e,t,n){const r=()=>{e(t,n),b(t,"ready")};"loading"!==document.readyState?r():document.addEventListener("DOMContentLoaded",r)}(F,e,n);const c=e._destroy;e._destroy=()=>{var e;null==(e=i.destroy)||e.call(i),c&&c()};return{source:i,elb:(...t)=>{const[n,r,o,s,i,c]=t;return N(e,n,r,o,s,i,c)}}},ce=ie;export{oe as SourceBrowser,se as createTagger,ce as default,j as getAllEvents,S as getEvents,O as getGlobals,ie as sourceBrowser};//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/trigger.ts","../src/walker.ts","../src/triggerVisible.ts","../src/translation.ts","../src/elbLayer.ts","../src/session.ts","../src/config.ts","../src/types/index.ts","../src/tagger.ts","../src/index.ts"],"sourcesContent":["import type { WalkerOS, Collector } from '@walkeros/core';\nimport type {\n Trigger,\n Scope,\n WalkerEvent,\n Events,\n ScrollElements,\n TriggerAction,\n Settings,\n} from './types';\nimport { throttle, tryCatch } from '@walkeros/core';\nimport { Const, onApply } from '@walkeros/collector';\nimport { elb as elbOrg, getAttribute } from '@walkeros/web-core';\nimport {\n getElbAttributeName,\n getEvents,\n getPageViewData,\n getTriggerActions,\n} from './walker';\nimport {\n initVisibilityTracking,\n triggerVisible,\n destroyVisibilityTracking,\n} from './triggerVisible';\nimport { translateToCoreCollector } from './translation';\n\nlet scrollElements: ScrollElements = [];\nlet scrollListener: EventListenerOrEventListenerObject | undefined;\n\n// Reset function for testing\nexport function resetScrollListener() {\n scrollListener = undefined;\n scrollElements = [];\n}\n\nexport const createElb: (customLayer?: unknown) => unknown = (customLayer?) => {\n return (\n customLayer\n ? function () {\n (customLayer as unknown[]).push(arguments);\n }\n : elbOrg\n ) as unknown;\n};\n\nexport const Triggers: { [key: string]: 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 Visibles: 'visibles',\n Wait: 'wait',\n} as const;\n\nexport async function ready(\n fn: (collector: Collector.Instance, settings: any) => void,\n collector: Collector.Instance,\n settings: any,\n): Promise<void> {\n const readyFn = () => {\n fn(collector, settings);\n onApply(collector, 'ready');\n };\n\n if (document.readyState !== 'loading') {\n readyFn();\n } else {\n document.addEventListener('DOMContentLoaded', readyFn);\n }\n}\n\n// Called for each new run to setup triggers\nexport function load(\n collector: Collector.Instance,\n settings: Required<Settings>,\n) {\n const { prefix, scope, pageview } = settings;\n\n // Trigger static page view if enabled\n if (pageview) {\n const [data, context] = getPageViewData(prefix, scope as Scope);\n translateToCoreCollector(\n collector,\n 'page view',\n data,\n Triggers.Load,\n context,\n );\n }\n\n initScopeTrigger(collector, prefix, scope as Scope);\n}\n\nexport function initGlobalTrigger(\n collector: Collector.Instance,\n scope: Scope,\n): void {\n scope.addEventListener(\n 'click',\n tryCatch(function (this: Scope, ev: unknown) {\n triggerClick.call(this, collector, ev as MouseEvent);\n }) as EventListener,\n );\n scope.addEventListener(\n 'submit',\n tryCatch(function (this: Scope, ev: unknown) {\n triggerSubmit.call(this, collector, ev as SubmitEvent);\n }) as EventListener,\n );\n}\n\nexport function initScopeTrigger(\n collector: Collector.Instance,\n prefix: string,\n elem?: Scope,\n) {\n // Reset all scroll events @TODO check if it's right here\n scrollElements = [];\n\n // Clean up any existing visibility tracking to prevent observer accumulation\n destroyVisibilityTracking(collector);\n\n // Initialize visibility tracking for this collector\n initVisibilityTracking(collector, 1000);\n\n // default data-elbaction\n const selectorAction = getElbAttributeName(\n prefix,\n Const.Commands.Action,\n false,\n );\n\n const scope = elem || document;\n if (scope !== document) {\n // Handle the elements action(s), too\n handleActionElem(collector, scope as HTMLElement, selectorAction, prefix);\n }\n\n // Handle all children action(s)\n scope\n .querySelectorAll<HTMLElement>(`[${selectorAction}]`)\n .forEach((elem) =>\n handleActionElem(collector, elem, selectorAction, prefix),\n );\n\n if (scrollElements.length) scroll(collector, scope);\n}\n\nexport async function handleTrigger(\n collector: Collector.Instance,\n element: Element,\n trigger: string,\n prefix: string,\n // @TODO add triggerParams to filter for specific trigger\n): Promise<unknown[]> {\n const events = getEvents(element, trigger, prefix);\n return Promise.all(\n events.map((event: WalkerEvent) =>\n translateToCoreCollector(collector, {\n event: `${event.entity} ${event.action}`,\n ...event,\n trigger,\n }),\n ),\n );\n}\n\nfunction handleActionElem(\n collector: Collector.Instance,\n elem: HTMLElement,\n selectorAction: string,\n prefix: 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 Triggers.Hover:\n triggerHover(collector, elem, prefix);\n break;\n case Triggers.Load:\n triggerLoad(collector, elem, prefix);\n break;\n case Triggers.Pulse:\n triggerPulse(collector, elem, triggerAction.triggerParams, prefix);\n break;\n case Triggers.Scroll:\n triggerScroll(elem, triggerAction.triggerParams);\n break;\n case Triggers.Visible:\n triggerVisible(collector, elem);\n break;\n case Triggers.Visibles:\n triggerVisible(collector, elem, { multiple: true });\n break;\n case Triggers.Wait:\n triggerWait(collector, elem, triggerAction.triggerParams, prefix);\n break;\n }\n }),\n );\n}\n\nfunction triggerClick(collector: Collector.Instance, ev: MouseEvent) {\n // Use default prefix - will be parameterized when integrating with source config\n handleTrigger(collector, ev.target as Element, Triggers.Click, 'data-elb');\n}\n\nfunction triggerHover(\n collector: Collector.Instance,\n elem: HTMLElement,\n prefix: string,\n) {\n elem.addEventListener(\n 'mouseenter',\n tryCatch(function (this: Document, ev: MouseEvent) {\n if (ev.target instanceof Element)\n handleTrigger(collector, ev.target, Triggers.Hover, prefix);\n }),\n );\n}\n\nfunction triggerLoad(\n collector: Collector.Instance,\n elem: HTMLElement,\n prefix: string,\n) {\n handleTrigger(collector, elem, Triggers.Load, prefix);\n}\n\nfunction triggerPulse(\n collector: Collector.Instance,\n elem: HTMLElement,\n triggerParams: string = '',\n prefix: string,\n) {\n setInterval(\n () => {\n // Only trigger when tab is active\n if (!document.hidden)\n handleTrigger(collector, elem, Triggers.Pulse, prefix);\n },\n parseInt(triggerParams || '') || 15000,\n );\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(collector: Collector.Instance, ev: SubmitEvent) {\n // Use default prefix - will be parameterized when integrating with source config\n if (ev.target) {\n handleTrigger(collector, ev.target as Element, Triggers.Submit, 'data-elb');\n }\n}\n\nfunction triggerWait(\n collector: Collector.Instance,\n elem: HTMLElement,\n triggerParams: string = '',\n prefix: string,\n) {\n setTimeout(\n () => handleTrigger(collector, elem, Triggers.Wait, prefix),\n parseInt(triggerParams || '') || 15000,\n );\n}\n\nfunction scroll(collector: Collector.Instance, scope: Scope) {\n const scrolling = (\n scrollElements: ScrollElements,\n collector: Collector.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(collector, element, Triggers.Scroll, 'data-elb');\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(scope, scrollElements, collector);\n });\n\n scope.addEventListener('scroll', scrollListener);\n }\n}\n","import type { WalkerOS } from '@walkeros/core';\nimport type {\n Scope,\n WalkerEvent,\n Events,\n Filter,\n TriggerAction,\n TriggerActions,\n TriggersActionGroups,\n Attributes,\n KeyVal,\n} from './types';\nimport { assign, castValue, isArray, trim } from '@walkeros/core';\nimport { Const } from '@walkeros/collector';\nimport { getAttribute } from '@walkeros/web-core';\n\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: Scope = document.body,\n prefix: string = Const.Commands.Prefix,\n): Events {\n let events: Events = [];\n const action = Const.Commands.Action;\n const actionSelector = `[${getElbAttributeName(prefix, action, false)}]`;\n\n const processElementEvents = (elem: Element) => {\n Object.keys(getElbValues(prefix, elem, action, false)).forEach(\n (trigger) => {\n events = events.concat(getEvents(elem, trigger, prefix));\n },\n );\n };\n\n // Check if the scope element itself has action attributes\n if (scope !== document && (scope as Element).matches(actionSelector)) {\n processElementEvents(scope as Element);\n }\n\n queryAll(scope, actionSelector, processElementEvents);\n\n return events;\n}\n\nexport function getEvents(\n target: Element,\n trigger: string,\n prefix: string = Const.Commands.Prefix,\n): Events {\n const events: 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 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 scope: Scope = document,\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(scope, 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 scope: Scope,\n): [WalkerOS.Properties, WalkerOS.OrderedProperties] {\n // static page view\n const loc = window.location;\n const page = 'page';\n const scopeElement = scope === document ? document.body : (scope as Element);\n const [data, context] = getThisAndParentProperties(\n scopeElement,\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): TriggersActionGroups {\n const values: 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?: 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?: 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 // Note: This searches the entire document - for scoped operation, we would need\n // to pass scope context down to this function or redesign the linking mechanism\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 // Note: This searches the entire document - for scoped operation, we would need\n // to pass scope context down to this function or redesign the linking mechanism\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: string,\n): 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 = ';'): Attributes {\n const values: 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): KeyVal {\n const [key, value] = str.split(/:(.+)/, 2);\n return [trim(key), trim(value)];\n}\n\nfunction parseAttribute(str: string): 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 type { WalkerOS, Collector } from '@walkeros/core';\nimport { tryCatch } from '@walkeros/core';\nimport { isVisible } from '@walkeros/web-core';\nimport { handleTrigger, Triggers } from './trigger';\n\n// Cache for element size calculations to reduce DOM queries\nconst elementSizeCache = new WeakMap<\n HTMLElement,\n { isLarge: boolean; lastChecked: number }\n>();\n\n// Cache for basic visibility checks to reduce expensive isVisible() calls\nconst visibilityCache = new WeakMap<\n HTMLElement,\n { isVisible: boolean; lastChecked: number }\n>();\n\n// Visibility state interface for collector\ninterface VisibilityState {\n observer?: IntersectionObserver;\n timers: WeakMap<HTMLElement, number>;\n duration: number;\n elementConfigs?: WeakMap<\n HTMLElement,\n { multiple: boolean; blocked: boolean }\n >;\n}\n\n// Extended collector interface with visibility state\ninterface CollectorWithVisibility extends Collector.Instance {\n _visibilityState?: VisibilityState;\n}\n\n/**\n * Cached visibility check to reduce expensive isVisible() calls\n */\nfunction isElementVisible(element: HTMLElement): boolean {\n const now = Date.now();\n let cached = visibilityCache.get(element);\n\n // Cache visibility result for 500ms to balance accuracy with performance\n if (!cached || now - cached.lastChecked > 500) {\n cached = {\n isVisible: isVisible(element),\n lastChecked: now,\n };\n visibilityCache.set(element, cached);\n }\n\n return cached.isVisible;\n}\n\n/**\n * Element cleanup (unobserve + timer + cache cleanup)\n */\nexport function unobserveElement(\n collector: Collector.Instance,\n element: HTMLElement,\n): void {\n const state = (collector as CollectorWithVisibility)._visibilityState;\n if (!state) return;\n\n if (state.observer) {\n state.observer.unobserve(element);\n }\n\n // Clear timer\n const timer = state.timers.get(element);\n if (timer) {\n clearTimeout(timer);\n state.timers.delete(element);\n }\n\n // Clean up caches to prevent memory leaks\n elementSizeCache.delete(element);\n visibilityCache.delete(element);\n}\n\n/**\n * Creates an IntersectionObserver for the given collector\n */\nfunction createObserver(\n collector: Collector.Instance,\n): IntersectionObserver | undefined {\n if (!window.IntersectionObserver) return undefined;\n\n return tryCatch(\n () =>\n new window.IntersectionObserver(\n (entries) => {\n entries.forEach((entry) => {\n handleIntersection(collector, entry);\n });\n },\n {\n rootMargin: '0px',\n threshold: [0, 0.5],\n },\n ),\n () => undefined,\n )();\n}\n\n/**\n * Handles intersection changes for observed elements\n */\nfunction handleIntersection(\n collector: Collector.Instance,\n entry: IntersectionObserverEntry,\n): void {\n const target = entry.target as HTMLElement;\n const state = (collector as CollectorWithVisibility)._visibilityState;\n\n if (!state) return;\n\n const existingTimer = state.timers.get(target);\n\n if (entry.intersectionRatio > 0) {\n // Optimize: Cache element size calculations to avoid repeated DOM queries\n const now = Date.now();\n let cached = elementSizeCache.get(target);\n\n // Cache element size for 1 second to reduce DOM queries\n if (!cached || now - cached.lastChecked > 1000) {\n cached = {\n isLarge: target.offsetHeight > window.innerHeight,\n lastChecked: now,\n };\n elementSizeCache.set(target, cached);\n }\n\n const meetsThreshold = entry.intersectionRatio >= 0.5;\n\n // Optimized visibility strategy:\n // - Standard elements: intersection ratio ≥ 0.5 is sufficient (fast)\n // - Large elements: need additional overlay/occlusion check (slower but necessary)\n const shouldTrigger =\n meetsThreshold || (cached.isLarge && isElementVisible(target));\n\n if (shouldTrigger) {\n // Get element configuration\n const elementConfig = state.elementConfigs?.get(target);\n\n // For multiple triggers, only proceed if this is a re-entry (was not visible, now visible)\n if (elementConfig?.multiple && elementConfig.blocked) return; // Don't trigger again\n\n // Only create timer if none exists\n if (!existingTimer) {\n const timer = window.setTimeout(async () => {\n // Final visibility check before triggering (cached for performance)\n if (isElementVisible(target)) {\n await handleTrigger(\n collector,\n target as Element,\n Triggers.Visible,\n 'data-elb',\n );\n\n // Get fresh element config reference for state update\n const currentConfig = state.elementConfigs?.get(target);\n\n // For multiple triggers, mark as visible after firing\n if (currentConfig?.multiple) {\n currentConfig.blocked = true;\n } else {\n // Clean up and unobserve only if not a multiple trigger\n unobserveElement(collector, target);\n }\n }\n }, state.duration);\n\n state.timers.set(target, timer);\n }\n return;\n }\n }\n\n // Element isn't sufficiently in viewport - clear existing timer\n if (existingTimer) {\n clearTimeout(existingTimer);\n state.timers.delete(target);\n }\n\n // For multiple triggers, mark as not visible for re-entry detection\n const elementConfig = state.elementConfigs?.get(target);\n if (elementConfig?.multiple) {\n elementConfig.blocked = false;\n }\n}\n\n/**\n * Initializes visibility tracking for a collector\n */\nexport function initVisibilityTracking(\n collector: Collector.Instance,\n duration = 1000,\n): void {\n if ((collector as CollectorWithVisibility)._visibilityState) return; // Already initialized\n\n (collector as CollectorWithVisibility)._visibilityState = {\n observer: createObserver(collector),\n timers: new WeakMap(),\n duration,\n } as VisibilityState;\n}\n\n/**\n * Main trigger function for visible elements\n */\nexport function triggerVisible(\n collector: Collector.Instance,\n element: HTMLElement,\n config: { multiple?: boolean } = { multiple: false },\n): void {\n const state = (collector as CollectorWithVisibility)._visibilityState;\n if (state?.observer && element) {\n // Store element config for later use in intersection handling\n if (!state.elementConfigs) {\n state.elementConfigs = new WeakMap();\n }\n state.elementConfigs.set(element, {\n multiple: config.multiple ?? false,\n blocked: false,\n });\n state.observer.observe(element);\n }\n}\n\n/**\n * Destroys visibility tracking for a collector, cleaning up all resources\n */\nexport function destroyVisibilityTracking(collector: Collector.Instance): void {\n const state = (collector as CollectorWithVisibility)._visibilityState;\n if (!state) return;\n\n if (state.observer) {\n state.observer.disconnect();\n }\n\n delete (collector as CollectorWithVisibility)._visibilityState;\n}\n","import type { WalkerOS, Elb, Collector } from '@walkeros/core';\nimport {\n isString,\n isObject,\n isDefined,\n isSameType,\n isElementOrDocument,\n} from '@walkeros/core';\nimport type {\n BrowserPushData,\n BrowserPushOptions,\n BrowserPushContext,\n} from './types/elb';\n\n/**\n * Translation layer that converts flexible browser source inputs\n * to the strict core collector format\n */\nexport function translateToCoreCollector(\n collector: Collector.Instance,\n eventOrCommand: unknown,\n data?: BrowserPushData,\n options?: BrowserPushOptions,\n context?: BrowserPushContext,\n nested?: WalkerOS.Entities,\n custom?: WalkerOS.Properties,\n): Promise<Elb.PushResult> {\n // Handle walker commands - pass command and data only\n if (isString(eventOrCommand) && eventOrCommand.startsWith('walker ')) {\n if (eventOrCommand === 'walker config') {\n return (\n collector.push as (\n event: 'walker config',\n config: Collector.InitConfig,\n ) => Promise<Elb.PushResult>\n )('walker config', data as Collector.InitConfig);\n } else if (eventOrCommand === 'walker consent') {\n return (\n collector.push as (\n event: 'walker consent',\n consent: WalkerOS.Consent,\n ) => Promise<Elb.PushResult>\n )('walker consent', data as WalkerOS.Consent);\n } else if (eventOrCommand === 'walker user') {\n return (\n collector.push as (\n event: 'walker user',\n user: WalkerOS.User,\n ) => Promise<Elb.PushResult>\n )('walker user', data as WalkerOS.User);\n } else if (eventOrCommand === 'walker run') {\n return (\n collector.push as (\n event: 'walker run',\n options: Collector.InitConfig,\n ) => Promise<Elb.PushResult>\n )('walker run', data as Collector.InitConfig);\n } else if (eventOrCommand === 'walker hook') {\n // This is more complex due to the generic nature, but we can't handle it properly here\n // Fall through to the event handling\n }\n }\n\n // Handle event objects\n if (isObject(eventOrCommand)) {\n const event = eventOrCommand as WalkerOS.DeepPartialEvent;\n\n // If event doesn't have source info, add it\n if (!event.source) event.source = getBrowserSource();\n\n return collector.push(event);\n }\n\n // Handle string events with additional parameters\n if (isString(eventOrCommand) && eventOrCommand.length > 0) {\n const event: WalkerOS.DeepPartialEvent = {\n event: eventOrCommand,\n data: normalizeData(data || {}),\n context: normalizeContext(context || {}),\n custom,\n nested,\n source: getBrowserSource(),\n };\n\n // Add trigger if options is a string (likely a trigger)\n if (isString(options)) {\n (event as WalkerOS.DeepPartialEvent & { trigger?: string }).trigger =\n options;\n }\n\n return collector.push(event);\n }\n\n // For malformed commands, return a resolved promise without calling push\n if (!isDefined(eventOrCommand)) {\n return Promise.resolve({\n ok: true,\n successful: [],\n queued: [],\n failed: [],\n });\n }\n\n // Handle completely flexible format - build event object\n const event: WalkerOS.DeepPartialEvent = {\n event: String(eventOrCommand || ''),\n data: normalizeData(data || {}),\n context: normalizeContext(context || {}),\n custom,\n nested,\n source: getBrowserSource(),\n };\n\n // Add trigger if options is a string (likely a trigger)\n if (isString(options)) {\n (event as WalkerOS.DeepPartialEvent & { trigger?: string }).trigger =\n options;\n }\n\n return collector.push(event);\n}\n\n/**\n * Normalize data to WalkerOS.Properties format\n * Uses the same logic as legacy web collector\n */\nfunction normalizeData(data: BrowserPushData | undefined): WalkerOS.Properties {\n if (!data) return {};\n\n // Use the same logic as legacy: if it's Properties, use it; otherwise empty object\n return isSameType(data, {} as WalkerOS.Properties) ? data : {};\n}\n\n/**\n * Normalize context to WalkerOS.OrderedProperties format\n */\nfunction normalizeContext(\n context: BrowserPushContext | undefined,\n): WalkerOS.OrderedProperties {\n if (!context) return {};\n\n // Handle elements separately - they don't become context directly\n if (isElementOrDocument(context)) {\n return {};\n }\n\n // Only use objects with content as context\n if (isObject(context) && Object.keys(context).length) {\n return context as WalkerOS.OrderedProperties;\n }\n\n return {};\n}\n\n/**\n * Create source information for browser events\n */\nfunction getBrowserSource(): WalkerOS.Source {\n return {\n type: 'browser',\n id: window.location.href,\n previous_id: document.referrer,\n };\n}\n","import type { WalkerOS, Collector } from '@walkeros/core';\nimport type { ELBLayer, ELBLayerConfig } from './types';\nimport type {\n BrowserPushData,\n BrowserPushOptions,\n BrowserPushContext,\n} from './types/elb';\nimport { tryCatch } from '@walkeros/core';\nimport { translateToCoreCollector } from './translation';\n\n/**\n * Initialize ELB Layer for async command handling\n * This creates window.elbLayer array and processes any existing commands\n */\nexport function initElbLayer(\n collector: Collector.Instance,\n config: ELBLayerConfig = {},\n): void {\n const layerName = config.name || 'elbLayer';\n\n // Ensure elbLayer exists on window\n if (!window[layerName]) {\n window[layerName] = [];\n }\n\n const elbLayer = window[layerName] as ELBLayer;\n\n // Process any existing commands that were pushed before initialization\n if (Array.isArray(elbLayer) && elbLayer.length > 0) {\n processELBLayerCommands(collector, elbLayer);\n }\n}\n\n/**\n * Process commands from ELB Layer array\n * Commands are processed in order with walker commands getting priority\n */\nfunction processELBLayerCommands(\n collector: Collector.Instance,\n elbLayer: ELBLayer,\n): void {\n // Separate walker commands from regular events for priority processing\n const walkerCommands: unknown[] = [];\n const regularEvents: unknown[] = [];\n\n // Sort commands by priority (walker commands first)\n elbLayer.forEach((command) => {\n if (isWalkerCommand(command)) {\n walkerCommands.push(command);\n } else {\n regularEvents.push(command);\n }\n });\n\n // Process walker commands first\n walkerCommands.forEach((command) => {\n processCommand(collector, command);\n });\n\n // Then process regular events\n regularEvents.forEach((command) => {\n processCommand(collector, command);\n });\n\n // Clear the array after processing\n elbLayer.length = 0;\n}\n\n/**\n * Process a single command from ELB Layer\n */\nfunction processCommand(collector: Collector.Instance, command: unknown): void {\n // Skip malformed commands entirely\n if (\n command === null ||\n command === undefined ||\n command === '' ||\n typeof command === 'number' ||\n typeof command === 'string'\n ) {\n return;\n }\n\n tryCatch(\n () => {\n if (isArrayLike(command)) {\n // Handle array-like commands: [action, data, options, context]\n const args = Array.from(command as ArrayLike<unknown>);\n\n if (args.length >= 1) {\n const [action, data, options, context] = args;\n\n if (typeof action === 'string' && action.length > 0) {\n // Use translation layer to convert to core collector format\n translateToCoreCollector(\n collector,\n action,\n data as BrowserPushData,\n options as BrowserPushOptions,\n context as BrowserPushContext,\n );\n }\n }\n } else if (typeof command === 'object' && command !== null) {\n // Skip empty objects unless they have properties\n if (Object.keys(command).length === 0) {\n return;\n }\n // Handle object commands directly through translation\n translateToCoreCollector(collector, command);\n }\n },\n () => {\n // Silent error handling - failed commands are ignored\n },\n )();\n}\n\n/**\n * Check if a command is a walker command (starts with 'walker ')\n */\nfunction isWalkerCommand(command: unknown): boolean {\n if (isArrayLike(command)) {\n const args = Array.from(command as ArrayLike<unknown>);\n return typeof args[0] === 'string' && args[0].startsWith('walker ');\n }\n return false;\n}\n\n/**\n * Check if value is array-like (has length property)\n */\nfunction isArrayLike(value: unknown): boolean {\n return (\n value != null &&\n typeof value === 'object' &&\n 'length' in value &&\n typeof (value as unknown[]).length === 'number'\n );\n}\n","import type { WalkerOS, Collector } from '@walkeros/core';\nimport type { SessionCallback } from '@walkeros/web-core';\nimport { assign, useHooks } from '@walkeros/core';\nimport { onApply } from '@walkeros/collector';\nimport { sessionStart as sessionStartOrg } from '@walkeros/web-core';\n\nexport interface SessionStartOptions {\n config?: unknown;\n data?: Collector.SessionData;\n}\n\n// Enhanced session configuration interface\ninterface SessionConfigWithCallback {\n cb?: false | SessionCallback;\n [key: string]: unknown;\n}\n\nexport function createSessionStart(collector: Collector.Instance) {\n return function (\n options: SessionStartOptions = {},\n ): void | Collector.SessionData {\n const { config = {}, data, ...otherOptions } = options;\n return sessionStart(collector, {\n config: Object.assign({ pulse: true }, config),\n data: Object.assign({}, collector.session, {\n updated: Date.now(),\n }) as Collector.SessionData,\n ...otherOptions,\n });\n };\n}\n\nexport function sessionStart(\n collector: Collector.Instance,\n options: SessionStartOptions = {},\n): void | Collector.SessionData {\n const sessionConfig = options.config || {};\n const sessionData = assign(\n collector.config.sessionStatic || {},\n options.data || {},\n );\n\n // A wrapper for the callback\n const cb: SessionCallback = (\n session: Collector.SessionData,\n collector: Collector.Instance | undefined,\n defaultCb: SessionCallback,\n ) => {\n let result: void | undefined | Collector.SessionData;\n const configWithCb = sessionConfig as SessionConfigWithCallback;\n if (configWithCb.cb !== false && configWithCb.cb)\n // Run either the default callback or the provided one\n result = configWithCb.cb(\n session,\n collector,\n defaultCb as SessionCallback,\n );\n else if (configWithCb.cb !== false)\n // Run default callback\n result = (defaultCb as SessionCallback)(\n session,\n collector,\n defaultCb as SessionCallback,\n );\n\n // Assign the session (only if collector is available)\n if (collector) {\n collector.session = session;\n\n // Run on session events\n onApply(collector, 'session');\n }\n\n return result;\n };\n\n const session = useHooks(\n sessionStartOrg,\n 'SessionStart',\n collector.hooks,\n )({\n ...sessionConfig, // Session detection configuration\n cb, // Custom wrapper callback\n data: sessionData, // Static default session data\n collector,\n });\n\n return session;\n}\n","import type { Settings } from './types';\n\n/**\n * Get browser source configuration with defaults\n * @param settings - Partial settings to override defaults\n * @returns Complete settings object with all defaults applied\n */\nexport function getConfig(\n settings: Partial<Settings> = {},\n): Required<Settings> {\n // Ensure scope is valid, default to document if null/undefined\n const validScope = settings.scope || document;\n\n return {\n prefix: 'data-elb',\n pageview: true,\n session: true,\n elb: 'elb',\n name: 'walkerjs',\n elbLayer: 'elbLayer',\n ...settings,\n scope: validScope, // Override to ensure valid scope\n };\n}\n","import type { Mapping as WalkerOSMapping, Source } from '@walkeros/core';\nimport type {\n Walker,\n Elb,\n SessionConfig,\n SessionCallback,\n} from '@walkeros/web-core';\n\n// Export browser-specific elb types\nexport * from './elb';\n\n// Browser source configuration extending core source config\nexport interface BrowserSourceConfig extends Source.Config {\n type: 'browser';\n settings: Settings;\n}\n\nexport interface Config {\n settings: Settings;\n mapping?: Mapping;\n}\n\nexport interface Settings extends Record<string, unknown> {\n prefix?: string;\n scope?: Element | Document;\n pageview?: boolean;\n session?: boolean | SessionConfig;\n elb?: string;\n name?: string;\n elbLayer?: boolean | string | Elb.Layer;\n}\n\n// Re-export session types from web-core to avoid duplication\nexport type { SessionConfig, SessionCallback };\n\n// ELB Layer types for async command handling\nexport type ELBLayer = Elb.Layer;\nexport interface ELBLayerConfig {\n name?: string; // Property name for window.elbLayer (default: 'elbLayer')\n}\n\ndeclare global {\n interface Window {\n [key: string]: Elb.Layer | unknown;\n }\n}\n\n// Source-to-collector mapping rules\nexport interface Mapping {\n // Transform source events to collector format\n}\n\nexport type Rule = WalkerOSMapping.Rule<Mapping>;\nexport type Rules = WalkerOSMapping.Rules<Rule>;\n\n// Re-export Walker types for backward compatibility\nexport type Trigger = Walker.Trigger;\nexport type WalkerEvent = Walker.Event;\nexport type Events = Walker.Events;\nexport type Filter = Walker.Filter;\nexport interface TriggerAction {\n trigger: string;\n triggerParams?: string;\n action: string;\n actionParams?: string;\n}\nexport type TriggerActions = Walker.TriggerActions;\nexport type TriggersActionGroups = Walker.TriggersActionGroups;\nexport type ScrollElements = Walker.ScrollElements;\nexport type Attributes = Walker.Attributes;\nexport type KeyVal = Walker.KeyVal;\n\n// Scope type for DOM operations\nexport type Scope = Document | Element;\n","import type { WalkerOS } from '@walkeros/core';\nimport { isString, isDefined } from '@walkeros/core';\n\nexport interface TaggerConfig {\n prefix?: string;\n}\n\nexport interface TaggerInstance {\n entity: (name: string) => TaggerInstance;\n data: ((key: string, value: WalkerOS.Property) => TaggerInstance) &\n ((data: WalkerOS.Properties) => TaggerInstance);\n action: ((trigger: string, action?: string) => TaggerInstance) &\n ((actions: Record<string, string>) => TaggerInstance);\n context: ((key: string, value: WalkerOS.Property) => TaggerInstance) &\n ((context: WalkerOS.Properties) => TaggerInstance);\n globals: ((key: string, value: WalkerOS.Property) => TaggerInstance) &\n ((globals: WalkerOS.Properties) => TaggerInstance);\n link: ((id: string, type: string) => TaggerInstance) &\n ((links: Record<string, string>) => TaggerInstance);\n get: () => Record<string, string>;\n}\n\n/**\n * Creates a new tagger instance for generating walkerOS data attributes.\n *\n * @param config The configuration for the tagger.\n * @returns A new tagger instance.\n */\nexport function createTagger(\n config: TaggerConfig = {},\n): (entity?: string) => TaggerInstance {\n const prefix = config.prefix || 'data-elb';\n\n return function (entity?: string): TaggerInstance {\n // Internal state\n let currentEntity: string | undefined = entity;\n const dataProperties: Record<string, WalkerOS.Properties> = {};\n const actionProperties: Record<string, string> = {};\n const contextProperties: WalkerOS.Properties = {};\n const globalProperties: WalkerOS.Properties = {};\n const linkProperties: Record<string, string> = {};\n\n // Helper function to escape special characters\n function escapeValue(value: WalkerOS.Property | undefined): string {\n if (!isDefined(value) || value === null) return 'undefined';\n\n let str = String(value);\n\n // Escape backslashes first, then other characters\n str = str.replace(/\\\\/g, '\\\\\\\\');\n str = str.replace(/;/g, '\\\\;');\n str = str.replace(/:/g, '\\\\:');\n str = str.replace(/'/g, \"\\\\'\");\n\n return str;\n }\n\n // Helper function to serialize key-value pairs\n function serializeKeyValue(obj: WalkerOS.Properties): string {\n return Object.entries(obj)\n .map(([key, value]) => `${key}:${escapeValue(value)}`)\n .join(';');\n }\n\n const instance: TaggerInstance = {\n entity(name: string): TaggerInstance {\n currentEntity = name;\n return instance;\n },\n\n data(\n keyOrData: string | WalkerOS.Properties,\n value?: WalkerOS.Property,\n ): TaggerInstance {\n const entityKey = currentEntity ?? '';\n\n if (!dataProperties[entityKey]) {\n dataProperties[entityKey] = {};\n }\n\n if (isString(keyOrData)) {\n dataProperties[entityKey][keyOrData] = value;\n } else {\n Object.assign(dataProperties[entityKey], keyOrData);\n }\n\n return instance;\n },\n\n action(\n triggerOrActions: string | Record<string, string>,\n actionValue?: string,\n ): TaggerInstance {\n if (isString(triggerOrActions)) {\n if (isDefined(actionValue)) {\n // Two parameters: trigger and action\n actionProperties[triggerOrActions] = actionValue;\n } else {\n // Single parameter: could be \"trigger:action\" or just \"trigger\"\n if (triggerOrActions.includes(':')) {\n const [trigger, action] = triggerOrActions.split(':', 2);\n actionProperties[trigger] = action;\n } else {\n actionProperties[triggerOrActions] = triggerOrActions;\n }\n }\n } else {\n Object.assign(actionProperties, triggerOrActions);\n }\n\n return instance;\n },\n\n context(\n keyOrContext: string | WalkerOS.Properties,\n value?: WalkerOS.Property,\n ): TaggerInstance {\n if (isString(keyOrContext)) {\n contextProperties[keyOrContext] = value;\n } else {\n Object.assign(contextProperties, keyOrContext);\n }\n\n return instance;\n },\n\n globals(\n keyOrGlobals: string | WalkerOS.Properties,\n value?: WalkerOS.Property,\n ): TaggerInstance {\n if (isString(keyOrGlobals)) {\n globalProperties[keyOrGlobals] = value;\n } else {\n Object.assign(globalProperties, keyOrGlobals);\n }\n\n return instance;\n },\n\n link(\n idOrLinks: string | Record<string, string>,\n type?: string,\n ): TaggerInstance {\n if (isString(idOrLinks)) {\n linkProperties[idOrLinks] = type!;\n } else {\n Object.assign(linkProperties, idOrLinks);\n }\n\n return instance;\n },\n\n get(): Record<string, string> {\n const attributes: Record<string, string> = {};\n\n // Add entity attribute if set\n if (currentEntity) {\n attributes[prefix] = currentEntity;\n }\n\n // Add data attributes\n Object.entries(dataProperties).forEach(([entityKey, props]) => {\n if (Object.keys(props).length > 0) {\n const attrName = entityKey\n ? `${prefix}-${entityKey}`\n : `${prefix}-`;\n attributes[attrName] = serializeKeyValue(props);\n }\n });\n\n // Add action attributes\n if (Object.keys(actionProperties).length > 0) {\n attributes[`${prefix}action`] = serializeKeyValue(actionProperties);\n }\n\n // Add context attributes\n if (Object.keys(contextProperties).length > 0) {\n attributes[`${prefix}context`] = serializeKeyValue(contextProperties);\n }\n\n // Add global attributes\n if (Object.keys(globalProperties).length > 0) {\n attributes[`${prefix}globals`] = serializeKeyValue(globalProperties);\n }\n\n // Add link attributes\n if (Object.keys(linkProperties).length > 0) {\n attributes[`${prefix}link`] = serializeKeyValue(linkProperties);\n }\n\n return attributes;\n },\n };\n\n return instance;\n };\n}\n","import type { Collector, WalkerOS, Source } from '@walkeros/core';\nimport type { BrowserSourceConfig, Scope } from './types';\nimport type {\n BrowserPushData,\n BrowserPushOptions,\n BrowserPushContext,\n BrowserPush,\n} from './types/elb';\nimport { isString } from '@walkeros/core';\nimport { load, ready, initGlobalTrigger } from './trigger';\nimport { destroyVisibilityTracking } from './triggerVisible';\nimport { initElbLayer } from './elbLayer';\nimport { translateToCoreCollector } from './translation';\nimport { sessionStart } from './session';\nimport { getConfig } from './config';\n\nexport * as SourceBrowser from './types';\n\n// @TODO export examples\n\n// Export walker utility functions\nexport { getAllEvents, getEvents, getGlobals } from './walker';\n\n// Export tagger functionality\nexport { createTagger } from './tagger';\nexport type { TaggerConfig, TaggerInstance } from './tagger';\n\n// Browser source init function for createSource\nexport const sourceBrowser: Source.Init<\n BrowserSourceConfig,\n BrowserPush\n> = async (collector: Collector.Instance, config: BrowserSourceConfig) => {\n // Get full configuration with defaults\n const settings = getConfig(config.settings);\n const fullConfig: BrowserSourceConfig = {\n ...config,\n settings,\n };\n\n const scope = settings.scope as Scope;\n\n // Create the source instance\n const source: Source.Instance<BrowserSourceConfig> = {\n // id: config.id!, // ID is now generated by createSource\n type: 'browser',\n config: fullConfig,\n collector,\n destroy() {\n destroyVisibilityTracking(collector);\n // Additional cleanup could be added here\n },\n };\n\n // Initialize ELB Layer for async command handling\n if (settings.elbLayer !== false) {\n initElbLayer(collector, {\n name: isString(settings.elbLayer) ? settings.elbLayer : 'elbLayer',\n });\n }\n\n // Initialize global event listeners (click, submit)\n initGlobalTrigger(collector, scope);\n\n // Initialize session if enabled\n if (settings.session) {\n const sessionConfig =\n typeof settings.session === 'boolean' ? {} : settings.session;\n sessionStart(collector, { config: sessionConfig });\n }\n\n // Setup auto-initialization via ready state\n await ready(load, collector, settings);\n\n // Setup cleanup for visibility tracking on collector destroy\n const originalDestroy = (\n collector as Collector.Instance & { _destroy?: () => void }\n )._destroy;\n (collector as Collector.Instance & { _destroy?: () => void })._destroy =\n () => {\n source.destroy?.();\n if (originalDestroy) originalDestroy();\n };\n\n // Create browser-specific elb function with flexible arguments\n const elb: BrowserPush = ((...args: unknown[]) => {\n // Use the translation layer to convert flexible browser inputs to collector format\n const [event, data, options, context, nested, custom] = args;\n return translateToCoreCollector(\n collector,\n event,\n data as BrowserPushData,\n options as BrowserPushOptions,\n context as BrowserPushContext,\n nested as WalkerOS.Entities,\n custom as WalkerOS.Properties,\n );\n }) as BrowserPush;\n\n return { source, elb };\n};\n\nexport default sourceBrowser;\n"],"mappings":"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","names":["Const","getAttribute","filter","str","elem","elementConfig","_a","event","Const","elem","getAttribute","scrollElements","collector","onApply","session","collector","onApply"]}
|
package/package.json
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@walkeros/web-source-browser",
|
|
3
|
+
"description": "Browser DOM source for walkerOS",
|
|
4
|
+
"version": "0.0.7",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"module": "./dist/index.mjs",
|
|
8
|
+
"types": "./dist/index.d.ts",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"types": "./dist/index.d.ts",
|
|
12
|
+
"import": "./dist/index.mjs",
|
|
13
|
+
"require": "./dist/index.js"
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
"files": [
|
|
17
|
+
"dist/**"
|
|
18
|
+
],
|
|
19
|
+
"scripts": {
|
|
20
|
+
"build": "tsup --silent",
|
|
21
|
+
"clean": "rm -rf .turbo && rm -rf node_modules && rm -rf dist",
|
|
22
|
+
"dev": "jest --watchAll --colors",
|
|
23
|
+
"lint": "tsc && eslint \"**/*.ts*\" --rule '@typescript-eslint/no-explicit-any: off'",
|
|
24
|
+
"test": "jest",
|
|
25
|
+
"update": "npx npm-check-updates -u && npm update"
|
|
26
|
+
},
|
|
27
|
+
"dependencies": {
|
|
28
|
+
"@walkeros/collector": "0.0.7",
|
|
29
|
+
"@walkeros/web-core": "0.0.7"
|
|
30
|
+
},
|
|
31
|
+
"repository": {
|
|
32
|
+
"url": "git+https://github.com/elbwalker/walkerOS.git",
|
|
33
|
+
"directory": "packages/web/sources/browser"
|
|
34
|
+
},
|
|
35
|
+
"author": "elbwalker <hello@elbwalker.com>",
|
|
36
|
+
"homepage": "https://github.com/elbwalker/walkerOS#readme",
|
|
37
|
+
"bugs": {
|
|
38
|
+
"url": "https://github.com/elbwalker/walkerOS/issues"
|
|
39
|
+
},
|
|
40
|
+
"keywords": [
|
|
41
|
+
"walker",
|
|
42
|
+
"walkerOS",
|
|
43
|
+
"source",
|
|
44
|
+
"web",
|
|
45
|
+
"browser",
|
|
46
|
+
"dom"
|
|
47
|
+
],
|
|
48
|
+
"funding": [
|
|
49
|
+
{
|
|
50
|
+
"type": "GitHub Sponsors",
|
|
51
|
+
"url": "https://github.com/sponsors/elbwalker"
|
|
52
|
+
}
|
|
53
|
+
]
|
|
54
|
+
}
|