@walkeros/web-core 3.0.1 → 3.1.0-next-1773969156384
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/dist/index.d.mts +8 -4
- package/dist/index.d.ts +8 -4
- 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/package.json +3 -3
package/dist/index.d.mts
CHANGED
|
@@ -134,9 +134,13 @@ interface StorageValue {
|
|
|
134
134
|
e: number;
|
|
135
135
|
v: string;
|
|
136
136
|
}
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
137
|
+
interface StorageEnv {
|
|
138
|
+
window?: Window & typeof globalThis;
|
|
139
|
+
document?: Document;
|
|
140
|
+
}
|
|
141
|
+
declare function storageDelete(key: string, storage?: StorageType, env?: StorageEnv): void;
|
|
142
|
+
declare function storageRead(key: string, storage?: StorageType, env?: StorageEnv): WalkerOS.PropertyType;
|
|
143
|
+
declare function storageWrite(key: string, value: WalkerOS.PropertyType, maxAgeInMinutes?: number, storage?: StorageType, domain?: string, env?: StorageEnv): WalkerOS.PropertyType;
|
|
140
144
|
|
|
141
145
|
type TypesGeneric = Source$1.TypesGeneric;
|
|
142
146
|
interface Source<T extends TypesGeneric = Source$1.Types> extends Source$1.Instance<T> {
|
|
@@ -275,4 +279,4 @@ declare namespace collector {
|
|
|
275
279
|
export type { collector_Collector as Collector, collector_Config as Config, collector_Destinations as Destinations, collector_InitConfig as InitConfig, collector_Scope as Scope, collector_State as State };
|
|
276
280
|
}
|
|
277
281
|
|
|
278
|
-
export { destination as DestinationWeb, elb as Elb, type SendWebOptions, type SendWebOptionsFetch, type SendWebReturn, type SendWebTransport, source as SourceWeb, type StorageValue, walker as Walker, collector as WebCollector, elb$1 as elb, getAttribute, getEnv, getHashWeb, getLanguage, getScreenSize, getTimezone, isVisible, parseInlineConfig, sendWeb, sendWebAsBeacon, sendWebAsFetch, sendWebAsXhr, splitAttribute, splitKeyVal, storageDelete, storageRead, storageWrite };
|
|
282
|
+
export { destination as DestinationWeb, elb as Elb, type SendWebOptions, type SendWebOptionsFetch, type SendWebReturn, type SendWebTransport, source as SourceWeb, type StorageEnv, type StorageValue, walker as Walker, collector as WebCollector, elb$1 as elb, getAttribute, getEnv, getHashWeb, getLanguage, getScreenSize, getTimezone, isVisible, parseInlineConfig, sendWeb, sendWebAsBeacon, sendWebAsFetch, sendWebAsXhr, splitAttribute, splitKeyVal, storageDelete, storageRead, storageWrite };
|
package/dist/index.d.ts
CHANGED
|
@@ -134,9 +134,13 @@ interface StorageValue {
|
|
|
134
134
|
e: number;
|
|
135
135
|
v: string;
|
|
136
136
|
}
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
137
|
+
interface StorageEnv {
|
|
138
|
+
window?: Window & typeof globalThis;
|
|
139
|
+
document?: Document;
|
|
140
|
+
}
|
|
141
|
+
declare function storageDelete(key: string, storage?: StorageType, env?: StorageEnv): void;
|
|
142
|
+
declare function storageRead(key: string, storage?: StorageType, env?: StorageEnv): WalkerOS.PropertyType;
|
|
143
|
+
declare function storageWrite(key: string, value: WalkerOS.PropertyType, maxAgeInMinutes?: number, storage?: StorageType, domain?: string, env?: StorageEnv): WalkerOS.PropertyType;
|
|
140
144
|
|
|
141
145
|
type TypesGeneric = Source$1.TypesGeneric;
|
|
142
146
|
interface Source<T extends TypesGeneric = Source$1.Types> extends Source$1.Instance<T> {
|
|
@@ -275,4 +279,4 @@ declare namespace collector {
|
|
|
275
279
|
export type { collector_Collector as Collector, collector_Config as Config, collector_Destinations as Destinations, collector_InitConfig as InitConfig, collector_Scope as Scope, collector_State as State };
|
|
276
280
|
}
|
|
277
281
|
|
|
278
|
-
export { destination as DestinationWeb, elb as Elb, type SendWebOptions, type SendWebOptionsFetch, type SendWebReturn, type SendWebTransport, source as SourceWeb, type StorageValue, walker as Walker, collector as WebCollector, elb$1 as elb, getAttribute, getEnv, getHashWeb, getLanguage, getScreenSize, getTimezone, isVisible, parseInlineConfig, sendWeb, sendWebAsBeacon, sendWebAsFetch, sendWebAsXhr, splitAttribute, splitKeyVal, storageDelete, storageRead, storageWrite };
|
|
282
|
+
export { destination as DestinationWeb, elb as Elb, type SendWebOptions, type SendWebOptionsFetch, type SendWebReturn, type SendWebTransport, source as SourceWeb, type StorageEnv, type StorageValue, walker as Walker, collector as WebCollector, elb$1 as elb, getAttribute, getEnv, getHashWeb, getLanguage, getScreenSize, getTimezone, isVisible, parseInlineConfig, sendWeb, sendWebAsBeacon, sendWebAsFetch, sendWebAsXhr, splitAttribute, splitKeyVal, storageDelete, storageRead, storageWrite };
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var e,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,o=Object.getOwnPropertyNames,r=Object.prototype.hasOwnProperty,
|
|
1
|
+
"use strict";var e,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,o=Object.getOwnPropertyNames,r=Object.prototype.hasOwnProperty,i={};((e,n)=>{for(var o in n)t(e,o,{get:n[o],enumerable:!0})})(i,{DestinationWeb:()=>H,Elb:()=>A,SourceWeb:()=>I,Walker:()=>T,WebCollector:()=>D,elb:()=>g,getAttribute:()=>a,getEnv:()=>m,getHashWeb:()=>p,getLanguage:()=>l,getScreenSize:()=>w,getTimezone:()=>f,isVisible:()=>b,parseInlineConfig:()=>d,sendWeb:()=>S,sendWebAsBeacon:()=>v,sendWebAsFetch:()=>C,sendWebAsXhr:()=>k,splitAttribute:()=>c,splitKeyVal:()=>u,storageDelete:()=>U,storageRead:()=>W,storageWrite:()=>O}),module.exports=(e=i,((e,i,s,a)=>{if(i&&"object"==typeof i||"function"==typeof i)for(let c of o(i))r.call(e,c)||c===s||t(e,c,{get:()=>i[c],enumerable:!(a=n(i,c))||a.enumerable});return e})(t({},"__esModule",{value:!0}),e));var s=require("@walkeros/core");function a(e,t){return(e.getAttribute(t)||"").trim()}function c(e,t=";"){if(!e)return[];const n=new RegExp(`(?:[^${t}']+|'[^']*')+`,"ig");return e.match(n)||[]}function u(e){const[t,n]=e.split(/:(.+)/,2);return[(0,s.trim)(t||""),(0,s.trim)(n||"")]}function d(e){const t={};return c(e).forEach(e=>{const[n,o]=u(e);n&&("true"===o?t[n]=!0:"false"===o?t[n]=!1:o&&/^\d+$/.test(o)?t[n]=parseInt(o,10):o&&/^\d+\.\d+$/.test(o)?t[n]=parseFloat(o):t[n]=o||!0)}),t}function l(e){return e.language}function f(){return Intl.DateTimeFormat().resolvedOptions().timeZone}function w(e){return`${e.screen.width}x${e.screen.height}`}var g=function(){const e=window;(e.elbLayer=e.elbLayer||[]).push(arguments)};function m(e){return{window:"undefined"!=typeof window?window:globalThis.window,document:"undefined"!=typeof document?document:globalThis.document,...e}}var h=require("@walkeros/core");async function p(e,t){return(await async function(e){const t=(0,h.isDefined)(window)&&window.crypto?window.crypto:void 0;if(!t||!t.subtle||!TextEncoder)return;const n=(new TextEncoder).encode(e),o=await t.subtle.digest("SHA-256",n);return Array.from(new Uint8Array(o)).map(e=>e.toString(16).padStart(2,"0")).join("")}(e)||"").slice(0,t)}function b(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 o=window.innerHeight,r=e.getBoundingClientRect(),i=r.height,s=r.y,a=s+i,c={x:r.x+e.offsetWidth/2,y:r.y+e.offsetHeight/2};if(i<=o){if(e.offsetWidth+r.width===0||e.offsetHeight+r.height===0)return!1;if(c.x<0)return!1;if(c.x>(document.documentElement.clientWidth||window.innerWidth))return!1;if(c.y<0)return!1;if(c.y>(document.documentElement.clientHeight||window.innerHeight))return!1;n=document.elementFromPoint(c.x,c.y)}else{const e=o/2;if(s<0&&a<e)return!1;if(a>o&&s>e)return!1;n=document.elementFromPoint(c.x,o/2)}if(n)do{if(n===e)return!0}while(n=n.parentElement);return!1}var y=require("@walkeros/core");function S(e,t,n={transport:"fetch"}){switch(n.transport||"fetch"){case"beacon":return v(e,t);case"xhr":return k(e,t,n);default:return C(e,t,n)}}async function C(e,t,n={}){const o=(0,y.getHeaders)(n.headers),r=(0,y.transformData)(t);return(0,y.tryCatchAsync)(async()=>{const t=await fetch(e,{method:n.method||"POST",headers:o,keepalive:!0,credentials:n.credentials||"same-origin",mode:n.noCors?"no-cors":"cors",body:r}),i=n.noCors?"":await t.text();return{ok:t.ok,data:i,error:t.ok?void 0:t.statusText}},e=>({ok:!1,error:e.message}))()}function v(e,t){const n=(0,y.transformData)(t),o=navigator.sendBeacon(e,n);return{ok:o,error:o?void 0:"Failed to send beacon"}}function k(e,t,n={}){const o=(0,y.getHeaders)(n.headers),r=n.method||"POST",i=(0,y.transformData)(t);return(0,y.tryCatch)(()=>{const t=new XMLHttpRequest;t.open(r,e,!1);for(const e in o)t.setRequestHeader(e,o[e]);t.send(i);const n=t.status>=200&&t.status<300;return{ok:n,data:(0,y.tryCatch)(JSON.parse,()=>t.response)(t.response),error:n?void 0:`${t.status} ${t.statusText}`}},e=>({ok:!1,error:e.message}))()}var x=require("@walkeros/core");function U(e,t=x.Const.Utils.Storage.Session,n){switch(t){case x.Const.Utils.Storage.Cookie:O(e,"",0,t,void 0,n);break;case x.Const.Utils.Storage.Local:(n?.window??window).localStorage.removeItem(e);break;case x.Const.Utils.Storage.Session:(n?.window??window).sessionStorage.removeItem(e)}}function W(e,t=x.Const.Utils.Storage.Session,n){function o(e){try{return JSON.parse(e||"")}catch(t){let n=1,o="";return e&&(n=0,o=e),{e:n,v:o}}}let r,i;switch(t){case x.Const.Utils.Storage.Cookie:r=decodeURIComponent((n?.document??document).cookie.split("; ").find(t=>t.startsWith(e+"="))?.split("=")[1]||"");break;case x.Const.Utils.Storage.Local:i=o((n?.window??window).localStorage.getItem(e));break;case x.Const.Utils.Storage.Session:i=o((n?.window??window).sessionStorage.getItem(e))}return i&&(r=i.v,0!=i.e&&i.e<Date.now()&&(U(e,t,n),r="")),(0,x.castValue)(r||"")}function O(e,t,n=30,o=x.Const.Utils.Storage.Session,r,i){const s={e:Date.now()+6e4*n,v:String(t)},a=JSON.stringify(s);switch(o){case x.Const.Utils.Storage.Cookie:{t="object"==typeof t?JSON.stringify(t):t;let o=`${e}=${encodeURIComponent(t)}; max-age=${60*n}; path=/; SameSite=Lax; secure`;r&&(o+="; domain="+r),(i?.document??document).cookie=o;break}case x.Const.Utils.Storage.Local:(i?.window??window).localStorage.setItem(e,a);break;case x.Const.Utils.Storage.Session:(i?.window??window).sessionStorage.setItem(e,a)}return W(e,o,i)}var H={},I={},A={},D={},T={};//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/attributes.ts","../src/browser.ts","../src/elb.ts","../src/environment.ts","../src/getHashWeb.ts","../src/isVisible.ts","../src/sendWeb.ts","../src/storage.ts","../src/types/destination.ts","../src/types/source.ts","../src/types/elb.ts","../src/types/collector.ts","../src/types/walker.ts"],"sourcesContent":["export * from './attributes';\nexport * from './browser';\nexport * from './elb';\nexport * from './environment';\nexport * from './getHashWeb';\nexport * from './isVisible';\nexport * from './sendWeb';\nexport * from './storage';\n\n// Export web-specific types\nexport * from './types';\n","import { trim } from '@walkeros/core';\n\n/**\n * Get attribute value from element\n * @param element - DOM element\n * @param name - Attribute name\n * @returns Trimmed attribute value or empty string\n */\nexport function getAttribute(element: Element, name: string): string {\n return (element.getAttribute(name) || '').trim();\n}\n\n/**\n * Split attribute string by separator (semicolon by default)\n * Handles quoted values containing the separator\n * @param str - String to split\n * @param separator - Separator character (default: ';')\n * @returns Array of attribute strings\n */\nexport function splitAttribute(str: string, separator = ';'): string[] {\n if (!str) return [];\n const reg = new RegExp(`(?:[^${separator}']+|'[^']*')+`, 'ig');\n return str.match(reg) || [];\n}\n\n/**\n * Split key-value pair by first colon\n * @param str - String in format \"key:value\"\n * @returns Tuple of [key, value]\n */\nexport function splitKeyVal(str: string): [string, string] {\n const [key, value] = str.split(/:(.+)/, 2);\n return [trim(key || ''), trim(value || '')];\n}\n\n/**\n * Parse inline configuration string into object\n * Supports type conversion for boolean and numeric values\n * @param str - Configuration string (e.g., \"elb:track;run:false;port:3000\")\n * @returns Parsed configuration object\n */\nexport function parseInlineConfig(str: string): Record<string, unknown> {\n const config: Record<string, unknown> = {};\n\n splitAttribute(str).forEach((pair) => {\n const [key, value] = splitKeyVal(pair);\n if (key) {\n // Type conversion\n if (value === 'true') {\n config[key] = true;\n } else if (value === 'false') {\n config[key] = false;\n } else if (value && /^\\d+$/.test(value)) {\n config[key] = parseInt(value, 10);\n } else if (value && /^\\d+\\.\\d+$/.test(value)) {\n config[key] = parseFloat(value);\n } else if (value) {\n config[key] = value;\n } else {\n // Key without value defaults to true\n config[key] = true;\n }\n }\n });\n\n return config;\n}\n","export function getLanguage(navigatorRef: Navigator): string | undefined {\n return navigatorRef.language;\n}\n\nexport function getTimezone(): string | undefined {\n return Intl.DateTimeFormat().resolvedOptions().timeZone;\n}\n\nexport function getScreenSize(windowRef: Window): string {\n return `${windowRef.screen.width}x${windowRef.screen.height}`;\n}\n","import type { Elb } from '@walkeros/core';\n\nexport const elb: Elb.Fn<void> = function () {\n const w = window as unknown as Record<string, unknown[]>;\n (w.elbLayer = w.elbLayer || []).push(arguments);\n};\n","import type { Env } from './types/destination';\n\n/**\n * Helper function to get environment globals with fallbacks\n *\n * Returns window and document by default, with optional environment overrides.\n *\n * @param env - Optional environment overrides\n * @returns Env with window/document defaults and any provided overrides\n */\nexport function getEnv(env?: Env) {\n return {\n window: typeof window !== 'undefined' ? window : globalThis.window,\n document: typeof document !== 'undefined' ? document : globalThis.document,\n ...env,\n };\n}\n","import { isDefined } from '@walkeros/core';\n\nasync function sha256(message: string): Promise<string | undefined> {\n const crypto: Crypto | undefined =\n isDefined(window) && window.crypto ? window.crypto : undefined;\n\n // Crypto API not available\n if (!crypto || !crypto.subtle || !TextEncoder) return;\n\n const msgBuffer = new TextEncoder().encode(message);\n const hashBuffer = await crypto.subtle.digest('SHA-256', msgBuffer);\n const hashArray = Array.from(new Uint8Array(hashBuffer));\n const hashHex = hashArray\n .map((b) => b.toString(16).padStart(2, '0'))\n .join('');\n return hashHex;\n}\n\nexport async function getHashWeb(\n str: string,\n length?: number,\n): Promise<string> {\n return ((await sha256(str)) || '').slice(0, length);\n}\n","export function isVisible(element: HTMLElement): boolean {\n // Check for hiding styles\n const style = getComputedStyle(element);\n if (style.display === 'none') return false;\n if (style.visibility !== 'visible') return false;\n if (style.opacity && Number(style.opacity) < 0.1) return false;\n\n // Window positions\n let pointContainer;\n const windowHeight = window.innerHeight; // Height of the viewport\n\n // Element positions\n const elemRectRel = element.getBoundingClientRect(); // Get the elements relative to the viewport\n const elementHeight = elemRectRel.height; // Height of the element\n const elementTopRel = elemRectRel.y; // Relative distance from window top to element top\n const elementBottomRel = elementTopRel + elementHeight; // Relative distance from window to to element bottom\n const elemCenterRel = {\n // Relative position on viewport of the elements center\n x: elemRectRel.x + element.offsetWidth / 2,\n y: elemRectRel.y + element.offsetHeight / 2,\n };\n\n // Differentiate between small and large elements\n if (elementHeight <= windowHeight) {\n // Smaller than the viewport\n\n // Must have a width and height\n if (\n element.offsetWidth + elemRectRel.width === 0 ||\n element.offsetHeight + elemRectRel.height === 0\n )\n return false;\n\n if (elemCenterRel.x < 0) return false;\n if (\n elemCenterRel.x >\n (document.documentElement.clientWidth || window.innerWidth)\n )\n return false;\n if (elemCenterRel.y < 0) return false;\n if (\n elemCenterRel.y >\n (document.documentElement.clientHeight || window.innerHeight)\n )\n return false;\n\n // Select the element that is at the center of the target\n pointContainer = document.elementFromPoint(\n elemCenterRel.x,\n elemCenterRel.y,\n );\n } else {\n // Bigger than the viewport\n\n // that are considered visible if they fill half of the screen\n const viewportCenter = windowHeight / 2;\n\n // Check if upper part is above the viewports center\n if (elementTopRel < 0 && elementBottomRel < viewportCenter) return false;\n\n // Check if lower part is below the viewports center\n if (elementBottomRel > windowHeight && elementTopRel > viewportCenter)\n return false;\n\n // Select the element that is in the middle of the screen\n pointContainer = document.elementFromPoint(\n elemCenterRel.x,\n windowHeight / 2,\n );\n }\n\n // Check for potential overlays\n if (pointContainer) {\n do {\n if (pointContainer === element) return true; // should be visible\n } while ((pointContainer = pointContainer.parentElement));\n }\n\n return false;\n}\n","import type { SendDataValue, SendHeaders, SendResponse } from '@walkeros/core';\nimport {\n getHeaders,\n transformData,\n tryCatch,\n tryCatchAsync,\n} from '@walkeros/core';\n\nexport type SendWebTransport = 'fetch' | 'beacon' | 'xhr';\n\nexport interface SendWebOptions {\n headers?: SendHeaders;\n transport?: SendWebTransport;\n method?: string;\n}\n\nexport interface SendWebOptionsFetch extends SendWebOptions {\n credentials?: 'omit' | 'same-origin' | 'include'; // Add credentials option\n noCors?: boolean; // Add noCors option for fetch transport\n}\n\ntype SendWebOptionsDynamic<T extends SendWebTransport> = T extends 'fetch'\n ? SendWebOptionsFetch\n : SendWebOptions;\n\nexport type SendWebReturn<T extends SendWebTransport> = T extends 'fetch'\n ? Promise<SendResponse>\n : SendResponse;\n\nexport function sendWeb<T extends SendWebTransport>(\n url: string,\n data?: SendDataValue,\n options: SendWebOptionsDynamic<T> & { transport?: T } = {\n transport: 'fetch' as T,\n },\n): SendWebReturn<T> {\n const transport = options.transport || 'fetch';\n\n switch (transport) {\n case 'beacon':\n return sendWebAsBeacon(url, data) as SendWebReturn<T>;\n case 'xhr':\n return sendWebAsXhr(url, data, options) as SendWebReturn<T>;\n case 'fetch':\n default:\n return sendWebAsFetch(url, data, options) as SendWebReturn<T>;\n }\n}\n\nexport async function sendWebAsFetch(\n url: string,\n data?: SendDataValue,\n options: SendWebOptionsFetch = {},\n): Promise<SendResponse> {\n const headers = getHeaders(options.headers);\n const body = transformData(data);\n\n return tryCatchAsync(\n async () => {\n const response = await fetch(url, {\n method: options.method || 'POST',\n headers,\n keepalive: true,\n credentials: options.credentials || 'same-origin',\n mode: options.noCors ? 'no-cors' : 'cors',\n body,\n });\n\n const responseData = options.noCors ? '' : await response.text();\n\n return {\n ok: response.ok,\n data: responseData,\n error: response.ok ? undefined : response.statusText,\n };\n },\n (error) => {\n return {\n ok: false,\n error: (error as Error).message,\n };\n },\n )();\n}\n\nexport function sendWebAsBeacon(\n url: string,\n data?: SendDataValue,\n): SendResponse {\n const body = transformData(data);\n const ok = navigator.sendBeacon(url, body);\n\n return {\n ok,\n error: ok ? undefined : 'Failed to send beacon',\n };\n}\n\nexport function sendWebAsXhr(\n url: string,\n data?: SendDataValue,\n options: SendWebOptions = {},\n): SendResponse {\n const headers = getHeaders(options.headers);\n const method = options.method || 'POST';\n const body = transformData(data);\n\n return tryCatch(\n () => {\n const xhr = new XMLHttpRequest();\n xhr.open(method, url, false); // Synchronous request\n for (const header in headers) {\n xhr.setRequestHeader(header, headers[header]);\n }\n xhr.send(body);\n\n const ok = xhr.status >= 200 && xhr.status < 300;\n\n const parsedData = tryCatch(JSON.parse, () => xhr.response)(xhr.response);\n\n return {\n ok,\n data: parsedData,\n error: ok ? undefined : `${xhr.status} ${xhr.statusText}`,\n };\n },\n (error) => {\n return {\n ok: false,\n error: (error as Error).message,\n };\n },\n )();\n}\n","import type { WalkerOS } from '@walkeros/core';\nimport type { StorageType } from '@walkeros/core';\nimport { castValue, Const } from '@walkeros/core';\n\nexport interface StorageValue {\n e: number; // Expiration timestamp\n v: string; // Value\n}\n\nexport function storageDelete(\n key: string,\n storage: StorageType = Const.Utils.Storage.Session,\n) {\n switch (storage) {\n case Const.Utils.Storage.Cookie:\n storageWrite(key, '', 0, storage);\n break;\n case Const.Utils.Storage.Local:\n window.localStorage.removeItem(key);\n break;\n case Const.Utils.Storage.Session:\n window.sessionStorage.removeItem(key);\n break;\n }\n}\n\nexport function storageRead(\n key: string,\n storage: StorageType = Const.Utils.Storage.Session,\n): WalkerOS.PropertyType {\n // Helper function for local and session storage to support expiration\n function parseItem(string: string | null): StorageValue {\n try {\n return JSON.parse(string || '');\n } catch (err) {\n let e = 1,\n v = '';\n\n // Remove expiration date\n if (string) {\n e = 0;\n v = string;\n }\n\n return { e, v };\n }\n }\n let value, item;\n\n switch (storage) {\n case Const.Utils.Storage.Cookie:\n value = decodeURIComponent(\n document.cookie\n .split('; ')\n .find((row) => row.startsWith(key + '='))\n ?.split('=')[1] || '',\n );\n break;\n case Const.Utils.Storage.Local:\n item = parseItem(window.localStorage.getItem(key));\n break;\n case Const.Utils.Storage.Session:\n item = parseItem(window.sessionStorage.getItem(key));\n break;\n }\n\n // Check if item is expired\n if (item) {\n value = item.v;\n\n if (item.e != 0 && item.e < Date.now()) {\n storageDelete(key, storage); // Remove item\n value = ''; // Conceal the outdated value\n }\n }\n\n return castValue(value || '');\n}\n\nexport function storageWrite(\n key: string,\n value: WalkerOS.PropertyType,\n maxAgeInMinutes = 30,\n storage: StorageType = Const.Utils.Storage.Session,\n domain?: string,\n): WalkerOS.PropertyType {\n const e = Date.now() + 1000 * 60 * maxAgeInMinutes;\n const item: StorageValue = { e, v: String(value) };\n const stringifiedItem = JSON.stringify(item);\n\n switch (storage) {\n case Const.Utils.Storage.Cookie: {\n value = typeof value === 'object' ? JSON.stringify(value) : value;\n let cookie = `${key}=${encodeURIComponent(value)}; max-age=${\n maxAgeInMinutes * 60\n }; path=/; SameSite=Lax; secure`;\n\n if (domain) cookie += '; domain=' + domain;\n\n document.cookie = cookie;\n break;\n }\n case Const.Utils.Storage.Local:\n window.localStorage.setItem(key, stringifiedItem);\n break;\n case Const.Utils.Storage.Session:\n window.sessionStorage.setItem(key, stringifiedItem);\n break;\n }\n\n return storageRead(key, storage);\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { Destination as WalkerOSDestination } from '@walkeros/core';\n\nexport type TypesGeneric = WalkerOSDestination.TypesGeneric;\n\nexport interface Destination<T extends TypesGeneric = WalkerOSDestination.Types>\n extends WalkerOSDestination.Instance<T> {}\n\nexport type Init = WalkerOSDestination.Init;\n\nexport type Config<T extends TypesGeneric = WalkerOSDestination.Types> =\n WalkerOSDestination.Config<T>;\n\nexport type PartialConfig<T extends TypesGeneric = WalkerOSDestination.Types> =\n WalkerOSDestination.PartialConfig<T>;\n\nexport type InitFn<T extends TypesGeneric = WalkerOSDestination.Types> =\n WalkerOSDestination.InitFn<T>;\n\nexport type PushFn<T extends TypesGeneric = WalkerOSDestination.Types> =\n WalkerOSDestination.PushFn<T>;\n\nexport type PushEvent<Mapping = unknown> =\n WalkerOSDestination.PushEvent<Mapping>;\n\nexport type PushEvents<Mapping = unknown> =\n WalkerOSDestination.PushEvents<Mapping>;\n\n/**\n * Web-specific environment requirements interface\n *\n * Extends the core Env interface with web-specific\n * globals like window and document for browser destinations.\n */\nexport interface Env extends WalkerOSDestination.BaseEnv {\n /**\n * Properties to be added to the global `window` object\n *\n * Used by web destinations that expect browser-specific\n * global functions like analytics APIs.\n *\n * @example\n * ```typescript\n * window: {\n * gtag: () => {},\n * fbq: () => {},\n * dataLayer: []\n * }\n * ```\n */\n window?: Record<string, unknown>;\n\n /**\n * Properties to be added to the global `document` object\n *\n * Used by destinations that need DOM manipulation capabilities\n * for script loading or element creation.\n *\n * @example\n * ```typescript\n * document: {\n * createElement: () => ({ src: '', async: false }),\n * head: { appendChild: () => {} }\n * }\n * ```\n */\n document?: Record<string, unknown>;\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { Collector, WalkerOS, Source as CoreSource } from '@walkeros/core';\n\nexport type TypesGeneric = CoreSource.TypesGeneric;\n\nexport interface Source<T extends TypesGeneric = CoreSource.Types>\n extends CoreSource.Instance<T> {\n settings?: CoreSource.Settings<T>;\n mapping?: CoreSource.Mapping<T>;\n}\n\nexport type Init = Partial<Omit<Source, 'init'>> & Pick<Source, 'type'>;\n\nexport type Config<T extends TypesGeneric = CoreSource.Types> =\n CoreSource.Instance<T> & {\n settings: CoreSource.Settings<T>;\n mapping?: CoreSource.Mapping<T>;\n };\n\nexport type PartialConfig<T extends TypesGeneric = CoreSource.Types> = Partial<\n Config<T>\n>;\n\nexport type InitFn<T extends TypesGeneric = CoreSource.Types> = (\n collector: Collector.Instance,\n config: Config<T>,\n) => void | Promise<void>;\n","import type { Elb } from '@walkeros/core';\n\n// Simple re-exports from core\nexport type PushResult = Elb.PushResult;\nexport type Layer = Elb.Layer;\n","import type {\n Collector as CoreCollector,\n Elb,\n Hooks,\n WalkerOS,\n Destination as WalkerOSDestination,\n On,\n} from '@walkeros/core';\nimport type { Destination, Config as DestConfig } from './destination';\nimport type { Layer } from './elb';\nimport type { Events, Trigger } from './walker';\n\ndeclare global {\n interface Window {\n elbwalker: Collector;\n walkerjs: CoreCollector.Instance;\n elbLayer: Layer;\n dataLayer: WalkerOS.Events | unknown | unknown[];\n elb: Elb.Fn<Promise<Elb.PushResult>>;\n }\n}\n\nexport interface Collector extends Omit<CoreCollector.Instance, 'config'> {\n config: Config & CoreCollector.Config;\n destinations: Destinations;\n push: Elb.Fn<Promise<Elb.PushResult>>;\n getAllEvents: (scope: Element, prefix: string) => Events;\n getEvents: (target: Element, trigger: Trigger, prefix: string) => Events;\n getGlobals: () => WalkerOS.Properties;\n _visibilityState?: {\n observer: IntersectionObserver | undefined;\n timers: WeakMap<HTMLElement, number>;\n duration: number;\n elementConfigs?: WeakMap<\n HTMLElement,\n { multiple: boolean; blocked: boolean }\n >;\n };\n}\n\nexport interface State {\n config: Config;\n destinations: Destinations;\n}\n\nexport interface Config {\n dataLayer: boolean;\n dataLayerConfig: DestConfig;\n elbLayer: Layer;\n listeners: boolean;\n pageview: boolean;\n prefix: string;\n run: boolean;\n scope: Scope;\n elb?: string;\n name?: string;\n}\n\nexport interface InitConfig extends Partial<Config> {\n consent?: WalkerOS.Consent;\n custom?: WalkerOS.Properties;\n destinations?: WalkerOSDestination.InitDestinations;\n hooks?: Hooks.Functions;\n on?: On.OnConfig;\n tagging?: number;\n user?: WalkerOS.User;\n}\n\nexport interface Destinations {\n [name: string]: Destination;\n}\n\nexport type Scope = Element | Document;\n","import type { WalkerOS } from '@walkeros/core';\n\nexport type Events = Event[];\n\nexport interface Event {\n entity: string;\n action: string;\n data?: WalkerOS.Properties;\n context?: WalkerOS.OrderedProperties;\n trigger?: Trigger;\n nested: WalkerOS.Entities;\n}\n\nexport type KeyVal = [string, string];\n\nexport type Attributes = Array<string>;\n\nexport type Trigger =\n | 'click'\n | 'custom'\n | 'hover'\n | 'load'\n | 'pulse'\n | 'scroll'\n | 'submit'\n | 'visible'\n | 'visibles'\n | 'wait'\n | string;\n\nexport interface Filter {\n [name: string]: boolean;\n}\n\nexport interface TriggersActionGroups {\n [trigger: string]: TriggerActions;\n}\n\nexport type TriggerActions = Array<TriggerAction>;\n\ninterface TriggerAction {\n trigger: string;\n triggerParams?: string;\n action: string;\n actionParams?: string;\n}\n\nexport type ScrollElements = Array<[HTMLElement, number]>;\n"],"mappings":"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","names":["import_core","import_core","import_core"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/attributes.ts","../src/browser.ts","../src/elb.ts","../src/environment.ts","../src/getHashWeb.ts","../src/isVisible.ts","../src/sendWeb.ts","../src/storage.ts","../src/types/destination.ts","../src/types/source.ts","../src/types/elb.ts","../src/types/collector.ts","../src/types/walker.ts"],"sourcesContent":["export * from './attributes';\nexport * from './browser';\nexport * from './elb';\nexport * from './environment';\nexport * from './getHashWeb';\nexport * from './isVisible';\nexport * from './sendWeb';\nexport * from './storage';\n\n// Export web-specific types\nexport * from './types';\n","import { trim } from '@walkeros/core';\n\n/**\n * Get attribute value from element\n * @param element - DOM element\n * @param name - Attribute name\n * @returns Trimmed attribute value or empty string\n */\nexport function getAttribute(element: Element, name: string): string {\n return (element.getAttribute(name) || '').trim();\n}\n\n/**\n * Split attribute string by separator (semicolon by default)\n * Handles quoted values containing the separator\n * @param str - String to split\n * @param separator - Separator character (default: ';')\n * @returns Array of attribute strings\n */\nexport function splitAttribute(str: string, separator = ';'): string[] {\n if (!str) return [];\n const reg = new RegExp(`(?:[^${separator}']+|'[^']*')+`, 'ig');\n return str.match(reg) || [];\n}\n\n/**\n * Split key-value pair by first colon\n * @param str - String in format \"key:value\"\n * @returns Tuple of [key, value]\n */\nexport function splitKeyVal(str: string): [string, string] {\n const [key, value] = str.split(/:(.+)/, 2);\n return [trim(key || ''), trim(value || '')];\n}\n\n/**\n * Parse inline configuration string into object\n * Supports type conversion for boolean and numeric values\n * @param str - Configuration string (e.g., \"elb:track;run:false;port:3000\")\n * @returns Parsed configuration object\n */\nexport function parseInlineConfig(str: string): Record<string, unknown> {\n const config: Record<string, unknown> = {};\n\n splitAttribute(str).forEach((pair) => {\n const [key, value] = splitKeyVal(pair);\n if (key) {\n // Type conversion\n if (value === 'true') {\n config[key] = true;\n } else if (value === 'false') {\n config[key] = false;\n } else if (value && /^\\d+$/.test(value)) {\n config[key] = parseInt(value, 10);\n } else if (value && /^\\d+\\.\\d+$/.test(value)) {\n config[key] = parseFloat(value);\n } else if (value) {\n config[key] = value;\n } else {\n // Key without value defaults to true\n config[key] = true;\n }\n }\n });\n\n return config;\n}\n","export function getLanguage(navigatorRef: Navigator): string | undefined {\n return navigatorRef.language;\n}\n\nexport function getTimezone(): string | undefined {\n return Intl.DateTimeFormat().resolvedOptions().timeZone;\n}\n\nexport function getScreenSize(windowRef: Window): string {\n return `${windowRef.screen.width}x${windowRef.screen.height}`;\n}\n","import type { Elb } from '@walkeros/core';\n\nexport const elb: Elb.Fn<void> = function () {\n const w = window as unknown as Record<string, unknown[]>;\n (w.elbLayer = w.elbLayer || []).push(arguments);\n};\n","import type { Env } from './types/destination';\n\n/**\n * Helper function to get environment globals with fallbacks\n *\n * Returns window and document by default, with optional environment overrides.\n *\n * @param env - Optional environment overrides\n * @returns Env with window/document defaults and any provided overrides\n */\nexport function getEnv(env?: Env) {\n return {\n window: typeof window !== 'undefined' ? window : globalThis.window,\n document: typeof document !== 'undefined' ? document : globalThis.document,\n ...env,\n };\n}\n","import { isDefined } from '@walkeros/core';\n\nasync function sha256(message: string): Promise<string | undefined> {\n const crypto: Crypto | undefined =\n isDefined(window) && window.crypto ? window.crypto : undefined;\n\n // Crypto API not available\n if (!crypto || !crypto.subtle || !TextEncoder) return;\n\n const msgBuffer = new TextEncoder().encode(message);\n const hashBuffer = await crypto.subtle.digest('SHA-256', msgBuffer);\n const hashArray = Array.from(new Uint8Array(hashBuffer));\n const hashHex = hashArray\n .map((b) => b.toString(16).padStart(2, '0'))\n .join('');\n return hashHex;\n}\n\nexport async function getHashWeb(\n str: string,\n length?: number,\n): Promise<string> {\n return ((await sha256(str)) || '').slice(0, length);\n}\n","export function isVisible(element: HTMLElement): boolean {\n // Check for hiding styles\n const style = getComputedStyle(element);\n if (style.display === 'none') return false;\n if (style.visibility !== 'visible') return false;\n if (style.opacity && Number(style.opacity) < 0.1) return false;\n\n // Window positions\n let pointContainer;\n const windowHeight = window.innerHeight; // Height of the viewport\n\n // Element positions\n const elemRectRel = element.getBoundingClientRect(); // Get the elements relative to the viewport\n const elementHeight = elemRectRel.height; // Height of the element\n const elementTopRel = elemRectRel.y; // Relative distance from window top to element top\n const elementBottomRel = elementTopRel + elementHeight; // Relative distance from window to to element bottom\n const elemCenterRel = {\n // Relative position on viewport of the elements center\n x: elemRectRel.x + element.offsetWidth / 2,\n y: elemRectRel.y + element.offsetHeight / 2,\n };\n\n // Differentiate between small and large elements\n if (elementHeight <= windowHeight) {\n // Smaller than the viewport\n\n // Must have a width and height\n if (\n element.offsetWidth + elemRectRel.width === 0 ||\n element.offsetHeight + elemRectRel.height === 0\n )\n return false;\n\n if (elemCenterRel.x < 0) return false;\n if (\n elemCenterRel.x >\n (document.documentElement.clientWidth || window.innerWidth)\n )\n return false;\n if (elemCenterRel.y < 0) return false;\n if (\n elemCenterRel.y >\n (document.documentElement.clientHeight || window.innerHeight)\n )\n return false;\n\n // Select the element that is at the center of the target\n pointContainer = document.elementFromPoint(\n elemCenterRel.x,\n elemCenterRel.y,\n );\n } else {\n // Bigger than the viewport\n\n // that are considered visible if they fill half of the screen\n const viewportCenter = windowHeight / 2;\n\n // Check if upper part is above the viewports center\n if (elementTopRel < 0 && elementBottomRel < viewportCenter) return false;\n\n // Check if lower part is below the viewports center\n if (elementBottomRel > windowHeight && elementTopRel > viewportCenter)\n return false;\n\n // Select the element that is in the middle of the screen\n pointContainer = document.elementFromPoint(\n elemCenterRel.x,\n windowHeight / 2,\n );\n }\n\n // Check for potential overlays\n if (pointContainer) {\n do {\n if (pointContainer === element) return true; // should be visible\n } while ((pointContainer = pointContainer.parentElement));\n }\n\n return false;\n}\n","import type { SendDataValue, SendHeaders, SendResponse } from '@walkeros/core';\nimport {\n getHeaders,\n transformData,\n tryCatch,\n tryCatchAsync,\n} from '@walkeros/core';\n\nexport type SendWebTransport = 'fetch' | 'beacon' | 'xhr';\n\nexport interface SendWebOptions {\n headers?: SendHeaders;\n transport?: SendWebTransport;\n method?: string;\n}\n\nexport interface SendWebOptionsFetch extends SendWebOptions {\n credentials?: 'omit' | 'same-origin' | 'include'; // Add credentials option\n noCors?: boolean; // Add noCors option for fetch transport\n}\n\ntype SendWebOptionsDynamic<T extends SendWebTransport> = T extends 'fetch'\n ? SendWebOptionsFetch\n : SendWebOptions;\n\nexport type SendWebReturn<T extends SendWebTransport> = T extends 'fetch'\n ? Promise<SendResponse>\n : SendResponse;\n\nexport function sendWeb<T extends SendWebTransport>(\n url: string,\n data?: SendDataValue,\n options: SendWebOptionsDynamic<T> & { transport?: T } = {\n transport: 'fetch' as T,\n },\n): SendWebReturn<T> {\n const transport = options.transport || 'fetch';\n\n switch (transport) {\n case 'beacon':\n return sendWebAsBeacon(url, data) as SendWebReturn<T>;\n case 'xhr':\n return sendWebAsXhr(url, data, options) as SendWebReturn<T>;\n case 'fetch':\n default:\n return sendWebAsFetch(url, data, options) as SendWebReturn<T>;\n }\n}\n\nexport async function sendWebAsFetch(\n url: string,\n data?: SendDataValue,\n options: SendWebOptionsFetch = {},\n): Promise<SendResponse> {\n const headers = getHeaders(options.headers);\n const body = transformData(data);\n\n return tryCatchAsync(\n async () => {\n const response = await fetch(url, {\n method: options.method || 'POST',\n headers,\n keepalive: true,\n credentials: options.credentials || 'same-origin',\n mode: options.noCors ? 'no-cors' : 'cors',\n body,\n });\n\n const responseData = options.noCors ? '' : await response.text();\n\n return {\n ok: response.ok,\n data: responseData,\n error: response.ok ? undefined : response.statusText,\n };\n },\n (error) => {\n return {\n ok: false,\n error: (error as Error).message,\n };\n },\n )();\n}\n\nexport function sendWebAsBeacon(\n url: string,\n data?: SendDataValue,\n): SendResponse {\n const body = transformData(data);\n const ok = navigator.sendBeacon(url, body);\n\n return {\n ok,\n error: ok ? undefined : 'Failed to send beacon',\n };\n}\n\nexport function sendWebAsXhr(\n url: string,\n data?: SendDataValue,\n options: SendWebOptions = {},\n): SendResponse {\n const headers = getHeaders(options.headers);\n const method = options.method || 'POST';\n const body = transformData(data);\n\n return tryCatch(\n () => {\n const xhr = new XMLHttpRequest();\n xhr.open(method, url, false); // Synchronous request\n for (const header in headers) {\n xhr.setRequestHeader(header, headers[header]);\n }\n xhr.send(body);\n\n const ok = xhr.status >= 200 && xhr.status < 300;\n\n const parsedData = tryCatch(JSON.parse, () => xhr.response)(xhr.response);\n\n return {\n ok,\n data: parsedData,\n error: ok ? undefined : `${xhr.status} ${xhr.statusText}`,\n };\n },\n (error) => {\n return {\n ok: false,\n error: (error as Error).message,\n };\n },\n )();\n}\n","import type { WalkerOS } from '@walkeros/core';\nimport type { StorageType } from '@walkeros/core';\nimport { castValue, Const } from '@walkeros/core';\n\nexport interface StorageValue {\n e: number; // Expiration timestamp\n v: string; // Value\n}\n\nexport interface StorageEnv {\n window?: Window & typeof globalThis;\n document?: Document;\n}\n\nexport function storageDelete(\n key: string,\n storage: StorageType = Const.Utils.Storage.Session,\n env?: StorageEnv,\n) {\n switch (storage) {\n case Const.Utils.Storage.Cookie:\n storageWrite(key, '', 0, storage, undefined, env);\n break;\n case Const.Utils.Storage.Local:\n (env?.window ?? window).localStorage.removeItem(key);\n break;\n case Const.Utils.Storage.Session:\n (env?.window ?? window).sessionStorage.removeItem(key);\n break;\n }\n}\n\nexport function storageRead(\n key: string,\n storage: StorageType = Const.Utils.Storage.Session,\n env?: StorageEnv,\n): WalkerOS.PropertyType {\n // Helper function for local and session storage to support expiration\n function parseItem(string: string | null): StorageValue {\n try {\n return JSON.parse(string || '');\n } catch (err) {\n let e = 1,\n v = '';\n\n // Remove expiration date\n if (string) {\n e = 0;\n v = string;\n }\n\n return { e, v };\n }\n }\n let value, item;\n\n switch (storage) {\n case Const.Utils.Storage.Cookie:\n value = decodeURIComponent(\n (env?.document ?? document).cookie\n .split('; ')\n .find((row) => row.startsWith(key + '='))\n ?.split('=')[1] || '',\n );\n break;\n case Const.Utils.Storage.Local:\n item = parseItem((env?.window ?? window).localStorage.getItem(key));\n break;\n case Const.Utils.Storage.Session:\n item = parseItem((env?.window ?? window).sessionStorage.getItem(key));\n break;\n }\n\n // Check if item is expired\n if (item) {\n value = item.v;\n\n if (item.e != 0 && item.e < Date.now()) {\n storageDelete(key, storage, env);\n value = ''; // Conceal the outdated value\n }\n }\n\n return castValue(value || '');\n}\n\nexport function storageWrite(\n key: string,\n value: WalkerOS.PropertyType,\n maxAgeInMinutes = 30,\n storage: StorageType = Const.Utils.Storage.Session,\n domain?: string,\n env?: StorageEnv,\n): WalkerOS.PropertyType {\n const e = Date.now() + 1000 * 60 * maxAgeInMinutes;\n const item: StorageValue = { e, v: String(value) };\n const stringifiedItem = JSON.stringify(item);\n\n switch (storage) {\n case Const.Utils.Storage.Cookie: {\n value = typeof value === 'object' ? JSON.stringify(value) : value;\n let cookie = `${key}=${encodeURIComponent(value)}; max-age=${\n maxAgeInMinutes * 60\n }; path=/; SameSite=Lax; secure`;\n\n if (domain) cookie += '; domain=' + domain;\n\n (env?.document ?? document).cookie = cookie;\n break;\n }\n case Const.Utils.Storage.Local:\n (env?.window ?? window).localStorage.setItem(key, stringifiedItem);\n break;\n case Const.Utils.Storage.Session:\n (env?.window ?? window).sessionStorage.setItem(key, stringifiedItem);\n break;\n }\n\n return storageRead(key, storage, env);\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { Destination as WalkerOSDestination } from '@walkeros/core';\n\nexport type TypesGeneric = WalkerOSDestination.TypesGeneric;\n\nexport interface Destination<T extends TypesGeneric = WalkerOSDestination.Types>\n extends WalkerOSDestination.Instance<T> {}\n\nexport type Init = WalkerOSDestination.Init;\n\nexport type Config<T extends TypesGeneric = WalkerOSDestination.Types> =\n WalkerOSDestination.Config<T>;\n\nexport type PartialConfig<T extends TypesGeneric = WalkerOSDestination.Types> =\n WalkerOSDestination.PartialConfig<T>;\n\nexport type InitFn<T extends TypesGeneric = WalkerOSDestination.Types> =\n WalkerOSDestination.InitFn<T>;\n\nexport type PushFn<T extends TypesGeneric = WalkerOSDestination.Types> =\n WalkerOSDestination.PushFn<T>;\n\nexport type PushEvent<Mapping = unknown> =\n WalkerOSDestination.PushEvent<Mapping>;\n\nexport type PushEvents<Mapping = unknown> =\n WalkerOSDestination.PushEvents<Mapping>;\n\n/**\n * Web-specific environment requirements interface\n *\n * Extends the core Env interface with web-specific\n * globals like window and document for browser destinations.\n */\nexport interface Env extends WalkerOSDestination.BaseEnv {\n /**\n * Properties to be added to the global `window` object\n *\n * Used by web destinations that expect browser-specific\n * global functions like analytics APIs.\n *\n * @example\n * ```typescript\n * window: {\n * gtag: () => {},\n * fbq: () => {},\n * dataLayer: []\n * }\n * ```\n */\n window?: Record<string, unknown>;\n\n /**\n * Properties to be added to the global `document` object\n *\n * Used by destinations that need DOM manipulation capabilities\n * for script loading or element creation.\n *\n * @example\n * ```typescript\n * document: {\n * createElement: () => ({ src: '', async: false }),\n * head: { appendChild: () => {} }\n * }\n * ```\n */\n document?: Record<string, unknown>;\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { Collector, WalkerOS, Source as CoreSource } from '@walkeros/core';\n\nexport type TypesGeneric = CoreSource.TypesGeneric;\n\nexport interface Source<T extends TypesGeneric = CoreSource.Types>\n extends CoreSource.Instance<T> {\n settings?: CoreSource.Settings<T>;\n mapping?: CoreSource.Mapping<T>;\n}\n\nexport type Init = Partial<Omit<Source, 'init'>> & Pick<Source, 'type'>;\n\nexport type Config<T extends TypesGeneric = CoreSource.Types> =\n CoreSource.Instance<T> & {\n settings: CoreSource.Settings<T>;\n mapping?: CoreSource.Mapping<T>;\n };\n\nexport type PartialConfig<T extends TypesGeneric = CoreSource.Types> = Partial<\n Config<T>\n>;\n\nexport type InitFn<T extends TypesGeneric = CoreSource.Types> = (\n collector: Collector.Instance,\n config: Config<T>,\n) => void | Promise<void>;\n","import type { Elb } from '@walkeros/core';\n\n// Simple re-exports from core\nexport type PushResult = Elb.PushResult;\nexport type Layer = Elb.Layer;\n","import type {\n Collector as CoreCollector,\n Elb,\n Hooks,\n WalkerOS,\n Destination as WalkerOSDestination,\n On,\n} from '@walkeros/core';\nimport type { Destination, Config as DestConfig } from './destination';\nimport type { Layer } from './elb';\nimport type { Events, Trigger } from './walker';\n\ndeclare global {\n interface Window {\n elbwalker: Collector;\n walkerjs: CoreCollector.Instance;\n elbLayer: Layer;\n dataLayer: WalkerOS.Events | unknown | unknown[];\n elb: Elb.Fn<Promise<Elb.PushResult>>;\n }\n}\n\nexport interface Collector extends Omit<CoreCollector.Instance, 'config'> {\n config: Config & CoreCollector.Config;\n destinations: Destinations;\n push: Elb.Fn<Promise<Elb.PushResult>>;\n getAllEvents: (scope: Element, prefix: string) => Events;\n getEvents: (target: Element, trigger: Trigger, prefix: string) => Events;\n getGlobals: () => WalkerOS.Properties;\n _visibilityState?: {\n observer: IntersectionObserver | undefined;\n timers: WeakMap<HTMLElement, number>;\n duration: number;\n elementConfigs?: WeakMap<\n HTMLElement,\n { multiple: boolean; blocked: boolean }\n >;\n };\n}\n\nexport interface State {\n config: Config;\n destinations: Destinations;\n}\n\nexport interface Config {\n dataLayer: boolean;\n dataLayerConfig: DestConfig;\n elbLayer: Layer;\n listeners: boolean;\n pageview: boolean;\n prefix: string;\n run: boolean;\n scope: Scope;\n elb?: string;\n name?: string;\n}\n\nexport interface InitConfig extends Partial<Config> {\n consent?: WalkerOS.Consent;\n custom?: WalkerOS.Properties;\n destinations?: WalkerOSDestination.InitDestinations;\n hooks?: Hooks.Functions;\n on?: On.OnConfig;\n tagging?: number;\n user?: WalkerOS.User;\n}\n\nexport interface Destinations {\n [name: string]: Destination;\n}\n\nexport type Scope = Element | Document;\n","import type { WalkerOS } from '@walkeros/core';\n\nexport type Events = Event[];\n\nexport interface Event {\n entity: string;\n action: string;\n data?: WalkerOS.Properties;\n context?: WalkerOS.OrderedProperties;\n trigger?: Trigger;\n nested: WalkerOS.Entities;\n}\n\nexport type KeyVal = [string, string];\n\nexport type Attributes = Array<string>;\n\nexport type Trigger =\n | 'click'\n | 'custom'\n | 'hover'\n | 'load'\n | 'pulse'\n | 'scroll'\n | 'submit'\n | 'visible'\n | 'visibles'\n | 'wait'\n | string;\n\nexport interface Filter {\n [name: string]: boolean;\n}\n\nexport interface TriggersActionGroups {\n [trigger: string]: TriggerActions;\n}\n\nexport type TriggerActions = Array<TriggerAction>;\n\ninterface TriggerAction {\n trigger: string;\n triggerParams?: string;\n action: string;\n actionParams?: string;\n}\n\nexport type ScrollElements = Array<[HTMLElement, number]>;\n"],"mappings":"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","names":["import_core","import_core","import_core"]}
|
package/dist/index.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{trim as e}from"@walkeros/core";function t(e,t){return(e.getAttribute(t)||"").trim()}function o(e,t=";"){if(!e)return[];const o=new RegExp(`(?:[^${t}']+|'[^']*')+`,"ig");return e.match(o)||[]}function n(t){const[o,n]=t.split(/:(.+)/,2);return[e(o||""),e(n||"")]}function r(e){const t={};return o(e).forEach(e=>{const[o,r]=n(e);o&&("true"===r?t[o]=!0:"false"===r?t[o]=!1:r&&/^\d+$/.test(r)?t[o]=parseInt(r,10):r&&/^\d+\.\d+$/.test(r)?t[o]=parseFloat(r):t[o]=r||!0)}),t}function i(e){return e.language}function s(){return Intl.DateTimeFormat().resolvedOptions().timeZone}function a(e){return`${e.screen.width}x${e.screen.height}`}var c=function(){const e=window;(e.elbLayer=e.elbLayer||[]).push(arguments)};function u(e){return{window:"undefined"!=typeof window?window:globalThis.window,document:"undefined"!=typeof document?document:globalThis.document,...e}}import{isDefined as d}from"@walkeros/core";async function l(e,t){return(await async function(e){const t=d(window)&&window.crypto?window.crypto:void 0;if(!t||!t.subtle||!TextEncoder)return;const o=(new TextEncoder).encode(e),n=await t.subtle.digest("SHA-256",o);return Array.from(new Uint8Array(n)).map(e=>e.toString(16).padStart(2,"0")).join("")}(e)||"").slice(0,t)}function
|
|
1
|
+
import{trim as e}from"@walkeros/core";function t(e,t){return(e.getAttribute(t)||"").trim()}function o(e,t=";"){if(!e)return[];const o=new RegExp(`(?:[^${t}']+|'[^']*')+`,"ig");return e.match(o)||[]}function n(t){const[o,n]=t.split(/:(.+)/,2);return[e(o||""),e(n||"")]}function r(e){const t={};return o(e).forEach(e=>{const[o,r]=n(e);o&&("true"===r?t[o]=!0:"false"===r?t[o]=!1:r&&/^\d+$/.test(r)?t[o]=parseInt(r,10):r&&/^\d+\.\d+$/.test(r)?t[o]=parseFloat(r):t[o]=r||!0)}),t}function i(e){return e.language}function s(){return Intl.DateTimeFormat().resolvedOptions().timeZone}function a(e){return`${e.screen.width}x${e.screen.height}`}var c=function(){const e=window;(e.elbLayer=e.elbLayer||[]).push(arguments)};function u(e){return{window:"undefined"!=typeof window?window:globalThis.window,document:"undefined"!=typeof document?document:globalThis.document,...e}}import{isDefined as d}from"@walkeros/core";async function l(e,t){return(await async function(e){const t=d(window)&&window.crypto?window.crypto:void 0;if(!t||!t.subtle||!TextEncoder)return;const o=(new TextEncoder).encode(e),n=await t.subtle.digest("SHA-256",o);return Array.from(new Uint8Array(n)).map(e=>e.toString(16).padStart(2,"0")).join("")}(e)||"").slice(0,t)}function w(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 o;const n=window.innerHeight,r=e.getBoundingClientRect(),i=r.height,s=r.y,a=s+i,c={x:r.x+e.offsetWidth/2,y:r.y+e.offsetHeight/2};if(i<=n){if(e.offsetWidth+r.width===0||e.offsetHeight+r.height===0)return!1;if(c.x<0)return!1;if(c.x>(document.documentElement.clientWidth||window.innerWidth))return!1;if(c.y<0)return!1;if(c.y>(document.documentElement.clientHeight||window.innerHeight))return!1;o=document.elementFromPoint(c.x,c.y)}else{const e=n/2;if(s<0&&a<e)return!1;if(a>n&&s>e)return!1;o=document.elementFromPoint(c.x,n/2)}if(o)do{if(o===e)return!0}while(o=o.parentElement);return!1}import{getHeaders as f,transformData as m,tryCatch as g,tryCatchAsync as h}from"@walkeros/core";function S(e,t,o={transport:"fetch"}){switch(o.transport||"fetch"){case"beacon":return y(e,t);case"xhr":return b(e,t,o);default:return p(e,t,o)}}async function p(e,t,o={}){const n=f(o.headers),r=m(t);return h(async()=>{const t=await fetch(e,{method:o.method||"POST",headers:n,keepalive:!0,credentials:o.credentials||"same-origin",mode:o.noCors?"no-cors":"cors",body:r}),i=o.noCors?"":await t.text();return{ok:t.ok,data:i,error:t.ok?void 0:t.statusText}},e=>({ok:!1,error:e.message}))()}function y(e,t){const o=m(t),n=navigator.sendBeacon(e,o);return{ok:n,error:n?void 0:"Failed to send beacon"}}function b(e,t,o={}){const n=f(o.headers),r=o.method||"POST",i=m(t);return g(()=>{const t=new XMLHttpRequest;t.open(r,e,!1);for(const e in n)t.setRequestHeader(e,n[e]);t.send(i);const o=t.status>=200&&t.status<300;return{ok:o,data:g(JSON.parse,()=>t.response)(t.response),error:o?void 0:`${t.status} ${t.statusText}`}},e=>({ok:!1,error:e.message}))()}import{castValue as k,Const as v}from"@walkeros/core";function x(e,t=v.Utils.Storage.Session,o){switch(t){case v.Utils.Storage.Cookie:C(e,"",0,t,void 0,o);break;case v.Utils.Storage.Local:(o?.window??window).localStorage.removeItem(e);break;case v.Utils.Storage.Session:(o?.window??window).sessionStorage.removeItem(e)}}function U(e,t=v.Utils.Storage.Session,o){function n(e){try{return JSON.parse(e||"")}catch(t){let o=1,n="";return e&&(o=0,n=e),{e:o,v:n}}}let r,i;switch(t){case v.Utils.Storage.Cookie:r=decodeURIComponent((o?.document??document).cookie.split("; ").find(t=>t.startsWith(e+"="))?.split("=")[1]||"");break;case v.Utils.Storage.Local:i=n((o?.window??window).localStorage.getItem(e));break;case v.Utils.Storage.Session:i=n((o?.window??window).sessionStorage.getItem(e))}return i&&(r=i.v,0!=i.e&&i.e<Date.now()&&(x(e,t,o),r="")),k(r||"")}function C(e,t,o=30,n=v.Utils.Storage.Session,r,i){const s={e:Date.now()+6e4*o,v:String(t)},a=JSON.stringify(s);switch(n){case v.Utils.Storage.Cookie:{t="object"==typeof t?JSON.stringify(t):t;let n=`${e}=${encodeURIComponent(t)}; max-age=${60*o}; path=/; SameSite=Lax; secure`;r&&(n+="; domain="+r),(i?.document??document).cookie=n;break}case v.Utils.Storage.Local:(i?.window??window).localStorage.setItem(e,a);break;case v.Utils.Storage.Session:(i?.window??window).sessionStorage.setItem(e,a)}return U(e,n,i)}var I={},$={},T={},W={},E={};export{I as DestinationWeb,T as Elb,$ as SourceWeb,E as Walker,W as WebCollector,c as elb,t as getAttribute,u as getEnv,l as getHashWeb,i as getLanguage,a as getScreenSize,s as getTimezone,w as isVisible,r as parseInlineConfig,S as sendWeb,y as sendWebAsBeacon,p as sendWebAsFetch,b as sendWebAsXhr,o as splitAttribute,n as splitKeyVal,x as storageDelete,U as storageRead,C as storageWrite};//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/attributes.ts","../src/browser.ts","../src/elb.ts","../src/environment.ts","../src/getHashWeb.ts","../src/isVisible.ts","../src/sendWeb.ts","../src/storage.ts","../src/types/destination.ts","../src/types/source.ts","../src/types/elb.ts","../src/types/collector.ts","../src/types/walker.ts"],"sourcesContent":["import { trim } from '@walkeros/core';\n\n/**\n * Get attribute value from element\n * @param element - DOM element\n * @param name - Attribute name\n * @returns Trimmed attribute value or empty string\n */\nexport function getAttribute(element: Element, name: string): string {\n return (element.getAttribute(name) || '').trim();\n}\n\n/**\n * Split attribute string by separator (semicolon by default)\n * Handles quoted values containing the separator\n * @param str - String to split\n * @param separator - Separator character (default: ';')\n * @returns Array of attribute strings\n */\nexport function splitAttribute(str: string, separator = ';'): string[] {\n if (!str) return [];\n const reg = new RegExp(`(?:[^${separator}']+|'[^']*')+`, 'ig');\n return str.match(reg) || [];\n}\n\n/**\n * Split key-value pair by first colon\n * @param str - String in format \"key:value\"\n * @returns Tuple of [key, value]\n */\nexport function splitKeyVal(str: string): [string, string] {\n const [key, value] = str.split(/:(.+)/, 2);\n return [trim(key || ''), trim(value || '')];\n}\n\n/**\n * Parse inline configuration string into object\n * Supports type conversion for boolean and numeric values\n * @param str - Configuration string (e.g., \"elb:track;run:false;port:3000\")\n * @returns Parsed configuration object\n */\nexport function parseInlineConfig(str: string): Record<string, unknown> {\n const config: Record<string, unknown> = {};\n\n splitAttribute(str).forEach((pair) => {\n const [key, value] = splitKeyVal(pair);\n if (key) {\n // Type conversion\n if (value === 'true') {\n config[key] = true;\n } else if (value === 'false') {\n config[key] = false;\n } else if (value && /^\\d+$/.test(value)) {\n config[key] = parseInt(value, 10);\n } else if (value && /^\\d+\\.\\d+$/.test(value)) {\n config[key] = parseFloat(value);\n } else if (value) {\n config[key] = value;\n } else {\n // Key without value defaults to true\n config[key] = true;\n }\n }\n });\n\n return config;\n}\n","export function getLanguage(navigatorRef: Navigator): string | undefined {\n return navigatorRef.language;\n}\n\nexport function getTimezone(): string | undefined {\n return Intl.DateTimeFormat().resolvedOptions().timeZone;\n}\n\nexport function getScreenSize(windowRef: Window): string {\n return `${windowRef.screen.width}x${windowRef.screen.height}`;\n}\n","import type { Elb } from '@walkeros/core';\n\nexport const elb: Elb.Fn<void> = function () {\n const w = window as unknown as Record<string, unknown[]>;\n (w.elbLayer = w.elbLayer || []).push(arguments);\n};\n","import type { Env } from './types/destination';\n\n/**\n * Helper function to get environment globals with fallbacks\n *\n * Returns window and document by default, with optional environment overrides.\n *\n * @param env - Optional environment overrides\n * @returns Env with window/document defaults and any provided overrides\n */\nexport function getEnv(env?: Env) {\n return {\n window: typeof window !== 'undefined' ? window : globalThis.window,\n document: typeof document !== 'undefined' ? document : globalThis.document,\n ...env,\n };\n}\n","import { isDefined } from '@walkeros/core';\n\nasync function sha256(message: string): Promise<string | undefined> {\n const crypto: Crypto | undefined =\n isDefined(window) && window.crypto ? window.crypto : undefined;\n\n // Crypto API not available\n if (!crypto || !crypto.subtle || !TextEncoder) return;\n\n const msgBuffer = new TextEncoder().encode(message);\n const hashBuffer = await crypto.subtle.digest('SHA-256', msgBuffer);\n const hashArray = Array.from(new Uint8Array(hashBuffer));\n const hashHex = hashArray\n .map((b) => b.toString(16).padStart(2, '0'))\n .join('');\n return hashHex;\n}\n\nexport async function getHashWeb(\n str: string,\n length?: number,\n): Promise<string> {\n return ((await sha256(str)) || '').slice(0, length);\n}\n","export function isVisible(element: HTMLElement): boolean {\n // Check for hiding styles\n const style = getComputedStyle(element);\n if (style.display === 'none') return false;\n if (style.visibility !== 'visible') return false;\n if (style.opacity && Number(style.opacity) < 0.1) return false;\n\n // Window positions\n let pointContainer;\n const windowHeight = window.innerHeight; // Height of the viewport\n\n // Element positions\n const elemRectRel = element.getBoundingClientRect(); // Get the elements relative to the viewport\n const elementHeight = elemRectRel.height; // Height of the element\n const elementTopRel = elemRectRel.y; // Relative distance from window top to element top\n const elementBottomRel = elementTopRel + elementHeight; // Relative distance from window to to element bottom\n const elemCenterRel = {\n // Relative position on viewport of the elements center\n x: elemRectRel.x + element.offsetWidth / 2,\n y: elemRectRel.y + element.offsetHeight / 2,\n };\n\n // Differentiate between small and large elements\n if (elementHeight <= windowHeight) {\n // Smaller than the viewport\n\n // Must have a width and height\n if (\n element.offsetWidth + elemRectRel.width === 0 ||\n element.offsetHeight + elemRectRel.height === 0\n )\n return false;\n\n if (elemCenterRel.x < 0) return false;\n if (\n elemCenterRel.x >\n (document.documentElement.clientWidth || window.innerWidth)\n )\n return false;\n if (elemCenterRel.y < 0) return false;\n if (\n elemCenterRel.y >\n (document.documentElement.clientHeight || window.innerHeight)\n )\n return false;\n\n // Select the element that is at the center of the target\n pointContainer = document.elementFromPoint(\n elemCenterRel.x,\n elemCenterRel.y,\n );\n } else {\n // Bigger than the viewport\n\n // that are considered visible if they fill half of the screen\n const viewportCenter = windowHeight / 2;\n\n // Check if upper part is above the viewports center\n if (elementTopRel < 0 && elementBottomRel < viewportCenter) return false;\n\n // Check if lower part is below the viewports center\n if (elementBottomRel > windowHeight && elementTopRel > viewportCenter)\n return false;\n\n // Select the element that is in the middle of the screen\n pointContainer = document.elementFromPoint(\n elemCenterRel.x,\n windowHeight / 2,\n );\n }\n\n // Check for potential overlays\n if (pointContainer) {\n do {\n if (pointContainer === element) return true; // should be visible\n } while ((pointContainer = pointContainer.parentElement));\n }\n\n return false;\n}\n","import type { SendDataValue, SendHeaders, SendResponse } from '@walkeros/core';\nimport {\n getHeaders,\n transformData,\n tryCatch,\n tryCatchAsync,\n} from '@walkeros/core';\n\nexport type SendWebTransport = 'fetch' | 'beacon' | 'xhr';\n\nexport interface SendWebOptions {\n headers?: SendHeaders;\n transport?: SendWebTransport;\n method?: string;\n}\n\nexport interface SendWebOptionsFetch extends SendWebOptions {\n credentials?: 'omit' | 'same-origin' | 'include'; // Add credentials option\n noCors?: boolean; // Add noCors option for fetch transport\n}\n\ntype SendWebOptionsDynamic<T extends SendWebTransport> = T extends 'fetch'\n ? SendWebOptionsFetch\n : SendWebOptions;\n\nexport type SendWebReturn<T extends SendWebTransport> = T extends 'fetch'\n ? Promise<SendResponse>\n : SendResponse;\n\nexport function sendWeb<T extends SendWebTransport>(\n url: string,\n data?: SendDataValue,\n options: SendWebOptionsDynamic<T> & { transport?: T } = {\n transport: 'fetch' as T,\n },\n): SendWebReturn<T> {\n const transport = options.transport || 'fetch';\n\n switch (transport) {\n case 'beacon':\n return sendWebAsBeacon(url, data) as SendWebReturn<T>;\n case 'xhr':\n return sendWebAsXhr(url, data, options) as SendWebReturn<T>;\n case 'fetch':\n default:\n return sendWebAsFetch(url, data, options) as SendWebReturn<T>;\n }\n}\n\nexport async function sendWebAsFetch(\n url: string,\n data?: SendDataValue,\n options: SendWebOptionsFetch = {},\n): Promise<SendResponse> {\n const headers = getHeaders(options.headers);\n const body = transformData(data);\n\n return tryCatchAsync(\n async () => {\n const response = await fetch(url, {\n method: options.method || 'POST',\n headers,\n keepalive: true,\n credentials: options.credentials || 'same-origin',\n mode: options.noCors ? 'no-cors' : 'cors',\n body,\n });\n\n const responseData = options.noCors ? '' : await response.text();\n\n return {\n ok: response.ok,\n data: responseData,\n error: response.ok ? undefined : response.statusText,\n };\n },\n (error) => {\n return {\n ok: false,\n error: (error as Error).message,\n };\n },\n )();\n}\n\nexport function sendWebAsBeacon(\n url: string,\n data?: SendDataValue,\n): SendResponse {\n const body = transformData(data);\n const ok = navigator.sendBeacon(url, body);\n\n return {\n ok,\n error: ok ? undefined : 'Failed to send beacon',\n };\n}\n\nexport function sendWebAsXhr(\n url: string,\n data?: SendDataValue,\n options: SendWebOptions = {},\n): SendResponse {\n const headers = getHeaders(options.headers);\n const method = options.method || 'POST';\n const body = transformData(data);\n\n return tryCatch(\n () => {\n const xhr = new XMLHttpRequest();\n xhr.open(method, url, false); // Synchronous request\n for (const header in headers) {\n xhr.setRequestHeader(header, headers[header]);\n }\n xhr.send(body);\n\n const ok = xhr.status >= 200 && xhr.status < 300;\n\n const parsedData = tryCatch(JSON.parse, () => xhr.response)(xhr.response);\n\n return {\n ok,\n data: parsedData,\n error: ok ? undefined : `${xhr.status} ${xhr.statusText}`,\n };\n },\n (error) => {\n return {\n ok: false,\n error: (error as Error).message,\n };\n },\n )();\n}\n","import type { WalkerOS } from '@walkeros/core';\nimport type { StorageType } from '@walkeros/core';\nimport { castValue, Const } from '@walkeros/core';\n\nexport interface StorageValue {\n e: number; // Expiration timestamp\n v: string; // Value\n}\n\nexport function storageDelete(\n key: string,\n storage: StorageType = Const.Utils.Storage.Session,\n) {\n switch (storage) {\n case Const.Utils.Storage.Cookie:\n storageWrite(key, '', 0, storage);\n break;\n case Const.Utils.Storage.Local:\n window.localStorage.removeItem(key);\n break;\n case Const.Utils.Storage.Session:\n window.sessionStorage.removeItem(key);\n break;\n }\n}\n\nexport function storageRead(\n key: string,\n storage: StorageType = Const.Utils.Storage.Session,\n): WalkerOS.PropertyType {\n // Helper function for local and session storage to support expiration\n function parseItem(string: string | null): StorageValue {\n try {\n return JSON.parse(string || '');\n } catch (err) {\n let e = 1,\n v = '';\n\n // Remove expiration date\n if (string) {\n e = 0;\n v = string;\n }\n\n return { e, v };\n }\n }\n let value, item;\n\n switch (storage) {\n case Const.Utils.Storage.Cookie:\n value = decodeURIComponent(\n document.cookie\n .split('; ')\n .find((row) => row.startsWith(key + '='))\n ?.split('=')[1] || '',\n );\n break;\n case Const.Utils.Storage.Local:\n item = parseItem(window.localStorage.getItem(key));\n break;\n case Const.Utils.Storage.Session:\n item = parseItem(window.sessionStorage.getItem(key));\n break;\n }\n\n // Check if item is expired\n if (item) {\n value = item.v;\n\n if (item.e != 0 && item.e < Date.now()) {\n storageDelete(key, storage); // Remove item\n value = ''; // Conceal the outdated value\n }\n }\n\n return castValue(value || '');\n}\n\nexport function storageWrite(\n key: string,\n value: WalkerOS.PropertyType,\n maxAgeInMinutes = 30,\n storage: StorageType = Const.Utils.Storage.Session,\n domain?: string,\n): WalkerOS.PropertyType {\n const e = Date.now() + 1000 * 60 * maxAgeInMinutes;\n const item: StorageValue = { e, v: String(value) };\n const stringifiedItem = JSON.stringify(item);\n\n switch (storage) {\n case Const.Utils.Storage.Cookie: {\n value = typeof value === 'object' ? JSON.stringify(value) : value;\n let cookie = `${key}=${encodeURIComponent(value)}; max-age=${\n maxAgeInMinutes * 60\n }; path=/; SameSite=Lax; secure`;\n\n if (domain) cookie += '; domain=' + domain;\n\n document.cookie = cookie;\n break;\n }\n case Const.Utils.Storage.Local:\n window.localStorage.setItem(key, stringifiedItem);\n break;\n case Const.Utils.Storage.Session:\n window.sessionStorage.setItem(key, stringifiedItem);\n break;\n }\n\n return storageRead(key, storage);\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { Destination as WalkerOSDestination } from '@walkeros/core';\n\nexport type TypesGeneric = WalkerOSDestination.TypesGeneric;\n\nexport interface Destination<T extends TypesGeneric = WalkerOSDestination.Types>\n extends WalkerOSDestination.Instance<T> {}\n\nexport type Init = WalkerOSDestination.Init;\n\nexport type Config<T extends TypesGeneric = WalkerOSDestination.Types> =\n WalkerOSDestination.Config<T>;\n\nexport type PartialConfig<T extends TypesGeneric = WalkerOSDestination.Types> =\n WalkerOSDestination.PartialConfig<T>;\n\nexport type InitFn<T extends TypesGeneric = WalkerOSDestination.Types> =\n WalkerOSDestination.InitFn<T>;\n\nexport type PushFn<T extends TypesGeneric = WalkerOSDestination.Types> =\n WalkerOSDestination.PushFn<T>;\n\nexport type PushEvent<Mapping = unknown> =\n WalkerOSDestination.PushEvent<Mapping>;\n\nexport type PushEvents<Mapping = unknown> =\n WalkerOSDestination.PushEvents<Mapping>;\n\n/**\n * Web-specific environment requirements interface\n *\n * Extends the core Env interface with web-specific\n * globals like window and document for browser destinations.\n */\nexport interface Env extends WalkerOSDestination.BaseEnv {\n /**\n * Properties to be added to the global `window` object\n *\n * Used by web destinations that expect browser-specific\n * global functions like analytics APIs.\n *\n * @example\n * ```typescript\n * window: {\n * gtag: () => {},\n * fbq: () => {},\n * dataLayer: []\n * }\n * ```\n */\n window?: Record<string, unknown>;\n\n /**\n * Properties to be added to the global `document` object\n *\n * Used by destinations that need DOM manipulation capabilities\n * for script loading or element creation.\n *\n * @example\n * ```typescript\n * document: {\n * createElement: () => ({ src: '', async: false }),\n * head: { appendChild: () => {} }\n * }\n * ```\n */\n document?: Record<string, unknown>;\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { Collector, WalkerOS, Source as CoreSource } from '@walkeros/core';\n\nexport type TypesGeneric = CoreSource.TypesGeneric;\n\nexport interface Source<T extends TypesGeneric = CoreSource.Types>\n extends CoreSource.Instance<T> {\n settings?: CoreSource.Settings<T>;\n mapping?: CoreSource.Mapping<T>;\n}\n\nexport type Init = Partial<Omit<Source, 'init'>> & Pick<Source, 'type'>;\n\nexport type Config<T extends TypesGeneric = CoreSource.Types> =\n CoreSource.Instance<T> & {\n settings: CoreSource.Settings<T>;\n mapping?: CoreSource.Mapping<T>;\n };\n\nexport type PartialConfig<T extends TypesGeneric = CoreSource.Types> = Partial<\n Config<T>\n>;\n\nexport type InitFn<T extends TypesGeneric = CoreSource.Types> = (\n collector: Collector.Instance,\n config: Config<T>,\n) => void | Promise<void>;\n","import type { Elb } from '@walkeros/core';\n\n// Simple re-exports from core\nexport type PushResult = Elb.PushResult;\nexport type Layer = Elb.Layer;\n","import type {\n Collector as CoreCollector,\n Elb,\n Hooks,\n WalkerOS,\n Destination as WalkerOSDestination,\n On,\n} from '@walkeros/core';\nimport type { Destination, Config as DestConfig } from './destination';\nimport type { Layer } from './elb';\nimport type { Events, Trigger } from './walker';\n\ndeclare global {\n interface Window {\n elbwalker: Collector;\n walkerjs: CoreCollector.Instance;\n elbLayer: Layer;\n dataLayer: WalkerOS.Events | unknown | unknown[];\n elb: Elb.Fn<Promise<Elb.PushResult>>;\n }\n}\n\nexport interface Collector extends Omit<CoreCollector.Instance, 'config'> {\n config: Config & CoreCollector.Config;\n destinations: Destinations;\n push: Elb.Fn<Promise<Elb.PushResult>>;\n getAllEvents: (scope: Element, prefix: string) => Events;\n getEvents: (target: Element, trigger: Trigger, prefix: string) => Events;\n getGlobals: () => WalkerOS.Properties;\n _visibilityState?: {\n observer: IntersectionObserver | undefined;\n timers: WeakMap<HTMLElement, number>;\n duration: number;\n elementConfigs?: WeakMap<\n HTMLElement,\n { multiple: boolean; blocked: boolean }\n >;\n };\n}\n\nexport interface State {\n config: Config;\n destinations: Destinations;\n}\n\nexport interface Config {\n dataLayer: boolean;\n dataLayerConfig: DestConfig;\n elbLayer: Layer;\n listeners: boolean;\n pageview: boolean;\n prefix: string;\n run: boolean;\n scope: Scope;\n elb?: string;\n name?: string;\n}\n\nexport interface InitConfig extends Partial<Config> {\n consent?: WalkerOS.Consent;\n custom?: WalkerOS.Properties;\n destinations?: WalkerOSDestination.InitDestinations;\n hooks?: Hooks.Functions;\n on?: On.OnConfig;\n tagging?: number;\n user?: WalkerOS.User;\n}\n\nexport interface Destinations {\n [name: string]: Destination;\n}\n\nexport type Scope = Element | Document;\n","import type { WalkerOS } from '@walkeros/core';\n\nexport type Events = Event[];\n\nexport interface Event {\n entity: string;\n action: string;\n data?: WalkerOS.Properties;\n context?: WalkerOS.OrderedProperties;\n trigger?: Trigger;\n nested: WalkerOS.Entities;\n}\n\nexport type KeyVal = [string, string];\n\nexport type Attributes = Array<string>;\n\nexport type Trigger =\n | 'click'\n | 'custom'\n | 'hover'\n | 'load'\n | 'pulse'\n | 'scroll'\n | 'submit'\n | 'visible'\n | 'visibles'\n | 'wait'\n | string;\n\nexport interface Filter {\n [name: string]: boolean;\n}\n\nexport interface TriggersActionGroups {\n [trigger: string]: TriggerActions;\n}\n\nexport type TriggerActions = Array<TriggerAction>;\n\ninterface TriggerAction {\n trigger: string;\n triggerParams?: string;\n action: string;\n actionParams?: string;\n}\n\nexport type ScrollElements = Array<[HTMLElement, number]>;\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/attributes.ts","../src/browser.ts","../src/elb.ts","../src/environment.ts","../src/getHashWeb.ts","../src/isVisible.ts","../src/sendWeb.ts","../src/storage.ts","../src/types/destination.ts","../src/types/source.ts","../src/types/elb.ts","../src/types/collector.ts","../src/types/walker.ts"],"sourcesContent":["import { trim } from '@walkeros/core';\n\n/**\n * Get attribute value from element\n * @param element - DOM element\n * @param name - Attribute name\n * @returns Trimmed attribute value or empty string\n */\nexport function getAttribute(element: Element, name: string): string {\n return (element.getAttribute(name) || '').trim();\n}\n\n/**\n * Split attribute string by separator (semicolon by default)\n * Handles quoted values containing the separator\n * @param str - String to split\n * @param separator - Separator character (default: ';')\n * @returns Array of attribute strings\n */\nexport function splitAttribute(str: string, separator = ';'): string[] {\n if (!str) return [];\n const reg = new RegExp(`(?:[^${separator}']+|'[^']*')+`, 'ig');\n return str.match(reg) || [];\n}\n\n/**\n * Split key-value pair by first colon\n * @param str - String in format \"key:value\"\n * @returns Tuple of [key, value]\n */\nexport function splitKeyVal(str: string): [string, string] {\n const [key, value] = str.split(/:(.+)/, 2);\n return [trim(key || ''), trim(value || '')];\n}\n\n/**\n * Parse inline configuration string into object\n * Supports type conversion for boolean and numeric values\n * @param str - Configuration string (e.g., \"elb:track;run:false;port:3000\")\n * @returns Parsed configuration object\n */\nexport function parseInlineConfig(str: string): Record<string, unknown> {\n const config: Record<string, unknown> = {};\n\n splitAttribute(str).forEach((pair) => {\n const [key, value] = splitKeyVal(pair);\n if (key) {\n // Type conversion\n if (value === 'true') {\n config[key] = true;\n } else if (value === 'false') {\n config[key] = false;\n } else if (value && /^\\d+$/.test(value)) {\n config[key] = parseInt(value, 10);\n } else if (value && /^\\d+\\.\\d+$/.test(value)) {\n config[key] = parseFloat(value);\n } else if (value) {\n config[key] = value;\n } else {\n // Key without value defaults to true\n config[key] = true;\n }\n }\n });\n\n return config;\n}\n","export function getLanguage(navigatorRef: Navigator): string | undefined {\n return navigatorRef.language;\n}\n\nexport function getTimezone(): string | undefined {\n return Intl.DateTimeFormat().resolvedOptions().timeZone;\n}\n\nexport function getScreenSize(windowRef: Window): string {\n return `${windowRef.screen.width}x${windowRef.screen.height}`;\n}\n","import type { Elb } from '@walkeros/core';\n\nexport const elb: Elb.Fn<void> = function () {\n const w = window as unknown as Record<string, unknown[]>;\n (w.elbLayer = w.elbLayer || []).push(arguments);\n};\n","import type { Env } from './types/destination';\n\n/**\n * Helper function to get environment globals with fallbacks\n *\n * Returns window and document by default, with optional environment overrides.\n *\n * @param env - Optional environment overrides\n * @returns Env with window/document defaults and any provided overrides\n */\nexport function getEnv(env?: Env) {\n return {\n window: typeof window !== 'undefined' ? window : globalThis.window,\n document: typeof document !== 'undefined' ? document : globalThis.document,\n ...env,\n };\n}\n","import { isDefined } from '@walkeros/core';\n\nasync function sha256(message: string): Promise<string | undefined> {\n const crypto: Crypto | undefined =\n isDefined(window) && window.crypto ? window.crypto : undefined;\n\n // Crypto API not available\n if (!crypto || !crypto.subtle || !TextEncoder) return;\n\n const msgBuffer = new TextEncoder().encode(message);\n const hashBuffer = await crypto.subtle.digest('SHA-256', msgBuffer);\n const hashArray = Array.from(new Uint8Array(hashBuffer));\n const hashHex = hashArray\n .map((b) => b.toString(16).padStart(2, '0'))\n .join('');\n return hashHex;\n}\n\nexport async function getHashWeb(\n str: string,\n length?: number,\n): Promise<string> {\n return ((await sha256(str)) || '').slice(0, length);\n}\n","export function isVisible(element: HTMLElement): boolean {\n // Check for hiding styles\n const style = getComputedStyle(element);\n if (style.display === 'none') return false;\n if (style.visibility !== 'visible') return false;\n if (style.opacity && Number(style.opacity) < 0.1) return false;\n\n // Window positions\n let pointContainer;\n const windowHeight = window.innerHeight; // Height of the viewport\n\n // Element positions\n const elemRectRel = element.getBoundingClientRect(); // Get the elements relative to the viewport\n const elementHeight = elemRectRel.height; // Height of the element\n const elementTopRel = elemRectRel.y; // Relative distance from window top to element top\n const elementBottomRel = elementTopRel + elementHeight; // Relative distance from window to to element bottom\n const elemCenterRel = {\n // Relative position on viewport of the elements center\n x: elemRectRel.x + element.offsetWidth / 2,\n y: elemRectRel.y + element.offsetHeight / 2,\n };\n\n // Differentiate between small and large elements\n if (elementHeight <= windowHeight) {\n // Smaller than the viewport\n\n // Must have a width and height\n if (\n element.offsetWidth + elemRectRel.width === 0 ||\n element.offsetHeight + elemRectRel.height === 0\n )\n return false;\n\n if (elemCenterRel.x < 0) return false;\n if (\n elemCenterRel.x >\n (document.documentElement.clientWidth || window.innerWidth)\n )\n return false;\n if (elemCenterRel.y < 0) return false;\n if (\n elemCenterRel.y >\n (document.documentElement.clientHeight || window.innerHeight)\n )\n return false;\n\n // Select the element that is at the center of the target\n pointContainer = document.elementFromPoint(\n elemCenterRel.x,\n elemCenterRel.y,\n );\n } else {\n // Bigger than the viewport\n\n // that are considered visible if they fill half of the screen\n const viewportCenter = windowHeight / 2;\n\n // Check if upper part is above the viewports center\n if (elementTopRel < 0 && elementBottomRel < viewportCenter) return false;\n\n // Check if lower part is below the viewports center\n if (elementBottomRel > windowHeight && elementTopRel > viewportCenter)\n return false;\n\n // Select the element that is in the middle of the screen\n pointContainer = document.elementFromPoint(\n elemCenterRel.x,\n windowHeight / 2,\n );\n }\n\n // Check for potential overlays\n if (pointContainer) {\n do {\n if (pointContainer === element) return true; // should be visible\n } while ((pointContainer = pointContainer.parentElement));\n }\n\n return false;\n}\n","import type { SendDataValue, SendHeaders, SendResponse } from '@walkeros/core';\nimport {\n getHeaders,\n transformData,\n tryCatch,\n tryCatchAsync,\n} from '@walkeros/core';\n\nexport type SendWebTransport = 'fetch' | 'beacon' | 'xhr';\n\nexport interface SendWebOptions {\n headers?: SendHeaders;\n transport?: SendWebTransport;\n method?: string;\n}\n\nexport interface SendWebOptionsFetch extends SendWebOptions {\n credentials?: 'omit' | 'same-origin' | 'include'; // Add credentials option\n noCors?: boolean; // Add noCors option for fetch transport\n}\n\ntype SendWebOptionsDynamic<T extends SendWebTransport> = T extends 'fetch'\n ? SendWebOptionsFetch\n : SendWebOptions;\n\nexport type SendWebReturn<T extends SendWebTransport> = T extends 'fetch'\n ? Promise<SendResponse>\n : SendResponse;\n\nexport function sendWeb<T extends SendWebTransport>(\n url: string,\n data?: SendDataValue,\n options: SendWebOptionsDynamic<T> & { transport?: T } = {\n transport: 'fetch' as T,\n },\n): SendWebReturn<T> {\n const transport = options.transport || 'fetch';\n\n switch (transport) {\n case 'beacon':\n return sendWebAsBeacon(url, data) as SendWebReturn<T>;\n case 'xhr':\n return sendWebAsXhr(url, data, options) as SendWebReturn<T>;\n case 'fetch':\n default:\n return sendWebAsFetch(url, data, options) as SendWebReturn<T>;\n }\n}\n\nexport async function sendWebAsFetch(\n url: string,\n data?: SendDataValue,\n options: SendWebOptionsFetch = {},\n): Promise<SendResponse> {\n const headers = getHeaders(options.headers);\n const body = transformData(data);\n\n return tryCatchAsync(\n async () => {\n const response = await fetch(url, {\n method: options.method || 'POST',\n headers,\n keepalive: true,\n credentials: options.credentials || 'same-origin',\n mode: options.noCors ? 'no-cors' : 'cors',\n body,\n });\n\n const responseData = options.noCors ? '' : await response.text();\n\n return {\n ok: response.ok,\n data: responseData,\n error: response.ok ? undefined : response.statusText,\n };\n },\n (error) => {\n return {\n ok: false,\n error: (error as Error).message,\n };\n },\n )();\n}\n\nexport function sendWebAsBeacon(\n url: string,\n data?: SendDataValue,\n): SendResponse {\n const body = transformData(data);\n const ok = navigator.sendBeacon(url, body);\n\n return {\n ok,\n error: ok ? undefined : 'Failed to send beacon',\n };\n}\n\nexport function sendWebAsXhr(\n url: string,\n data?: SendDataValue,\n options: SendWebOptions = {},\n): SendResponse {\n const headers = getHeaders(options.headers);\n const method = options.method || 'POST';\n const body = transformData(data);\n\n return tryCatch(\n () => {\n const xhr = new XMLHttpRequest();\n xhr.open(method, url, false); // Synchronous request\n for (const header in headers) {\n xhr.setRequestHeader(header, headers[header]);\n }\n xhr.send(body);\n\n const ok = xhr.status >= 200 && xhr.status < 300;\n\n const parsedData = tryCatch(JSON.parse, () => xhr.response)(xhr.response);\n\n return {\n ok,\n data: parsedData,\n error: ok ? undefined : `${xhr.status} ${xhr.statusText}`,\n };\n },\n (error) => {\n return {\n ok: false,\n error: (error as Error).message,\n };\n },\n )();\n}\n","import type { WalkerOS } from '@walkeros/core';\nimport type { StorageType } from '@walkeros/core';\nimport { castValue, Const } from '@walkeros/core';\n\nexport interface StorageValue {\n e: number; // Expiration timestamp\n v: string; // Value\n}\n\nexport interface StorageEnv {\n window?: Window & typeof globalThis;\n document?: Document;\n}\n\nexport function storageDelete(\n key: string,\n storage: StorageType = Const.Utils.Storage.Session,\n env?: StorageEnv,\n) {\n switch (storage) {\n case Const.Utils.Storage.Cookie:\n storageWrite(key, '', 0, storage, undefined, env);\n break;\n case Const.Utils.Storage.Local:\n (env?.window ?? window).localStorage.removeItem(key);\n break;\n case Const.Utils.Storage.Session:\n (env?.window ?? window).sessionStorage.removeItem(key);\n break;\n }\n}\n\nexport function storageRead(\n key: string,\n storage: StorageType = Const.Utils.Storage.Session,\n env?: StorageEnv,\n): WalkerOS.PropertyType {\n // Helper function for local and session storage to support expiration\n function parseItem(string: string | null): StorageValue {\n try {\n return JSON.parse(string || '');\n } catch (err) {\n let e = 1,\n v = '';\n\n // Remove expiration date\n if (string) {\n e = 0;\n v = string;\n }\n\n return { e, v };\n }\n }\n let value, item;\n\n switch (storage) {\n case Const.Utils.Storage.Cookie:\n value = decodeURIComponent(\n (env?.document ?? document).cookie\n .split('; ')\n .find((row) => row.startsWith(key + '='))\n ?.split('=')[1] || '',\n );\n break;\n case Const.Utils.Storage.Local:\n item = parseItem((env?.window ?? window).localStorage.getItem(key));\n break;\n case Const.Utils.Storage.Session:\n item = parseItem((env?.window ?? window).sessionStorage.getItem(key));\n break;\n }\n\n // Check if item is expired\n if (item) {\n value = item.v;\n\n if (item.e != 0 && item.e < Date.now()) {\n storageDelete(key, storage, env);\n value = ''; // Conceal the outdated value\n }\n }\n\n return castValue(value || '');\n}\n\nexport function storageWrite(\n key: string,\n value: WalkerOS.PropertyType,\n maxAgeInMinutes = 30,\n storage: StorageType = Const.Utils.Storage.Session,\n domain?: string,\n env?: StorageEnv,\n): WalkerOS.PropertyType {\n const e = Date.now() + 1000 * 60 * maxAgeInMinutes;\n const item: StorageValue = { e, v: String(value) };\n const stringifiedItem = JSON.stringify(item);\n\n switch (storage) {\n case Const.Utils.Storage.Cookie: {\n value = typeof value === 'object' ? JSON.stringify(value) : value;\n let cookie = `${key}=${encodeURIComponent(value)}; max-age=${\n maxAgeInMinutes * 60\n }; path=/; SameSite=Lax; secure`;\n\n if (domain) cookie += '; domain=' + domain;\n\n (env?.document ?? document).cookie = cookie;\n break;\n }\n case Const.Utils.Storage.Local:\n (env?.window ?? window).localStorage.setItem(key, stringifiedItem);\n break;\n case Const.Utils.Storage.Session:\n (env?.window ?? window).sessionStorage.setItem(key, stringifiedItem);\n break;\n }\n\n return storageRead(key, storage, env);\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { Destination as WalkerOSDestination } from '@walkeros/core';\n\nexport type TypesGeneric = WalkerOSDestination.TypesGeneric;\n\nexport interface Destination<T extends TypesGeneric = WalkerOSDestination.Types>\n extends WalkerOSDestination.Instance<T> {}\n\nexport type Init = WalkerOSDestination.Init;\n\nexport type Config<T extends TypesGeneric = WalkerOSDestination.Types> =\n WalkerOSDestination.Config<T>;\n\nexport type PartialConfig<T extends TypesGeneric = WalkerOSDestination.Types> =\n WalkerOSDestination.PartialConfig<T>;\n\nexport type InitFn<T extends TypesGeneric = WalkerOSDestination.Types> =\n WalkerOSDestination.InitFn<T>;\n\nexport type PushFn<T extends TypesGeneric = WalkerOSDestination.Types> =\n WalkerOSDestination.PushFn<T>;\n\nexport type PushEvent<Mapping = unknown> =\n WalkerOSDestination.PushEvent<Mapping>;\n\nexport type PushEvents<Mapping = unknown> =\n WalkerOSDestination.PushEvents<Mapping>;\n\n/**\n * Web-specific environment requirements interface\n *\n * Extends the core Env interface with web-specific\n * globals like window and document for browser destinations.\n */\nexport interface Env extends WalkerOSDestination.BaseEnv {\n /**\n * Properties to be added to the global `window` object\n *\n * Used by web destinations that expect browser-specific\n * global functions like analytics APIs.\n *\n * @example\n * ```typescript\n * window: {\n * gtag: () => {},\n * fbq: () => {},\n * dataLayer: []\n * }\n * ```\n */\n window?: Record<string, unknown>;\n\n /**\n * Properties to be added to the global `document` object\n *\n * Used by destinations that need DOM manipulation capabilities\n * for script loading or element creation.\n *\n * @example\n * ```typescript\n * document: {\n * createElement: () => ({ src: '', async: false }),\n * head: { appendChild: () => {} }\n * }\n * ```\n */\n document?: Record<string, unknown>;\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { Collector, WalkerOS, Source as CoreSource } from '@walkeros/core';\n\nexport type TypesGeneric = CoreSource.TypesGeneric;\n\nexport interface Source<T extends TypesGeneric = CoreSource.Types>\n extends CoreSource.Instance<T> {\n settings?: CoreSource.Settings<T>;\n mapping?: CoreSource.Mapping<T>;\n}\n\nexport type Init = Partial<Omit<Source, 'init'>> & Pick<Source, 'type'>;\n\nexport type Config<T extends TypesGeneric = CoreSource.Types> =\n CoreSource.Instance<T> & {\n settings: CoreSource.Settings<T>;\n mapping?: CoreSource.Mapping<T>;\n };\n\nexport type PartialConfig<T extends TypesGeneric = CoreSource.Types> = Partial<\n Config<T>\n>;\n\nexport type InitFn<T extends TypesGeneric = CoreSource.Types> = (\n collector: Collector.Instance,\n config: Config<T>,\n) => void | Promise<void>;\n","import type { Elb } from '@walkeros/core';\n\n// Simple re-exports from core\nexport type PushResult = Elb.PushResult;\nexport type Layer = Elb.Layer;\n","import type {\n Collector as CoreCollector,\n Elb,\n Hooks,\n WalkerOS,\n Destination as WalkerOSDestination,\n On,\n} from '@walkeros/core';\nimport type { Destination, Config as DestConfig } from './destination';\nimport type { Layer } from './elb';\nimport type { Events, Trigger } from './walker';\n\ndeclare global {\n interface Window {\n elbwalker: Collector;\n walkerjs: CoreCollector.Instance;\n elbLayer: Layer;\n dataLayer: WalkerOS.Events | unknown | unknown[];\n elb: Elb.Fn<Promise<Elb.PushResult>>;\n }\n}\n\nexport interface Collector extends Omit<CoreCollector.Instance, 'config'> {\n config: Config & CoreCollector.Config;\n destinations: Destinations;\n push: Elb.Fn<Promise<Elb.PushResult>>;\n getAllEvents: (scope: Element, prefix: string) => Events;\n getEvents: (target: Element, trigger: Trigger, prefix: string) => Events;\n getGlobals: () => WalkerOS.Properties;\n _visibilityState?: {\n observer: IntersectionObserver | undefined;\n timers: WeakMap<HTMLElement, number>;\n duration: number;\n elementConfigs?: WeakMap<\n HTMLElement,\n { multiple: boolean; blocked: boolean }\n >;\n };\n}\n\nexport interface State {\n config: Config;\n destinations: Destinations;\n}\n\nexport interface Config {\n dataLayer: boolean;\n dataLayerConfig: DestConfig;\n elbLayer: Layer;\n listeners: boolean;\n pageview: boolean;\n prefix: string;\n run: boolean;\n scope: Scope;\n elb?: string;\n name?: string;\n}\n\nexport interface InitConfig extends Partial<Config> {\n consent?: WalkerOS.Consent;\n custom?: WalkerOS.Properties;\n destinations?: WalkerOSDestination.InitDestinations;\n hooks?: Hooks.Functions;\n on?: On.OnConfig;\n tagging?: number;\n user?: WalkerOS.User;\n}\n\nexport interface Destinations {\n [name: string]: Destination;\n}\n\nexport type Scope = Element | Document;\n","import type { WalkerOS } from '@walkeros/core';\n\nexport type Events = Event[];\n\nexport interface Event {\n entity: string;\n action: string;\n data?: WalkerOS.Properties;\n context?: WalkerOS.OrderedProperties;\n trigger?: Trigger;\n nested: WalkerOS.Entities;\n}\n\nexport type KeyVal = [string, string];\n\nexport type Attributes = Array<string>;\n\nexport type Trigger =\n | 'click'\n | 'custom'\n | 'hover'\n | 'load'\n | 'pulse'\n | 'scroll'\n | 'submit'\n | 'visible'\n | 'visibles'\n | 'wait'\n | string;\n\nexport interface Filter {\n [name: string]: boolean;\n}\n\nexport interface TriggersActionGroups {\n [trigger: string]: TriggerActions;\n}\n\nexport type TriggerActions = Array<TriggerAction>;\n\ninterface TriggerAction {\n trigger: string;\n triggerParams?: string;\n action: string;\n actionParams?: string;\n}\n\nexport type ScrollElements = Array<[HTMLElement, number]>;\n"],"mappings":"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","names":[]}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@walkeros/web-core",
|
|
3
3
|
"description": "Web-specific utilities for walkerOS",
|
|
4
|
-
"version": "3.0
|
|
4
|
+
"version": "3.1.0-next-1773969156384",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"main": "./dist/index.js",
|
|
7
7
|
"module": "./dist/index.mjs",
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
"update": "npx npm-check-updates -u && npm update"
|
|
27
27
|
},
|
|
28
28
|
"devDependencies": {
|
|
29
|
-
"@walkeros/core": "
|
|
29
|
+
"@walkeros/core": "3.1.0-next-1773969156384"
|
|
30
30
|
},
|
|
31
31
|
"repository": {
|
|
32
32
|
"url": "git+https://github.com/elbwalker/walkerOS.git",
|
|
@@ -50,6 +50,6 @@
|
|
|
50
50
|
}
|
|
51
51
|
],
|
|
52
52
|
"dependencies": {
|
|
53
|
-
"@walkeros/core": "
|
|
53
|
+
"@walkeros/core": "3.1.0-next-1773969156384"
|
|
54
54
|
}
|
|
55
55
|
}
|