@walkeros/web-source-browser 4.1.1 → 4.1.3-next-1779963694449
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +22 -0
- package/dist/dev.js +1 -1
- package/dist/dev.js.map +1 -1
- package/dist/dev.mjs +1 -1
- package/dist/dev.mjs.map +1 -1
- package/dist/index.browser.js +1 -1
- package/dist/index.d.mts +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.es5.js +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/dist/walkerOS.json +3 -3
- package/package.json +4 -4
package/dist/index.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var e=Object.defineProperty,t=(t,n)=>{for(var r in n)e(t,r,{get:n[r],enumerable:!0})};import{isString as n}from"@walkeros/core";import{throttle as r,tryCatch as o}from"@walkeros/core";import{Const as i}from"@walkeros/collector";import{elb as a,getAttribute as s}from"@walkeros/web-core";import{assign as c,castValue as l,isArray as u,trim as d}from"@walkeros/core";import{Const as p}from"@walkeros/collector";import{getAttribute as m}from"@walkeros/web-core";function f(e,t,n=!0){return e+(t=null!=t?(n?"-":"")+t:"")}function g(e,t,n,r=!0){return A(m(t,f(e,n,r))||"").reduce((e,n)=>{let[r,o]=O(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),u(e[r])||(e[r]=[]),e[r].push(l(o))):e[r]=l(o),e},{})}function b(e,t=p.Commands.Prefix){var n;const r=e;if(!r)return[];let o=[];const i=p.Commands.Action,a=`[${f(t,i,!1)}]`,s=e=>{Object.keys(g(t,e,i,!1)).forEach(n=>{o=o.concat(h(e,n,t))})};return r!==(r.ownerDocument||r)&&(null==(n=r.matches)?void 0:n.call(r,a))&&s(r),j(r,a,s),o}function h(e,t,n=p.Commands.Prefix){const r=[],{actions:o,nearestOnly:i}=function(e,t,n){let r=t;for(;r;){const t=m(r,f(e,p.Commands.Actions,!1));if(t){const e=v(t);if(e[n])return{actions:e[n],nearestOnly:!1}}const o=m(r,f(e,p.Commands.Action,!1));if(o){const e=v(o);if(e[n]||"click"!==n)return{actions:e[n]||[],nearestOnly:!0}}r=x(e,r)}return{actions:[],nearestOnly:!1}}(n,e,t);return o.length?(o.forEach(o=>{const a=A(o.actionParams||"",",").reduce((e,t)=>(e[d(t)]=!0,e),{}),s=y(n,e,a,i);if(!s.length){const t="page",r=`[${f(n,t)}]`,[o,i]=E(e,r,n,t);s.push({entity:t,data:o,nested:[],context:i})}s.forEach(e=>{var n;r.push({entity:e.entity,action:o.action,data:e.data,trigger:t,context:e.context,nested:null!=(n=e.nested)?n:[]})})}),r):r}function w(e=p.Commands.Prefix,t){if(!t)return{};const n=f(e,p.Commands.Globals,!1);let r={};return C(t,`[${n}]`,t=>{r=c(r,g(e,t,p.Commands.Globals,!1))}),r}function v(e){const t={};return A(e).forEach(e=>{const[n,r]=O(e),[o,i]=L(n);if(!o)return;let[a,s]=L(r||"");a=a||o,t[o]||(t[o]=[]),t[o].push({trigger:o,triggerParams:i,action:a,actionParams:s})}),t}function y(e,t,n,r=!1){const o=[];let i=t;for(n=0!==Object.keys(n||{}).length?n:void 0;i;){const a=k(e,i,t,n);if(a&&(o.push(a),r))break;i=x(e,i)}return o}function k(e,t,n,r){const o=m(t,f(e));if(!o||r&&!r[o])return null;const i=[t],a=`[${f(e,o)}],[${f(e,"")}]`,s=f(e,p.Commands.Link,!1);let l={};const u=[],[d,b]=E(n||t,a,e,o);j(t,`[${s}]`,n=>{const[r,o]=O(m(n,s));"parent"===o&&j(t.ownerDocument.body,`[${s}="${r}:child"]`,t=>{i.push(t);const n=k(e,t);n&&u.push(n)})});const h=[];i.forEach(e=>{e.matches(a)&&h.push(e),j(e,a,e=>h.push(e))});let w={};return h.forEach(t=>{w=c(w,g(e,t,"")),l=c(l,g(e,t,o))}),l=c(c(w,l),d),i.forEach(t=>{j(t,`[${f(e)}]`,t=>{const n=k(e,t);n&&u.push(n)})}),{entity:o,data:l,context:b,nested:u}}function x(e,t){const n=f(e,p.Commands.Link,!1);if(t.matches(`[${n}]`)){const[e,r]=O(m(t,n));if("child"===r){const r=t.ownerDocument;let o=null;return C(r,`[${n}="${e}:parent"]`,e=>{o||(o=e)}),o}}const r=t.ownerDocument.defaultView;return!t.parentElement&&t.getRootNode&&t.getRootNode()instanceof r.ShadowRoot?t.getRootNode().host:t.parentElement}function E(e,t,n,r){let o={};const i={};let a=e;const s=`[${f(n,p.Commands.Context,!1)}]`;let l=0;for(;a;)a.matches(t)&&(o=c(g(n,a,""),o),o=c(g(n,a,r),o)),a.matches(s)&&(Object.entries(g(n,a,p.Commands.Context,!1)).forEach(([e,t])=>{t&&!i[e]&&(i[e]=[t,l])}),++l),a=x(n,a);return[o,i]}function C(e,t,n){e.querySelectorAll(t).forEach(n)}function j(e,t,n){e.querySelectorAll(t).forEach(n);e instanceof(e.ownerDocument||e).defaultView.Element&&e.shadowRoot&&j(e.shadowRoot,t,n),e.querySelectorAll("*").forEach(e=>{e.shadowRoot&&j(e.shadowRoot,t,n)})}function A(e,t=";"){if(!e)return[];const n=new RegExp(`(?:[^${t}']+|'[^']*')+`,"ig");return e.match(n)||[]}function O(e){const[t,n]=e.split(/:(.+)/,2);return[d(t),d(n)]}function L(e){const[t,n]=e.split("(",2);return[t,n?n.slice(0,-1):""]}import{tryCatch as S}from"@walkeros/core";import{isVisible as $}from"@walkeros/web-core";var D=new WeakMap,T=new WeakMap,P=new WeakMap;function W(e){const t=Date.now();let n=T.get(e);if(!n||t-n.lastChecked>500){const r=e.ownerDocument.defaultView,o=e.ownerDocument;n={isVisible:$(e,r,o),lastChecked:t},T.set(e,n)}return n.isVisible}function R(e){const t=(e.ownerDocument||e).defaultView;if(t&&t.IntersectionObserver)return S(()=>new t.IntersectionObserver(t=>{t.forEach(t=>{!function(e,t){var n,r;const o=t.target,i=P.get(e);if(!i)return;const a=i.timers.get(o);if(t.intersectionRatio>0){const r=Date.now();let s=D.get(o);if(!s||r-s.lastChecked>1e3){const e=o.ownerDocument.defaultView;s={isLarge:o.offsetHeight>e.innerHeight,lastChecked:r},D.set(o,s)}if(t.intersectionRatio>=.5||s.isLarge&&W(o)){const t=null==(n=i.elementConfigs)?void 0:n.get(o);if((null==t?void 0:t.multiple)&&t.blocked)return;if(!a){const t=o.ownerDocument.defaultView.setTimeout(async()=>{var t,n;if(W(o)){const r=null==(t=i.elementConfigs)?void 0:t.get(o);(null==r?void 0:r.context)&&await ae(r.context,o,r.trigger);const a=null==(n=i.elementConfigs)?void 0:n.get(o);(null==a?void 0:a.multiple)?a.blocked=!0:function(e,t){const n=P.get(e);if(!n)return;n.observer&&n.observer.unobserve(t);const r=n.timers.get(t);r&&(clearTimeout(r),n.timers.delete(t)),D.delete(t),T.delete(t)}(e,o)}},i.duration);i.timers.set(o,t)}return}}a&&(clearTimeout(a),i.timers.delete(o));const s=null==(r=i.elementConfigs)?void 0:r.get(o);(null==s?void 0:s.multiple)&&(s.blocked=!1)}(e,t)})},{rootMargin:"0px",threshold:[0,.5]}),()=>{})()}function V(e,t,n={multiple:!1}){var r;const o=e.settings.scope;if(!o)return;const i=P.get(o);(null==i?void 0:i.observer)&&t&&(i.elementConfigs||(i.elementConfigs=new WeakMap),i.elementConfigs.set(t,{multiple:null!=(r=n.multiple)&&r,blocked:!1,context:e,trigger:n.multiple?"visible":"impression"}),i.observer.observe(t))}function I(e){if(!e)return;const t=P.get(e);t&&(t.observer&&t.observer.disconnect(),P.delete(e))}import{isString as N,isObject as M,isElementOrDocument as U}from"@walkeros/core";function q(e,t,n,r,o,i,a){const{elb:s,settings:c}=e;if(N(t)&&t.startsWith("walker "))return s(t,n);if(M(t)){const e=t;if(!e.source&&c.scope){const t=c.scope.ownerDocument||c.scope,n=t.defaultView;e.source=z(n,t)}return!e.globals&&c.scope&&(e.globals=w(c.prefix,c.scope)),s(e)}const[l]=String(M(t)?t.name:t).split(" ");let u,d=M(n)?n:{},p={},m=!1;if(U(n)&&(u=n,m=!0),U(o)?u=o:M(o)&&Object.keys(o).length&&(p=o),u){const e=y(c.prefix||"data-elb",u).find(e=>e.entity===l);e&&(m&&(d=e.data),e.context&&(p=e.context))}const f=c.scope?c.scope.ownerDocument||c.scope:void 0,g=null==f?void 0:f.defaultView;"page"===l&&g&&(d.id=d.id||g.location.pathname);const b=w(c.prefix,c.scope);return s({name:String(t||""),data:d,context:p,globals:b,nested:i,custom:a,trigger:N(r)?r:"",source:g&&f?z(g,f):void 0})}function z(e,t){return{type:"browser",platform:"web",url:e.location.href,referrer:t.referrer}}var H,B,G=[],Y=[],K=[];function X(){return B||(B=new AbortController),B}var _="click",F="hover",J="load",Q="pulse",Z="scroll",ee="submit",te="impression",ne="visible",re="wait";function oe(e,t){if(!t.scope)return;!function(e,t){const n=t.scope;if(!n)return;B&&B.abort();B=new AbortController;const{signal:r}=B;n.addEventListener("click",o(function(t){le.call(this,e,t)}),{signal:r}),n.addEventListener("submit",o(function(t){ue.call(this,e,t)}),{signal:r})}(e,t)}function ie(e,t){if(!t.scope)return;!function(e,t){const n=t.scope;G=[];const o=n;if(!o)return;I(o),function(e,t=1e3){P.has(e)||P.set(e,{observer:R(e),timers:new WeakMap,duration:t})}(o,1e3);const a=f(t.prefix,i.Commands.Action,!1),s=o.ownerDocument||o;o!==s&&se(e,o,a,t);j(o,`[${a}]`,n=>{se(e,n,a,t)}),G.length&&function(e,t){const n=t.ownerDocument||t,o=n.defaultView,i=(e,t)=>e.filter(([e,n])=>{const r=o.scrollY+o.innerHeight,i=e.offsetTop;if(r<i)return!0;const a=e.clientHeight;return!(100*(1-(i+a-r)/(a||1))>=n)||(ae(t,e,Z),!1)});H||(H=r(function(){G=i.call(t,G,e)}),t.addEventListener("scroll",H,{signal:X().signal}))}(e,o)}(e,t)}async function ae(e,t,n){const r=h(t,n,e.settings.prefix);return Promise.all(r.map(t=>q(e,{name:`${t.entity} ${t.action}`,...t,trigger:n})))}function se(e,t,n,r){const i=s(t,n);i&&Object.values(v(i)).forEach(n=>n.forEach(n=>{switch(n.trigger){case F:!function(e,t){t.addEventListener("mouseenter",o(function(t){const n=ce(t);n&&ae(e,n,F)}),{signal:X().signal})}(e,t);break;case J:!function(e,t){ae(e,t,J)}(e,t);break;case Q:!function(e,t,n=""){const r=t.ownerDocument,o=setInterval(()=>{r.hidden||ae(e,t,Q)},parseInt(n||"")||15e3);Y.push(o)}(e,t,n.triggerParams);break;case Z:!function(e,t=""){const n=parseInt(t||"")||50;if(n<0||n>100)return;G.push([e,n])}(t,n.triggerParams);break;case te:V(e,t);break;case ne:V(e,t,{multiple:!0});break;case re:!function(e,t,n=""){const r=setTimeout(()=>ae(e,t,re),parseInt(n||"")||15e3);K.push(r)}(e,t,n.triggerParams)}}))}function ce(e){var t;const n=null==(t=e.composedPath)?void 0:t.call(e),r=(null==n?void 0:n.length)?n[0]:e.target;if(r&&"object"==typeof r&&"tagName"in r)return r}function le(e,t){const n=ce(t);n&&ae(e,n,_)}function ue(e,t){const n=ce(t);n&&ae(e,n,ee)}import{tryCatch as de,isString as pe,isObject as me}from"@walkeros/core";function fe(e,t={}){var n;const r=t.name||"elbLayer",o=t.window,i=t.logger;if(!o)return;const a=o;a[r]||(a[r]=[]);const s=a[r],c=o.document;null==i||i.debug("initElbLayer enter",{layerName:r,queuedItems:s.length}),s.push=function(...n){if(he(n[0])){const r=[...Array.from(n[0])],o=Array.prototype.push.apply(this,[r]);return be(e,t.prefix,r,c,i),o}const r=Array.prototype.push.apply(this,n);return n.forEach(n=>{be(e,t.prefix,n,c,i)}),r},Array.isArray(s)&&s.length>0&&(null==i||i.debug("initElbLayer drain walker commands",{count:s.length}),function(e,t,n,r,o){const i="walker ",a=[...n],s=new Set;a.forEach((n,a)=>{const c=ge(n);if(!c)return;const l=c[0];!me(l)&&pe(l)&&l.startsWith(i)&&(s.add(a),be(e,t,c,r,o))});const c=[...s].sort((e,t)=>t-e);for(const e of c)n.splice(e,1);null==o||o.debug("drainWalkerCommands done",{consumed:s.size,remaining:n.length})}(e,null!=(n=t.prefix)?n:"data-elb",s,c,i))}function ge(e){const t=he(e)?[...Array.from(e)]:null!=(n=e)&&"object"==typeof n&&"length"in n&&"number"==typeof n.length?Array.from(e):[e];var n;if(!Array.isArray(t)||0===t.length)return null;if(1===t.length&&!t[0])return null;const r=t[0];return me(r)&&0===Object.keys(r).length||!me(r)&&pe(r)&&""===r.trim()?null:t}function be(e,t="data-elb",n,r,o){de(()=>{if(Array.isArray(n)){const[i,...a]=n;if(!i||pe(i)&&""===i.trim())return void(null==o||o.debug("pushCommand skipped (empty/invalid action)",{item:n}));if(pe(i)&&i.startsWith("walker "))return null==o||o.debug("pushCommand walker command",{action:i,data:a[0]}),void e(i,a[0]);null==o||o.debug("pushCommand event (translated)",{action:i,rest:a}),q({elb:e,settings:{prefix:t,scope:r,pageview:!1,elb:"",elbLayer:!1}},i,...a)}else if(n&&"object"==typeof n){if(0===Object.keys(n).length)return void(null==o||o.debug("pushCommand skipped (empty object)"));null==o||o.debug("pushCommand object event",{item:n}),e(n)}},e=>{null==o||o.warn("pushCommand failed",{error:e,item:n})})()}function he(e){return null!=e&&"object"==typeof e&&"[object Arguments]"===Object.prototype.toString.call(e)}var we={},ve={};t(ve,{createTrigger:()=>We,env:()=>ye,step:()=>je,trigger:()=>Re});var ye={};t(ye,{push:()=>Ce});var ke=()=>{},xe=()=>()=>Promise.resolve({ok:!0}),Ee={error:ke,warn:ke,info:ke,debug:ke,throw:e=>{throw"string"==typeof e?new Error(e):e},json:ke,scope:()=>Ee},Ce={get push(){return xe()},get command(){return xe()},get elb(){return xe()},get window(){return{addEventListener:ke,removeEventListener:ke,location:{href:"https://example.com/page",pathname:"/page",search:"?query=test",hash:"#section",host:"example.com",hostname:"example.com",origin:"https://example.com",protocol:"https:"},document:{},navigator:{language:"en-US",userAgent:"Mozilla/5.0 (Test)"},screen:{width:1920,height:1080},innerWidth:1920,innerHeight:1080,pageXOffset:0,pageYOffset:0,scrollX:0,scrollY:0}},get document(){return{addEventListener:ke,removeEventListener:ke,querySelector:ke,querySelectorAll:()=>[],getElementById:ke,getElementsByClassName:()=>[],getElementsByTagName:()=>[],createElement:()=>({setAttribute:ke,getAttribute:ke,addEventListener:ke,removeEventListener:ke}),body:{appendChild:ke,removeChild:ke},documentElement:{scrollTop:0,scrollLeft:0},readyState:"complete",title:"Test Page",referrer:"",cookie:""}},logger:Ee},je={};t(je,{clickEvent:()=>Oe,contextAndGlobals:()=>Te,dataAttributeTypes:()=>De,impressionEvent:()=>Se,nestedEntities:()=>$e,pageView:()=>Ae,submitEvent:()=>Le});var Ae={title:"Page view",description:"A page load trigger captures the current URL, title, and referrer as a walker page view event.",trigger:{type:"load",options:{url:"https://example.com/docs",title:"Documentation",referrer:"https://example.com/"}},in:"",out:[["elb",{name:"page view",data:{domain:"example.com",title:"Documentation",referrer:"https://example.com/",id:"/docs"},context:{},globals:{},nested:void 0,custom:void 0,trigger:"load",source:{type:"browser",platform:"web",url:"https://example.com/docs",referrer:"https://example.com/"}}]]},Oe={title:"Click event",description:"A button click with walker data attributes is captured as an entity action event with the mapped label data.",trigger:{type:"click",options:"button"},in:'<button data-elb="cta" data-elb-cta="label:Sign Up" data-elbaction="click:click">Sign Up</button>',out:[["elb",{name:"cta click",entity:"cta",action:"click",data:{label:"Sign Up"},context:{},globals:{},nested:[],source:{type:"browser",platform:"web",url:"https://example.com/",referrer:""},trigger:"click"}]]},Le={title:"Submit event",description:"A form submit with walker data attributes produces a signup complete event carrying the selected plan.",trigger:{type:"submit",options:"form"},in:'<form data-elb="signup" data-elb-signup="plan:premium" data-elbaction="submit:complete"></form>',out:[["elb",{name:"signup complete",entity:"signup",action:"complete",data:{plan:"premium"},context:{},globals:{},nested:[],source:{type:"browser",platform:"web",url:"https://example.com/",referrer:""},trigger:"submit"}]]},Se={title:"Impression event",description:"An intersection observer impression on a div with walker attributes emits a banner view event.",trigger:{type:"impression",options:"div"},in:'<div data-elb="banner" data-elb-banner="type:promotional;position:sidebar" data-elbaction="impression:view"></div>',out:[["elb",{name:"banner view",entity:"banner",action:"view",data:{type:"promotional",position:"sidebar"},context:{},globals:{},nested:[],source:{type:"browser",platform:"web",url:"https://example.com/",referrer:""},trigger:"impression"}]]},$e={title:"Nested entities",description:"A page load produces a page view plus a product view whose nested size entity is captured on the product event.",trigger:{type:"load"},in:'<div data-elb="product" data-elb-product="id:SKU-42;name:Sneakers" data-elbaction="load:view"><div data-elb="size" data-elb-size="selected:large;inStock:true"></div></div>',out:[["elb",{name:"page view",data:{domain:"example.com",title:"",referrer:"",id:"/"},context:{},globals:{},nested:void 0,custom:void 0,trigger:"load",source:{type:"browser",platform:"web",url:"https://example.com/",referrer:""}}],["elb",{name:"product view",entity:"product",action:"view",data:{id:"SKU-42",name:"Sneakers"},context:{},globals:{},nested:[{entity:"size",data:{selected:"large",inStock:!0},context:{},nested:[]}],source:{type:"browser",platform:"web",url:"https://example.com/",referrer:""},trigger:"load"}]]},De={title:"Data attribute types",description:"Walker data attributes parse scalar, boolean, and array values into typed fields on the emitted event.",trigger:{type:"click",options:"div"},in:'<div data-elb="product" data-elb-product="price:99.99;available:true;colors[]:red;colors[]:blue" data-elbaction="click:select"></div>',out:[["elb",{name:"product select",entity:"product",action:"select",data:{price:99.99,available:!0,colors:["red","blue"]},context:{},globals:{},nested:[],source:{type:"browser",platform:"web",url:"https://example.com/",referrer:""},trigger:"click"}]]},Te={title:"Context and globals",description:"Walker context and globals attributes attach ambient metadata to events emitted by the browser source.",trigger:{type:"click",options:'[data-elb="cta"]'},in:'<div data-elbcontext="test:engagement_flow" data-elbglobals="language:en;plan:premium"><div data-elb="cta" data-elb-cta="label:Try Now" data-elbaction="click:signup">Try Now</div></div>',out:[["elb",{name:"cta signup",entity:"cta",action:"signup",data:{label:"Try Now"},context:{test:["engagement_flow",0]},globals:{language:"en",plan:"premium"},nested:[],source:{type:"browser",platform:"web",url:"https://example.com/",referrer:""},trigger:"click"}]]};import{startFlow as Pe}from"@walkeros/collector";var We=async(e,t)=>{const n=(null==t?void 0:t.sourceId)||"browser";let r;const o=document,i=window;return{get flow(){return r},trigger:(t,a)=>async s=>{var c;if("load"===t||!t){const e="object"==typeof a&&null!==a?a:{};if(e.url){const t=new URL(e.url);i.history.replaceState({},"",t.pathname)}e.title&&(o.title=e.title),e.referrer&&Object.defineProperty(o,"referrer",{value:e.referrer,configurable:!0})}if(s&&(o.body.innerHTML=s),!r){const t=await Pe({...e,run:null==(c=e.run)||c});r={collector:t.collector,elb:t.elb}}if(!t||"load"===t)return;const l="string"==typeof a?a:void 0,u=l?o.querySelector(l):null;if(!u)return void console.warn(`Trigger: element not found for selector "${l}"`);const d=r.collector.sources[n];if(!d)return void console.warn(`Trigger: source "${n}" not found in collector`);const p={elb:r.elb,settings:d.config.settings};await ae(p,u,t)}}},Re=(e,t)=>{if(!e||"object"!=typeof e)return;const n=e,r=t.document,o=t.window,i=()=>{var e,t;if(!n.attributes)return;const o=(null==(t=null==(e=n.element)?void 0:e.match(/^(\w+)/))?void 0:t[1])||"div",i=r.createElement(o);for(const[e,t]of Object.entries(n.attributes))i.setAttribute(e,t);if(n.children)for(const e of n.children){const t=r.createElement("div");for(const[n,r]of Object.entries(e))t.setAttribute(n,r);i.appendChild(t)}return r.body.appendChild(i),i};if(!n.trigger||"load"===n.trigger){if(n.url){const e=new URL(n.url);o.history.replaceState({},"",e.pathname)}return n.title&&(r.title=n.title),n.referrer&&Object.defineProperty(r,"referrer",{value:n.referrer}),void i()}return()=>{const e=i();if(e)switch(n.trigger){case"click":e.dispatchEvent(new MouseEvent("click",{bubbles:!0}));break;case"submit":e.dispatchEvent(new Event("submit",{bubbles:!0}));break;case"hover":e.dispatchEvent(new MouseEvent("mouseenter",{bubbles:!0}));break;case"scroll":o.dispatchEvent(new Event("scroll"))}}};import{isString as Ve,isDefined as Ie}from"@walkeros/core";function Ne(e={}){const t=e.prefix||"data-elb";return function(e){let n,r=e;const o={},i={},a={},s={},c={},l={};function u(e){return Object.entries(e).map(([e,t])=>`${e}:${function(e){if(!Ie(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 d={entity:e=>(n=e,r=e,d),data(e,t){const n=null!=r?r:"";return o[n]||(o[n]={}),Ve(e)?o[n][e]=t:Object.assign(o[n],e),d},action(e,t){if(Ve(e))if(Ie(t))i[e]=t;else if(e.includes(":")){const[t,n]=e.split(":",2);i[t]=n}else i[e]=e;else Object.assign(i,e);return d},actions(e,t){if(Ve(e))if(Ie(t))a[e]=t;else if(e.includes(":")){const[t,n]=e.split(":",2);a[t]=n}else a[e]=e;else Object.assign(a,e);return d},context:(e,t)=>(Ve(e)?s[e]=t:Object.assign(s,e),d),globals:(e,t)=>(Ve(e)?c[e]=t:Object.assign(c,e),d),link:(e,t)=>(Ve(e)?l[e]=t:Object.assign(l,e),d),get(){const e={};return n&&(e[t]=n),Object.entries(o).forEach(([n,r])=>{if(Object.keys(r).length>0){e[n?`${t}-${n}`:`${t}-`]=u(r)}}),Object.keys(i).length>0&&(e[`${t}action`]=u(i)),Object.keys(a).length>0&&(e[`${t}actions`]=u(a)),Object.keys(s).length>0&&(e[`${t}context`]=u(s)),Object.keys(c).length>0&&(e[`${t}globals`]=u(c)),Object.keys(l).length>0&&(e[`${t}link`]=u(l)),e}};return d}}var Me=0;function Ue(){Me=0}var qe=async e=>{if(Me>0&&void 0!==globalThis.window)throw new Error("walker.js browser source is single-instance per window. See packages/web/sources/browser/src/trigger.ts for the invariant note.");Me+=1;const{config:t,env:r,logger:o}=e,{elb:i,command:a,window:s,document:c}=r,l=(null==t?void 0:t.settings)||{},u=s||(void 0!==globalThis.window?globalThis.window:void 0),d=c||(void 0!==globalThis.document?globalThis.document:void 0),p=function(e={},t){return{prefix:"data-elb",pageview:!0,elb:"elb",elbLayer:"elbLayer",scope:t||void 0,...e}}(l,d),m={elb:i,settings:p},g=e=>{if(!e.pageview)return;const[t,n]=function(e,t){const n=t.ownerDocument||t,r=n.defaultView.location,o="page",i="body"in t?t.body:t,[a,s]=E(i,`[${f(e,o)}]`,e,o);return a.domain=r.hostname,a.title=n.title,a.referrer=n.referrer,r.search&&(a.search=r.search),r.hash&&(a.hash=r.hash),[a,s]}(e.prefix||"data-elb",e.scope);q(m,"page view",t,"load",n)};return{type:"browser",config:{settings:p},push:(...e)=>{const[t,n,r,o,i,a]=e;return q(m,t,n,r,o,i,a)},on:async e=>{if("run"===e)d&&u&&(ie(m,p),function(e,t,n,r){const o=pe(t.elbLayer)?t.elbLayer:"elbLayer",i=t.prefix||"data-elb",a=n[o];if(!Array.isArray(a))return;const s=n.document;let c=-1;a.forEach((e,t)=>{const n=ge(e);n&&pe(n[0])&&"walker run"===n[0]&&(c=t)});const l=[];for(let e=c+1;e<a.length;e++){const t=ge(a[e]);t&&l.push(t)}a.length=c+1,null==r||r.debug("drainNonWalkerEvents",{anchor:c,drained:l.length}),l.forEach(t=>be(e,i,t,s,r))}(i,p,u,o),g(p))},init:async()=>{u&&d&&(!1!==p.elbLayer&&i&&fe(i,{name:n(p.elbLayer)?p.elbLayer:"elbLayer",prefix:p.prefix,window:u,logger:o}),await async function(e,t,n){const r=()=>{e(t,n)},o=n.scope;if(!o)return void r();const i=o.ownerDocument||o;"loading"!==i.readyState?r():i.addEventListener("DOMContentLoaded",r)}(oe,m,p),n(p.elb)&&p.elb&&(u[p.elb]=(...e)=>{const[t,n,r,o,i,a]=e;return q(m,t,n,r,o,i,a)}))},destroy:async()=>{B&&(B.abort(),B=void 0),H=void 0,G=[],Y.forEach(e=>clearInterval(e)),Y=[],K.forEach(e=>clearTimeout(e)),K=[],d&&I(p.scope||d)}}},ze=qe;export{we as SourceBrowser,Ue as __resetInstanceCountForTests,Ne as createTagger,ze as default,ve as examples,b as getAllEvents,f as getElbAttributeName,g as getElbValues,h as getEvents,w as getGlobals,qe as sourceBrowser};//# sourceMappingURL=index.mjs.map
|
|
1
|
+
var e=Object.defineProperty,t=(t,n)=>{for(var r in n)e(t,r,{get:n[r],enumerable:!0})};import{isString as n}from"@walkeros/core";import{throttle as r,tryCatch as o}from"@walkeros/core";import{Const as i}from"@walkeros/collector";import{elb as a,getAttribute as s}from"@walkeros/web-core";import{assign as c,castValue as l,isArray as u,trim as d}from"@walkeros/core";import{Const as p}from"@walkeros/collector";import{getAttribute as f}from"@walkeros/web-core";function m(e,t,n=!0){return e+(t=null!=t?(n?"-":"")+t:"")}function g(e,t,n,r=!0){return A(f(t,m(e,n,r))||"").reduce((e,n)=>{let[r,o]=O(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),u(e[r])||(e[r]=[]),e[r].push(l(o))):e[r]=l(o),e},{})}function b(e,t=p.Commands.Prefix){var n;const r=e;if(!r)return[];let o=[];const i=p.Commands.Action,a=`[${m(t,i,!1)}]`,s=e=>{Object.keys(g(t,e,i,!1)).forEach(n=>{o=o.concat(h(e,n,t))})};return r!==(r.ownerDocument||r)&&(null==(n=r.matches)?void 0:n.call(r,a))&&s(r),j(r,a,s),o}function h(e,t,n=p.Commands.Prefix){const r=[],{actions:o,nearestOnly:i}=function(e,t,n){let r=t;for(;r;){const t=f(r,m(e,p.Commands.Actions,!1));if(t){const e=v(t);if(e[n])return{actions:e[n],nearestOnly:!1}}const o=f(r,m(e,p.Commands.Action,!1));if(o){const e=v(o);if(e[n]||"click"!==n)return{actions:e[n]||[],nearestOnly:!0}}r=x(e,r)}return{actions:[],nearestOnly:!1}}(n,e,t);return o.length?(o.forEach(o=>{const a=A(o.actionParams||"",",").reduce((e,t)=>(e[d(t)]=!0,e),{}),s=y(n,e,a,i);if(!s.length){const t="page",r=`[${m(n,t)}]`,[o,i]=E(e,r,n,t);s.push({entity:t,data:o,nested:[],context:i})}s.forEach(e=>{var n;r.push({entity:e.entity,action:o.action,data:e.data,trigger:t,context:e.context,nested:null!=(n=e.nested)?n:[]})})}),r):r}function w(e=p.Commands.Prefix,t){if(!t)return{};const n=m(e,p.Commands.Globals,!1);let r={};return C(t,`[${n}]`,t=>{r=c(r,g(e,t,p.Commands.Globals,!1))}),r}function v(e){const t={};return A(e).forEach(e=>{const[n,r]=O(e),[o,i]=S(n);if(!o)return;let[a,s]=S(r||"");a=a||o,t[o]||(t[o]=[]),t[o].push({trigger:o,triggerParams:i,action:a,actionParams:s})}),t}function y(e,t,n,r=!1){const o=[];let i=t;for(n=0!==Object.keys(n||{}).length?n:void 0;i;){const a=k(e,i,t,n);if(a&&(o.push(a),r))break;i=x(e,i)}return o}function k(e,t,n,r){const o=f(t,m(e));if(!o||r&&!r[o])return null;const i=[t],a=`[${m(e,o)}],[${m(e,"")}]`,s=m(e,p.Commands.Link,!1);let l={};const u=[],[d,b]=E(n||t,a,e,o);j(t,`[${s}]`,n=>{const[r,o]=O(f(n,s));"parent"===o&&j(t.ownerDocument.body,`[${s}="${r}:child"]`,t=>{i.push(t);const n=k(e,t);n&&u.push(n)})});const h=[];i.forEach(e=>{e.matches(a)&&h.push(e),j(e,a,e=>h.push(e))});let w={};return h.forEach(t=>{w=c(w,g(e,t,"")),l=c(l,g(e,t,o))}),l=c(c(w,l),d),i.forEach(t=>{j(t,`[${m(e)}]`,t=>{const n=k(e,t);n&&u.push(n)})}),{entity:o,data:l,context:b,nested:u}}function x(e,t){const n=m(e,p.Commands.Link,!1);if(t.matches(`[${n}]`)){const[e,r]=O(f(t,n));if("child"===r){const r=t.ownerDocument;let o=null;return C(r,`[${n}="${e}:parent"]`,e=>{o||(o=e)}),o}}const r=t.ownerDocument.defaultView;return!t.parentElement&&t.getRootNode&&t.getRootNode()instanceof r.ShadowRoot?t.getRootNode().host:t.parentElement}function E(e,t,n,r){let o={};const i={};let a=e;const s=`[${m(n,p.Commands.Context,!1)}]`;let l=0;for(;a;)a.matches(t)&&(o=c(g(n,a,""),o),o=c(g(n,a,r),o)),a.matches(s)&&(Object.entries(g(n,a,p.Commands.Context,!1)).forEach(([e,t])=>{t&&!i[e]&&(i[e]=[t,l])}),++l),a=x(n,a);return[o,i]}function C(e,t,n){e.querySelectorAll(t).forEach(n)}function j(e,t,n){e.querySelectorAll(t).forEach(n);e instanceof(e.ownerDocument||e).defaultView.Element&&e.shadowRoot&&j(e.shadowRoot,t,n),e.querySelectorAll("*").forEach(e=>{e.shadowRoot&&j(e.shadowRoot,t,n)})}function A(e,t=";"){if(!e)return[];const n=new RegExp(`(?:[^${t}']+|'[^']*')+`,"ig");return e.match(n)||[]}function O(e){const[t,n]=e.split(/:(.+)/,2);return[d(t),d(n)]}function S(e){const[t,n]=e.split("(",2);return[t,n?n.slice(0,-1):""]}import{tryCatch as L}from"@walkeros/core";import{isVisible as $}from"@walkeros/web-core";var T=new WeakMap,D=new WeakMap,P=new WeakMap;function W(e){const t=Date.now();let n=D.get(e);if(!n||t-n.lastChecked>500){const r=e.ownerDocument.defaultView,o=e.ownerDocument;n={isVisible:$(e,r,o),lastChecked:t},D.set(e,n)}return n.isVisible}function R(e){const t=(e.ownerDocument||e).defaultView;if(t&&t.IntersectionObserver)return L(()=>new t.IntersectionObserver(t=>{t.forEach(t=>{!function(e,t){var n,r;const o=t.target,i=P.get(e);if(!i)return;const a=i.timers.get(o);if(t.intersectionRatio>0){const r=Date.now();let s=T.get(o);if(!s||r-s.lastChecked>1e3){const e=o.ownerDocument.defaultView;s={isLarge:o.offsetHeight>e.innerHeight,lastChecked:r},T.set(o,s)}if(t.intersectionRatio>=.5||s.isLarge&&W(o)){const t=null==(n=i.elementConfigs)?void 0:n.get(o);if((null==t?void 0:t.multiple)&&t.blocked)return;if(!a){const t=o.ownerDocument.defaultView.setTimeout(async()=>{var t,n;if(W(o)){const r=null==(t=i.elementConfigs)?void 0:t.get(o);(null==r?void 0:r.context)&&await ce(r.context,o,r.trigger);const a=null==(n=i.elementConfigs)?void 0:n.get(o);(null==a?void 0:a.multiple)?a.blocked=!0:function(e,t){const n=P.get(e);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),D.delete(t)}(e,o)}},i.duration);i.timers.set(o,t)}return}}a&&(clearTimeout(a),i.timers.delete(o));const s=null==(r=i.elementConfigs)?void 0:r.get(o);(null==s?void 0:s.multiple)&&(s.blocked=!1)}(e,t)})},{rootMargin:"0px",threshold:[0,.5]}),()=>{})()}function V(e,t,n={multiple:!1}){var r;const o=e.settings.scope;if(!o)return;const i=P.get(o);(null==i?void 0:i.observer)&&t&&(i.elementConfigs||(i.elementConfigs=new WeakMap),i.elementConfigs.set(t,{multiple:null!=(r=n.multiple)&&r,blocked:!1,context:e,trigger:n.multiple?"visible":"impression"}),i.observer.observe(t))}function I(e){if(!e)return;const t=P.get(e);t&&(t.observer&&t.observer.disconnect(),P.delete(e))}import{isString as N,isObject as M,isElementOrDocument as U}from"@walkeros/core";import{createPushResult as q}from"@walkeros/collector";function z(e,t,n,r,o,i,a){const{elb:s,settings:c}=e;if(N(t)&&t.startsWith("walker ")){if("walker init"===t&&e.initScope){const t=function(e,t){if(B(e))return[e];if(Array.isArray(e)){const t=[];for(const n of e)B(n)&&t.push(n);return t}if(void 0===e){const e=t.scope;if(B(e))return[e];if(void 0!==globalThis.document)return[globalThis.document]}return[]}(n,c);for(const n of t)e.initScope(e,{...c,scope:n});return Promise.resolve(q({ok:!0}))}return s(t,n)}if(M(t)){const e=t;if(!e.source&&c.scope){const t=c.scope.ownerDocument||c.scope,n=t.defaultView;e.source=H(n,t)}return!e.globals&&c.scope&&(e.globals=w(c.prefix,c.scope)),s(e)}const[l]=String(M(t)?t.name:t).split(" ");let u,d=M(n)?n:{},p={},f=!1;if(U(n)&&(u=n,f=!0),U(o)?u=o:M(o)&&Object.keys(o).length&&(p=o),u){const e=y(c.prefix||"data-elb",u).find(e=>e.entity===l);e&&(f&&(d=e.data),e.context&&(p=e.context))}const m=c.scope?c.scope.ownerDocument||c.scope:void 0,g=null==m?void 0:m.defaultView;"page"===l&&g&&(d.id=d.id||g.location.pathname);const b=w(c.prefix,c.scope);return s({name:String(t||""),data:d,context:p,globals:b,nested:i,custom:a,trigger:N(r)?r:"",source:g&&m?H(g,m):void 0})}function H(e,t){return{type:"browser",platform:"web",url:e.location.href,referrer:t.referrer}}function B(e){if(!e||"object"!=typeof e)return!1;if("undefined"!=typeof Element&&e instanceof Element)return!0;if("undefined"!=typeof Document&&e instanceof Document)return!0;if("nodeType"in e){const t=e.nodeType;return 1===t||9===t}return!1}var G,Y,K=[],X=[],_=[];function F(){return Y||(Y=new AbortController),Y}var J="click",Q="hover",Z="load",ee="pulse",te="scroll",ne="submit",re="impression",oe="visible",ie="wait";function ae(e,t){if(!t.scope)return;!function(e,t){const n=t.scope;if(!n)return;Y&&Y.abort();Y=new AbortController;const{signal:r}=Y;n.addEventListener("click",o(function(t){de.call(this,e,t)}),{signal:r}),n.addEventListener("submit",o(function(t){pe.call(this,e,t)}),{signal:r})}(e,t)}function se(e,t){const n=t.scope;K=[];const o=n;if(!o)return;I(o),function(e,t=1e3){P.has(e)||P.set(e,{observer:R(e),timers:new WeakMap,duration:t})}(o,1e3);const a=m(t.prefix,i.Commands.Action,!1);o!==(o.ownerDocument||o)&&le(e,o,a,t),j(o,`[${a}]`,n=>{le(e,n,a,t)}),K.length&&function(e,t){const n=t.ownerDocument||t,o=n.defaultView,i=(e,t)=>e.filter(([e,n])=>{const r=o.scrollY+o.innerHeight,i=e.offsetTop;if(r<i)return!0;const a=e.clientHeight;return!(100*(1-(i+a-r)/(a||1))>=n)||(ce(t,e,te),!1)});G||(G=r(function(){K=i.call(t,K,e)}),t.addEventListener("scroll",G,{signal:F().signal}))}(e,o)}async function ce(e,t,n){const r=h(t,n,e.settings.prefix);return Promise.all(r.map(t=>z(e,{name:`${t.entity} ${t.action}`,...t,trigger:n})))}function le(e,t,n,r){const i=s(t,n);i&&Object.values(v(i)).forEach(n=>n.forEach(n=>{switch(n.trigger){case Q:!function(e,t){t.addEventListener("mouseenter",o(function(t){const n=ue(t);n&&ce(e,n,Q)}),{signal:F().signal})}(e,t);break;case Z:!function(e,t){ce(e,t,Z)}(e,t);break;case ee:!function(e,t,n=""){const r=t.ownerDocument,o=setInterval(()=>{r.hidden||ce(e,t,ee)},parseInt(n||"")||15e3);X.push(o)}(e,t,n.triggerParams);break;case te:!function(e,t=""){const n=parseInt(t||"")||50;if(n<0||n>100)return;K.push([e,n])}(t,n.triggerParams);break;case re:V(e,t);break;case oe:V(e,t,{multiple:!0});break;case ie:!function(e,t,n=""){const r=setTimeout(()=>ce(e,t,ie),parseInt(n||"")||15e3);_.push(r)}(e,t,n.triggerParams)}}))}function ue(e){var t;const n=null==(t=e.composedPath)?void 0:t.call(e),r=(null==n?void 0:n.length)?n[0]:e.target;if(r&&"object"==typeof r&&"tagName"in r)return r}function de(e,t){const n=ue(t);n&&ce(e,n,J)}function pe(e,t){const n=ue(t);n&&ce(e,n,ne)}import{tryCatch as fe,isString as me,isObject as ge}from"@walkeros/core";function be(e,t={}){var n;const r=t.name||"elbLayer",o=t.window,i=t.logger;if(!o)return;const a=o;a[r]||(a[r]=[]);const s=a[r],c=o.document;null==i||i.debug("initElbLayer enter",{layerName:r,queuedItems:s.length}),s.push=function(...n){if(ve(n[0])){const r=[...Array.from(n[0])],o=Array.prototype.push.apply(this,[r]);return we(e,t.prefix,r,c,i),o}const r=Array.prototype.push.apply(this,n);return n.forEach(n=>{we(e,t.prefix,n,c,i)}),r},Array.isArray(s)&&s.length>0&&(null==i||i.debug("initElbLayer drain walker commands",{count:s.length}),function(e,t,n,r,o){const i="walker ",a=[...n],s=new Set;a.forEach((n,a)=>{const c=he(n);if(!c)return;const l=c[0];!ge(l)&&me(l)&&l.startsWith(i)&&(s.add(a),we(e,t,c,r,o))});const c=[...s].sort((e,t)=>t-e);for(const e of c)n.splice(e,1);null==o||o.debug("drainWalkerCommands done",{consumed:s.size,remaining:n.length})}(e,null!=(n=t.prefix)?n:"data-elb",s,c,i))}function he(e){const t=ve(e)?[...Array.from(e)]:null!=(n=e)&&"object"==typeof n&&"length"in n&&"number"==typeof n.length?Array.from(e):[e];var n;if(!Array.isArray(t)||0===t.length)return null;if(1===t.length&&!t[0])return null;const r=t[0];return ge(r)&&0===Object.keys(r).length||!ge(r)&&me(r)&&""===r.trim()?null:t}function we(e,t="data-elb",n,r,o){fe(()=>{if(Array.isArray(n)){const[i,...a]=n;if(!i||me(i)&&""===i.trim())return void(null==o||o.debug("pushCommand skipped (empty/invalid action)",{item:n}));if(me(i)&&i.startsWith("walker "))return null==o||o.debug("pushCommand walker command",{action:i,data:a[0]}),void e(i,a[0]);null==o||o.debug("pushCommand event (translated)",{action:i,rest:a}),z({elb:e,settings:{prefix:t,scope:r,pageview:!1,elb:"",elbLayer:!1}},i,...a)}else if(n&&"object"==typeof n){if(0===Object.keys(n).length)return void(null==o||o.debug("pushCommand skipped (empty object)"));null==o||o.debug("pushCommand object event",{item:n}),e(n)}},e=>{null==o||o.warn("pushCommand failed",{error:e,item:n})})()}function ve(e){return null!=e&&"object"==typeof e&&"[object Arguments]"===Object.prototype.toString.call(e)}var ye={},ke={};t(ke,{createTrigger:()=>Ve,env:()=>xe,step:()=>Oe,trigger:()=>Ie});var xe={};t(xe,{push:()=>Ae});var Ee=()=>{},Ce=()=>()=>Promise.resolve({ok:!0}),je={error:Ee,warn:Ee,info:Ee,debug:Ee,throw:e=>{throw"string"==typeof e?new Error(e):e},json:Ee,scope:()=>je},Ae={get push(){return Ce()},get command(){return Ce()},get elb(){return Ce()},get window(){return{addEventListener:Ee,removeEventListener:Ee,location:{href:"https://example.com/page",pathname:"/page",search:"?query=test",hash:"#section",host:"example.com",hostname:"example.com",origin:"https://example.com",protocol:"https:"},document:{},navigator:{language:"en-US",userAgent:"Mozilla/5.0 (Test)"},screen:{width:1920,height:1080},innerWidth:1920,innerHeight:1080,pageXOffset:0,pageYOffset:0,scrollX:0,scrollY:0}},get document(){return{addEventListener:Ee,removeEventListener:Ee,querySelector:Ee,querySelectorAll:()=>[],getElementById:Ee,getElementsByClassName:()=>[],getElementsByTagName:()=>[],createElement:()=>({setAttribute:Ee,getAttribute:Ee,addEventListener:Ee,removeEventListener:Ee}),body:{appendChild:Ee,removeChild:Ee},documentElement:{scrollTop:0,scrollLeft:0},readyState:"complete",title:"Test Page",referrer:"",cookie:""}},logger:je},Oe={};t(Oe,{clickEvent:()=>Le,contextAndGlobals:()=>We,dataAttributeTypes:()=>Pe,impressionEvent:()=>Te,nestedEntities:()=>De,pageView:()=>Se,submitEvent:()=>$e});var Se={title:"Page view",description:"A page load trigger captures the current URL, title, and referrer as a walker page view event.",trigger:{type:"load",options:{url:"https://example.com/docs",title:"Documentation",referrer:"https://example.com/"}},in:"",out:[["elb",{name:"page view",data:{domain:"example.com",title:"Documentation",referrer:"https://example.com/",id:"/docs"},context:{},globals:{},nested:void 0,custom:void 0,trigger:"load",source:{type:"browser",platform:"web",url:"https://example.com/docs",referrer:"https://example.com/"}}]]},Le={title:"Click event",description:"A button click with walker data attributes is captured as an entity action event with the mapped label data.",trigger:{type:"click",options:"button"},in:'<button data-elb="cta" data-elb-cta="label:Sign Up" data-elbaction="click:click">Sign Up</button>',out:[["elb",{name:"cta click",entity:"cta",action:"click",data:{label:"Sign Up"},context:{},globals:{},nested:[],source:{type:"browser",platform:"web",url:"https://example.com/",referrer:""},trigger:"click"}]]},$e={title:"Submit event",description:"A form submit with walker data attributes produces a signup complete event carrying the selected plan.",trigger:{type:"submit",options:"form"},in:'<form data-elb="signup" data-elb-signup="plan:premium" data-elbaction="submit:complete"></form>',out:[["elb",{name:"signup complete",entity:"signup",action:"complete",data:{plan:"premium"},context:{},globals:{},nested:[],source:{type:"browser",platform:"web",url:"https://example.com/",referrer:""},trigger:"submit"}]]},Te={title:"Impression event",description:"An intersection observer impression on a div with walker attributes emits a banner view event.",trigger:{type:"impression",options:"div"},in:'<div data-elb="banner" data-elb-banner="type:promotional;position:sidebar" data-elbaction="impression:view"></div>',out:[["elb",{name:"banner view",entity:"banner",action:"view",data:{type:"promotional",position:"sidebar"},context:{},globals:{},nested:[],source:{type:"browser",platform:"web",url:"https://example.com/",referrer:""},trigger:"impression"}]]},De={title:"Nested entities",description:"A page load produces a page view plus a product view whose nested size entity is captured on the product event.",trigger:{type:"load"},in:'<div data-elb="product" data-elb-product="id:SKU-42;name:Sneakers" data-elbaction="load:view"><div data-elb="size" data-elb-size="selected:large;inStock:true"></div></div>',out:[["elb",{name:"page view",data:{domain:"example.com",title:"",referrer:"",id:"/"},context:{},globals:{},nested:void 0,custom:void 0,trigger:"load",source:{type:"browser",platform:"web",url:"https://example.com/",referrer:""}}],["elb",{name:"product view",entity:"product",action:"view",data:{id:"SKU-42",name:"Sneakers"},context:{},globals:{},nested:[{entity:"size",data:{selected:"large",inStock:!0},context:{},nested:[]}],source:{type:"browser",platform:"web",url:"https://example.com/",referrer:""},trigger:"load"}]]},Pe={title:"Data attribute types",description:"Walker data attributes parse scalar, boolean, and array values into typed fields on the emitted event.",trigger:{type:"click",options:"div"},in:'<div data-elb="product" data-elb-product="price:99.99;available:true;colors[]:red;colors[]:blue" data-elbaction="click:select"></div>',out:[["elb",{name:"product select",entity:"product",action:"select",data:{price:99.99,available:!0,colors:["red","blue"]},context:{},globals:{},nested:[],source:{type:"browser",platform:"web",url:"https://example.com/",referrer:""},trigger:"click"}]]},We={title:"Context and globals",description:"Walker context and globals attributes attach ambient metadata to events emitted by the browser source.",trigger:{type:"click",options:'[data-elb="cta"]'},in:'<div data-elbcontext="test:engagement_flow" data-elbglobals="language:en;plan:premium"><div data-elb="cta" data-elb-cta="label:Try Now" data-elbaction="click:signup">Try Now</div></div>',out:[["elb",{name:"cta signup",entity:"cta",action:"signup",data:{label:"Try Now"},context:{test:["engagement_flow",0]},globals:{language:"en",plan:"premium"},nested:[],source:{type:"browser",platform:"web",url:"https://example.com/",referrer:""},trigger:"click"}]]};import{startFlow as Re}from"@walkeros/collector";var Ve=async(e,t)=>{const n=(null==t?void 0:t.sourceId)||"browser";let r;const o=document,i=window;return{get flow(){return r},trigger:(t,a)=>async s=>{var c;if("load"===t||!t){const e="object"==typeof a&&null!==a?a:{};if(e.url){const t=new URL(e.url);i.history.replaceState({},"",t.pathname)}e.title&&(o.title=e.title),e.referrer&&Object.defineProperty(o,"referrer",{value:e.referrer,configurable:!0})}if(s&&(o.body.innerHTML=s),!r){const t=await Re({...e,run:null==(c=e.run)||c});r={collector:t.collector,elb:t.elb}}if(!t||"load"===t)return;const l="string"==typeof a?a:void 0,u=l?o.querySelector(l):null;if(!u)return void console.warn(`Trigger: element not found for selector "${l}"`);const d=r.collector.sources[n];if(!d)return void console.warn(`Trigger: source "${n}" not found in collector`);const p={elb:r.elb,settings:d.config.settings};await ce(p,u,t)}}},Ie=(e,t)=>{if(!e||"object"!=typeof e)return;const n=e,r=t.document,o=t.window,i=()=>{var e,t;if(!n.attributes)return;const o=(null==(t=null==(e=n.element)?void 0:e.match(/^(\w+)/))?void 0:t[1])||"div",i=r.createElement(o);for(const[e,t]of Object.entries(n.attributes))i.setAttribute(e,t);if(n.children)for(const e of n.children){const t=r.createElement("div");for(const[n,r]of Object.entries(e))t.setAttribute(n,r);i.appendChild(t)}return r.body.appendChild(i),i};if(!n.trigger||"load"===n.trigger){if(n.url){const e=new URL(n.url);o.history.replaceState({},"",e.pathname)}return n.title&&(r.title=n.title),n.referrer&&Object.defineProperty(r,"referrer",{value:n.referrer}),void i()}return()=>{const e=i();if(e)switch(n.trigger){case"click":e.dispatchEvent(new MouseEvent("click",{bubbles:!0}));break;case"submit":e.dispatchEvent(new Event("submit",{bubbles:!0}));break;case"hover":e.dispatchEvent(new MouseEvent("mouseenter",{bubbles:!0}));break;case"scroll":o.dispatchEvent(new Event("scroll"))}}};import{isString as Ne,isDefined as Me}from"@walkeros/core";function Ue(e={}){const t=e.prefix||"data-elb";return function(e){let n,r=e;const o={},i={},a={},s={},c={},l={};function u(e){return Object.entries(e).map(([e,t])=>`${e}:${function(e){if(!Me(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 d={entity:e=>(n=e,r=e,d),data(e,t){const n=null!=r?r:"";return o[n]||(o[n]={}),Ne(e)?o[n][e]=t:Object.assign(o[n],e),d},action(e,t){if(Ne(e))if(Me(t))i[e]=t;else if(e.includes(":")){const[t,n]=e.split(":",2);i[t]=n}else i[e]=e;else Object.assign(i,e);return d},actions(e,t){if(Ne(e))if(Me(t))a[e]=t;else if(e.includes(":")){const[t,n]=e.split(":",2);a[t]=n}else a[e]=e;else Object.assign(a,e);return d},context:(e,t)=>(Ne(e)?s[e]=t:Object.assign(s,e),d),globals:(e,t)=>(Ne(e)?c[e]=t:Object.assign(c,e),d),link:(e,t)=>(Ne(e)?l[e]=t:Object.assign(l,e),d),get(){const e={};return n&&(e[t]=n),Object.entries(o).forEach(([n,r])=>{if(Object.keys(r).length>0){e[n?`${t}-${n}`:`${t}-`]=u(r)}}),Object.keys(i).length>0&&(e[`${t}action`]=u(i)),Object.keys(a).length>0&&(e[`${t}actions`]=u(a)),Object.keys(s).length>0&&(e[`${t}context`]=u(s)),Object.keys(c).length>0&&(e[`${t}globals`]=u(c)),Object.keys(l).length>0&&(e[`${t}link`]=u(l)),e}};return d}}var qe=0;function ze(){qe=0}var He=async e=>{if(qe>0&&void 0!==globalThis.window)throw new Error("walker.js browser source is single-instance per window. See packages/web/sources/browser/src/trigger.ts for the invariant note.");qe+=1;const{config:t,env:r,logger:o}=e,{elb:i,command:a,window:s,document:c}=r,l=(null==t?void 0:t.settings)||{},u=s||(void 0!==globalThis.window?globalThis.window:void 0),d=c||(void 0!==globalThis.document?globalThis.document:void 0),p=function(e={},t){return{prefix:"data-elb",pageview:!0,elb:"elb",elbLayer:"elbLayer",scope:t||void 0,...e}}(l,d),f={elb:i,settings:p,initScope:se},g=e=>{if(!e.pageview)return;const[t,n]=function(e,t){const n=t.ownerDocument||t,r=n.defaultView.location,o="page",i="body"in t?t.body:t,[a,s]=E(i,`[${m(e,o)}]`,e,o);return a.domain=r.hostname,a.title=n.title,a.referrer=n.referrer,r.search&&(a.search=r.search),r.hash&&(a.hash=r.hash),[a,s]}(e.prefix||"data-elb",e.scope);z(f,"page view",t,"load",n)};return{type:"browser",config:{settings:p},push:(...e)=>{const[t,n,r,o,i,a]=e;return z(f,t,n,r,o,i,a)},on:async e=>{if("run"===e)d&&u&&(!function(e,t){if(!t.scope)return;se(e,t)}(f,p),function(e,t,n,r){const o=me(t.elbLayer)?t.elbLayer:"elbLayer",i=t.prefix||"data-elb",a=n[o];if(!Array.isArray(a))return;const s=n.document;let c=-1;a.forEach((e,t)=>{const n=he(e);n&&me(n[0])&&"walker run"===n[0]&&(c=t)});const l=[];for(let e=c+1;e<a.length;e++){const t=he(a[e]);t&&l.push(t)}a.length=c+1,null==r||r.debug("drainNonWalkerEvents",{anchor:c,drained:l.length}),l.forEach(t=>we(e,i,t,s,r))}(i,p,u,o),g(p))},init:async()=>{u&&d&&(!1!==p.elbLayer&&i&&be(i,{name:n(p.elbLayer)?p.elbLayer:"elbLayer",prefix:p.prefix,window:u,logger:o}),await async function(e,t,n){const r=()=>{e(t,n)},o=n.scope;if(!o)return void r();const i=o.ownerDocument||o;"loading"!==i.readyState?r():i.addEventListener("DOMContentLoaded",r)}(ae,f,p),n(p.elb)&&p.elb&&(u[p.elb]=(...e)=>{const[t,n,r,o,i,a]=e;return z(f,t,n,r,o,i,a)}))},destroy:async()=>{Y&&(Y.abort(),Y=void 0),G=void 0,K=[],X.forEach(e=>clearInterval(e)),X=[],_.forEach(e=>clearTimeout(e)),_=[],d&&I(p.scope||d)}}},Be=He;export{ye as SourceBrowser,ze as __resetInstanceCountForTests,Ue as createTagger,Be as default,ke as examples,b as getAllEvents,m as getElbAttributeName,g as getElbValues,h as getEvents,w as getGlobals,He as sourceBrowser};//# sourceMappingURL=index.mjs.map
|