@walkeros/web-source-browser 4.1.0 → 4.1.1-next-1779485810490
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 +15 -0
- package/dist/dev.js.map +1 -1
- package/dist/dev.mjs.map +1 -1
- package/dist/index.browser.js +1 -1
- 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 +1 -1
- 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 O(m(t,f(e,n,r))||"").reduce((e,n)=>{let[r,o]=A(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=w(t);if(e[n])return{actions:e[n],nearestOnly:!1}}const o=m(r,f(e,p.Commands.Action,!1));if(o){const e=w(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=O(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 v(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 w(e){const t={};return O(e).forEach(e=>{const[n,r]=A(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]=A(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 v={};return h.forEach(t=>{v=c(v,g(e,t,"")),l=c(l,g(e,t,o))}),l=c(c(v,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]=A(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 O(e,t=";"){if(!e)return[];const n=new RegExp(`(?:[^${t}']+|'[^']*')+`,"ig");return e.match(n)||[]}function A(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 ne(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 N(e){if(!e)return;const t=P.get(e);t&&(t.observer&&t.observer.disconnect(),P.delete(e))}import{isString as I,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(I(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=v(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=v(c.prefix,c.scope);return s({name:String(t||""),data:d,context:p,globals:b,nested:i,custom:a,trigger:I(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="click",Y="hover",K="load",X="pulse",_="scroll",F="submit",J="impression",Q="visible",Z="wait";function ee(e,t){if(!t.scope)return;!function(e,t){const n=t.scope;if(!n)return;n.addEventListener("click",o(function(t){ie.call(this,e,t)})),n.addEventListener("submit",o(function(t){ae.call(this,e,t)}))}(e,t)}function te(e,t){if(!t.scope)return;!function(e,t){const n=t.scope;B=[];const o=n;if(!o)return;N(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&&re(e,o,a,t);j(o,`[${a}]`,n=>{re(e,n,a,t)}),B.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)||(ne(t,e,_),!1)});H||(H=r(function(){B=i.call(t,B,e)}),t.addEventListener("scroll",H))}(e,o)}(e,t)}async function ne(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 re(e,t,n,r){const i=s(t,n);i&&Object.values(w(i)).forEach(n=>n.forEach(n=>{switch(n.trigger){case Y:!function(e,t){t.addEventListener("mouseenter",o(function(t){const n=oe(t);n&&ne(e,n,Y)}))}(e,t);break;case K:!function(e,t){ne(e,t,K)}(e,t);break;case X:!function(e,t,n=""){const r=t.ownerDocument;setInterval(()=>{r.hidden||ne(e,t,X)},parseInt(n||"")||15e3)}(e,t,n.triggerParams);break;case _:!function(e,t=""){const n=parseInt(t||"")||50;if(n<0||n>100)return;B.push([e,n])}(t,n.triggerParams);break;case J:V(e,t);break;case Q:V(e,t,{multiple:!0});break;case Z:!function(e,t,n=""){setTimeout(()=>ne(e,t,Z),parseInt(n||"")||15e3)}(e,t,n.triggerParams)}}))}function oe(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 ie(e,t){const n=oe(t);n&&ne(e,n,G)}function ae(e,t){const n=oe(t);n&&ne(e,n,F)}import{tryCatch as se,isString as ce,isObject as le}from"@walkeros/core";function ue(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(me(n[0])){const r=[...Array.from(n[0])],o=Array.prototype.push.apply(this,[r]);return pe(e,t.prefix,r,c,i),o}const r=Array.prototype.push.apply(this,n);return n.forEach(n=>{pe(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=de(n);if(!c)return;const l=c[0];!le(l)&&ce(l)&&l.startsWith(i)&&(s.add(a),pe(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 de(e){const t=me(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 le(r)&&0===Object.keys(r).length||!le(r)&&ce(r)&&""===r.trim()?null:t}function pe(e,t="data-elb",n,r,o){se(()=>{if(Array.isArray(n)){const[i,...a]=n;if(!i||ce(i)&&""===i.trim())return void(null==o||o.debug("pushCommand skipped (empty/invalid action)",{item:n}));if(ce(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 me(e){return null!=e&&"object"==typeof e&&"[object Arguments]"===Object.prototype.toString.call(e)}var fe={},ge={};t(ge,{createTrigger:()=>$e,env:()=>be,step:()=>ke,trigger:()=>De});var be={};t(be,{push:()=>ye});var he=()=>{},ve=()=>()=>Promise.resolve({ok:!0}),we={error:he,warn:he,info:he,debug:he,throw:e=>{throw"string"==typeof e?new Error(e):e},json:he,scope:()=>we},ye={get push(){return ve()},get command(){return ve()},get elb(){return ve()},get window(){return{addEventListener:he,removeEventListener:he,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:he,removeEventListener:he,querySelector:he,querySelectorAll:()=>[],getElementById:he,getElementsByClassName:()=>[],getElementsByTagName:()=>[],createElement:()=>({setAttribute:he,getAttribute:he,addEventListener:he,removeEventListener:he}),body:{appendChild:he,removeChild:he},documentElement:{scrollTop:0,scrollLeft:0},readyState:"complete",title:"Test Page",referrer:"",cookie:""}},logger:we},ke={};t(ke,{clickEvent:()=>Ee,contextAndGlobals:()=>Le,dataAttributeTypes:()=>Ae,impressionEvent:()=>je,nestedEntities:()=>Oe,pageView:()=>xe,submitEvent:()=>Ce});var xe={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/"}}]]},Ee={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"}]]},Ce={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"}]]},je={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"}]]},Oe={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"}]]},Ae={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"}]]},Le={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 Se}from"@walkeros/collector";var $e=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 Se({...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 ne(p,u,t)}}},De=(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 Te,isDefined as Pe}from"@walkeros/core";function We(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(!Pe(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]={}),Te(e)?o[n][e]=t:Object.assign(o[n],e),d},action(e,t){if(Te(e))if(Pe(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(Te(e))if(Pe(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)=>(Te(e)?s[e]=t:Object.assign(s,e),d),globals:(e,t)=>(Te(e)?c[e]=t:Object.assign(c,e),d),link:(e,t)=>(Te(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 Re=async e=>{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&&(te(m,p),function(e,t,n,r){const o=ce(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=de(e);n&&ce(n[0])&&"walker run"===n[0]&&(c=t)});const l=[];for(let e=c+1;e<a.length;e++){const t=de(a[e]);t&&l.push(t)}a.length=c+1,null==r||r.debug("drainNonWalkerEvents",{anchor:c,drained:l.length}),l.forEach(t=>pe(e,i,t,s,r))}(i,p,u,o),g(p))},init:async()=>{u&&d&&(!1!==p.elbLayer&&i&&ue(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)}(ee,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()=>{d&&N(p.scope||d)}}},Ve=Re;export{fe as SourceBrowser,We as createTagger,Ve as default,ge as examples,b as getAllEvents,f as getElbAttributeName,g as getElbValues,h as getEvents,v as getGlobals,Re 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 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 O(m(t,f(e,n,r))||"").reduce((e,n)=>{let[r,o]=A(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=w(t);if(e[n])return{actions:e[n],nearestOnly:!1}}const o=m(r,f(e,p.Commands.Action,!1));if(o){const e=w(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=O(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 v(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 w(e){const t={};return O(e).forEach(e=>{const[n,r]=A(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]=A(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 v={};return h.forEach(t=>{v=c(v,g(e,t,"")),l=c(l,g(e,t,o))}),l=c(c(v,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]=A(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 O(e,t=";"){if(!e)return[];const n=new RegExp(`(?:[^${t}']+|'[^']*')+`,"ig");return e.match(n)||[]}function A(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 ie(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=v(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=v(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=[],X="click",_="hover",F="load",J="pulse",Q="scroll",Z="submit",ee="impression",te="visible",ne="wait";function re(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){ce.call(this,e,t)}),{signal:r}),n.addEventListener("submit",o(function(t){le.call(this,e,t)}),{signal:r})}(e,t)}function oe(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&&ae(e,o,a,t);j(o,`[${a}]`,n=>{ae(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)||(ie(t,e,Q),!1)});H||(H=r(function(){G=i.call(t,G,e)}),t.addEventListener("scroll",H,B?{signal:B.signal}:void 0))}(e,o)}(e,t)}async function ie(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 ae(e,t,n,r){const i=s(t,n);i&&Object.values(w(i)).forEach(n=>n.forEach(n=>{switch(n.trigger){case _:!function(e,t){t.addEventListener("mouseenter",o(function(t){const n=se(t);n&&ie(e,n,_)}),B?{signal:B.signal}:void 0)}(e,t);break;case F:!function(e,t){ie(e,t,F)}(e,t);break;case J:!function(e,t,n=""){const r=t.ownerDocument,o=setInterval(()=>{r.hidden||ie(e,t,J)},parseInt(n||"")||15e3);Y.push(o)}(e,t,n.triggerParams);break;case Q:!function(e,t=""){const n=parseInt(t||"")||50;if(n<0||n>100)return;G.push([e,n])}(t,n.triggerParams);break;case ee:V(e,t);break;case te:V(e,t,{multiple:!0});break;case ne:!function(e,t,n=""){const r=setTimeout(()=>ie(e,t,ne),parseInt(n||"")||15e3);K.push(r)}(e,t,n.triggerParams)}}))}function se(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 ce(e,t){const n=se(t);n&&ie(e,n,X)}function le(e,t){const n=se(t);n&&ie(e,n,Z)}import{tryCatch as ue,isString as de,isObject as pe}from"@walkeros/core";function me(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(be(n[0])){const r=[...Array.from(n[0])],o=Array.prototype.push.apply(this,[r]);return ge(e,t.prefix,r,c,i),o}const r=Array.prototype.push.apply(this,n);return n.forEach(n=>{ge(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=fe(n);if(!c)return;const l=c[0];!pe(l)&&de(l)&&l.startsWith(i)&&(s.add(a),ge(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 fe(e){const t=be(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 pe(r)&&0===Object.keys(r).length||!pe(r)&&de(r)&&""===r.trim()?null:t}function ge(e,t="data-elb",n,r,o){ue(()=>{if(Array.isArray(n)){const[i,...a]=n;if(!i||de(i)&&""===i.trim())return void(null==o||o.debug("pushCommand skipped (empty/invalid action)",{item:n}));if(de(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 be(e){return null!=e&&"object"==typeof e&&"[object Arguments]"===Object.prototype.toString.call(e)}var he={},ve={};t(ve,{createTrigger:()=>Pe,env:()=>we,step:()=>Ce,trigger:()=>We});var we={};t(we,{push:()=>Ee});var ye=()=>{},ke=()=>()=>Promise.resolve({ok:!0}),xe={error:ye,warn:ye,info:ye,debug:ye,throw:e=>{throw"string"==typeof e?new Error(e):e},json:ye,scope:()=>xe},Ee={get push(){return ke()},get command(){return ke()},get elb(){return ke()},get window(){return{addEventListener:ye,removeEventListener:ye,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:ye,removeEventListener:ye,querySelector:ye,querySelectorAll:()=>[],getElementById:ye,getElementsByClassName:()=>[],getElementsByTagName:()=>[],createElement:()=>({setAttribute:ye,getAttribute:ye,addEventListener:ye,removeEventListener:ye}),body:{appendChild:ye,removeChild:ye},documentElement:{scrollTop:0,scrollLeft:0},readyState:"complete",title:"Test Page",referrer:"",cookie:""}},logger:xe},Ce={};t(Ce,{clickEvent:()=>Oe,contextAndGlobals:()=>De,dataAttributeTypes:()=>$e,impressionEvent:()=>Le,nestedEntities:()=>Se,pageView:()=>je,submitEvent:()=>Ae});var je={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"}]]},Ae={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"}]]},Le={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"}]]},Se={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"}]]},$e={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"}]]},De={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 Te}from"@walkeros/collector";var Pe=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 Te({...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 ie(p,u,t)}}},We=(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 Re,isDefined as Ve}from"@walkeros/core";function Ie(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(!Ve(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]={}),Re(e)?o[n][e]=t:Object.assign(o[n],e),d},action(e,t){if(Re(e))if(Ve(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(Re(e))if(Ve(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)=>(Re(e)?s[e]=t:Object.assign(s,e),d),globals:(e,t)=>(Re(e)?c[e]=t:Object.assign(c,e),d),link:(e,t)=>(Re(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 Ne=async e=>{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&&(oe(m,p),function(e,t,n,r){const o=de(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=fe(e);n&&de(n[0])&&"walker run"===n[0]&&(c=t)});const l=[];for(let e=c+1;e<a.length;e++){const t=fe(a[e]);t&&l.push(t)}a.length=c+1,null==r||r.debug("drainNonWalkerEvents",{anchor:c,drained:l.length}),l.forEach(t=>ge(e,i,t,s,r))}(i,p,u,o),g(p))},init:async()=>{u&&d&&(!1!==p.elbLayer&&i&&me(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)}(re,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)}}},Me=Ne;export{he as SourceBrowser,Ie as createTagger,Me as default,ve as examples,b as getAllEvents,f as getElbAttributeName,g as getElbValues,h as getEvents,v as getGlobals,Ne as sourceBrowser};//# sourceMappingURL=index.mjs.map
|