@walkeros/core 0.1.1 → 0.1.2

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 CHANGED
@@ -255,7 +255,7 @@ interface Fn$1<R = Promise<PushResult>, Config = unknown> extends EventFn<R>, Wa
255
255
  interface WalkerCommands<R = Promise<PushResult>, Config = unknown> {
256
256
  (event: 'walker config', config: Partial<Config>): R;
257
257
  (event: 'walker consent', consent: Consent): R;
258
- (event: 'walker destination', destination: Init$1 | Instance$1, config?: Config$3): R;
258
+ <S, M>(event: 'walker destination', destination: Init$1<S, M> | Instance$1<S, M>, config?: Config$3<S, M>): R;
259
259
  <K extends keyof Functions>(event: 'walker hook', name: K, hookFn: Functions[K]): R;
260
260
  (event: 'walker on', type: Types, rules: SingleOrArray<Options>): R;
261
261
  (event: 'walker user', user: User): R;
@@ -273,18 +273,14 @@ interface PushResult extends Result$1 {
273
273
  ok: boolean;
274
274
  }
275
275
  type Layer = Array<IArguments | DeepPartialEvent | unknown[]>;
276
- interface RegisterDestination<Destination, Config> {
277
- (event: 'walker destination', destination: Destination, config?: Config): Promise<PushResult>;
278
- }
279
276
 
280
277
  type elb_EventFn<R = Promise<PushResult>> = EventFn<R>;
281
278
  type elb_Layer = Layer;
282
279
  type elb_PushData<Config = unknown> = PushData<Config>;
283
280
  type elb_PushResult = PushResult;
284
- type elb_RegisterDestination<Destination, Config> = RegisterDestination<Destination, Config>;
285
281
  type elb_WalkerCommands<R = Promise<PushResult>, Config = unknown> = WalkerCommands<R, Config>;
286
282
  declare namespace elb {
287
- export type { Event$1 as Event, elb_EventFn as EventFn, Fn$1 as Fn, elb_Layer as Layer, elb_PushData as PushData, elb_PushResult as PushResult, elb_RegisterDestination as RegisterDestination, elb_WalkerCommands as WalkerCommands };
283
+ export type { Event$1 as Event, elb_EventFn as EventFn, Fn$1 as Fn, elb_Layer as Layer, elb_PushData as PushData, elb_PushResult as PushResult, elb_WalkerCommands as WalkerCommands };
288
284
  }
289
285
 
290
286
  /**
@@ -547,15 +543,9 @@ declare namespace source {
547
543
  }
548
544
 
549
545
  type AnyObject<T = unknown> = Record<string, T>;
550
- type Elb = globalThis.WalkerOS.Elb;
546
+ type Elb = Fn$1;
551
547
  type AnyFunction = (...args: unknown[]) => unknown;
552
548
  type SingleOrArray<T> = T | Array<T>;
553
- declare global {
554
- namespace WalkerOS {
555
- interface Elb extends Fn$1 {
556
- }
557
- }
558
- }
559
549
  type Events = Array<Event>;
560
550
  type PartialEvent = Partial<Event>;
561
551
  type DeepPartialEvent = DeepPartial<Event>;
package/dist/index.d.ts CHANGED
@@ -255,7 +255,7 @@ interface Fn$1<R = Promise<PushResult>, Config = unknown> extends EventFn<R>, Wa
255
255
  interface WalkerCommands<R = Promise<PushResult>, Config = unknown> {
256
256
  (event: 'walker config', config: Partial<Config>): R;
257
257
  (event: 'walker consent', consent: Consent): R;
258
- (event: 'walker destination', destination: Init$1 | Instance$1, config?: Config$3): R;
258
+ <S, M>(event: 'walker destination', destination: Init$1<S, M> | Instance$1<S, M>, config?: Config$3<S, M>): R;
259
259
  <K extends keyof Functions>(event: 'walker hook', name: K, hookFn: Functions[K]): R;
260
260
  (event: 'walker on', type: Types, rules: SingleOrArray<Options>): R;
261
261
  (event: 'walker user', user: User): R;
@@ -273,18 +273,14 @@ interface PushResult extends Result$1 {
273
273
  ok: boolean;
274
274
  }
275
275
  type Layer = Array<IArguments | DeepPartialEvent | unknown[]>;
276
- interface RegisterDestination<Destination, Config> {
277
- (event: 'walker destination', destination: Destination, config?: Config): Promise<PushResult>;
278
- }
279
276
 
280
277
  type elb_EventFn<R = Promise<PushResult>> = EventFn<R>;
281
278
  type elb_Layer = Layer;
282
279
  type elb_PushData<Config = unknown> = PushData<Config>;
283
280
  type elb_PushResult = PushResult;
284
- type elb_RegisterDestination<Destination, Config> = RegisterDestination<Destination, Config>;
285
281
  type elb_WalkerCommands<R = Promise<PushResult>, Config = unknown> = WalkerCommands<R, Config>;
286
282
  declare namespace elb {
287
- export type { Event$1 as Event, elb_EventFn as EventFn, Fn$1 as Fn, elb_Layer as Layer, elb_PushData as PushData, elb_PushResult as PushResult, elb_RegisterDestination as RegisterDestination, elb_WalkerCommands as WalkerCommands };
283
+ export type { Event$1 as Event, elb_EventFn as EventFn, Fn$1 as Fn, elb_Layer as Layer, elb_PushData as PushData, elb_PushResult as PushResult, elb_WalkerCommands as WalkerCommands };
288
284
  }
289
285
 
290
286
  /**
@@ -547,15 +543,9 @@ declare namespace source {
547
543
  }
548
544
 
549
545
  type AnyObject<T = unknown> = Record<string, T>;
550
- type Elb = globalThis.WalkerOS.Elb;
546
+ type Elb = Fn$1;
551
547
  type AnyFunction = (...args: unknown[]) => unknown;
552
548
  type SingleOrArray<T> = T | Array<T>;
553
- declare global {
554
- namespace WalkerOS {
555
- interface Elb extends Fn$1 {
556
- }
557
- }
558
- }
559
549
  type Events = Array<Event>;
560
550
  type PartialEvent = Partial<Event>;
561
551
  type DeepPartialEvent = DeepPartial<Event>;
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- "use strict";var e,t,n=Object.defineProperty,r=Object.getOwnPropertyDescriptor,o=Object.getOwnPropertyNames,i=Object.prototype.hasOwnProperty,s=(e={"package.json"(e,t){t.exports={name:"@walkeros/core",description:"Core types and platform-agnostic utilities for walkerOS",version:"0.1.1",main:"./dist/index.js",module:"./dist/index.mjs",types:"./dist/index.d.ts",license:"MIT",files:["dist/**"],scripts:{build:"tsup --silent",clean:"rm -rf .turbo && rm -rf node_modules && rm -rf dist",dev:"jest --watchAll --colors",lint:'tsc && eslint "**/*.ts*"',test:"jest",update:"npx npm-check-updates -u && npm update"},dependencies:{},devDependencies:{},repository:{url:"git+https://github.com/elbwalker/walkerOS.git",directory:"packages/core"},author:"elbwalker <hello@elbwalker.com>",homepage:"https://github.com/elbwalker/walkerOS#readme",bugs:{url:"https://github.com/elbwalker/walkerOS/issues"},keywords:["walker","walkerOS","analytics","tracking","data collection","measurement","data privacy","privacy friendly","web analytics","product analytics","core","types","utils"],funding:[{type:"GitHub Sponsors",url:"https://github.com/sponsors/elbwalker"}]}}},function(){return t||(0,e[o(e)[0]])((t={exports:{}}).exports,t),t.exports}),a={};((e,t)=>{for(var r in t)n(e,r,{get:t[r],enumerable:!0})})(a,{Collector:()=>c,Const:()=>k,Data:()=>u,Destination:()=>l,Elb:()=>p,Flow:()=>d,Handler:()=>g,Hooks:()=>m,Mapping:()=>f,On:()=>y,Request:()=>h,Schema:()=>b,Source:()=>w,WalkerOS:()=>v,anonymizeIP:()=>x,assign:()=>j,castToProperty:()=>Q,castValue:()=>L,clone:()=>V,createDestination:()=>R,createEvent:()=>q,debounce:()=>F,filterValues:()=>J,getBrowser:()=>de,getBrowserVersion:()=>ge,getByPath:()=>_,getDeviceType:()=>ye,getEvent:()=>K,getGrantedConsent:()=>B,getHeaders:()=>ae,getId:()=>U,getMappingEvent:()=>ee,getMappingValue:()=>te,getMarketingParameters:()=>W,getOS:()=>me,getOSVersion:()=>fe,isArguments:()=>S,isArray:()=>E,isBoolean:()=>P,isCommand:()=>T,isDefined:()=>A,isElementOrDocument:()=>M,isFunction:()=>D,isNumber:()=>C,isObject:()=>$,isPropertyType:()=>X,isSameType:()=>I,isString:()=>N,onLog:()=>re,parseUserAgent:()=>pe,requestToData:()=>oe,requestToParameter:()=>ie,setByPath:()=>H,throttle:()=>G,throwError:()=>ce,transformData:()=>se,trim:()=>ue,tryCatch:()=>Y,tryCatchAsync:()=>Z,useHooks:()=>le,validateEvent:()=>he,validateProperty:()=>be}),module.exports=(e=>((e,t,s,a)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let c of o(t))i.call(e,c)||c===s||n(e,c,{get:()=>t[c],enumerable:!(a=r(t,c))||a.enumerable});return e})(n({},"__esModule",{value:!0}),e))(a);var c={},u={},l={},p={},d={},g={},m={},f={},y={},h={},b={},w={},v={},k={Utils:{Storage:{Local:"local",Session:"session",Cookie:"cookie"}}};function x(e){return/^(?:\d{1,3}\.){3}\d{1,3}$/.test(e)?e.replace(/\.\d+$/,".0"):""}var O={merge:!0,shallow:!0,extend:!0};function j(e,t={},n={}){n={...O,...n};const r=Object.entries(t).reduce((t,[r,o])=>{const i=e[r];return n.merge&&Array.isArray(i)&&Array.isArray(o)?t[r]=o.reduce((e,t)=>e.includes(t)?e:[...e,t],[...i]):(n.extend||r in e)&&(t[r]=o),t},{});return n.shallow?{...e,...r}:(Object.assign(e,r),e)}function S(e){return"[object Arguments]"===Object.prototype.toString.call(e)}function E(e){return Array.isArray(e)}function P(e){return"boolean"==typeof e}function T(e){return"walker"===e}function A(e){return void 0!==e}function M(e){return e===document||e instanceof Element}function D(e){return"function"==typeof e}function C(e){return"number"==typeof e&&!Number.isNaN(e)}function $(e){return"object"==typeof e&&null!==e&&!E(e)&&"[object Object]"===Object.prototype.toString.call(e)}function I(e,t){return typeof e==typeof t}function N(e){return"string"==typeof e}function V(e,t=new WeakMap){if("object"!=typeof e||null===e)return e;if(t.has(e))return t.get(e);const n=Object.prototype.toString.call(e);if("[object Object]"===n){const n={};t.set(e,n);for(const r in e)Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=V(e[r],t));return n}if("[object Array]"===n){const n=[];return t.set(e,n),e.forEach(e=>{n.push(V(e,t))}),n}if("[object Date]"===n)return new Date(e.getTime());if("[object RegExp]"===n){const t=e;return new RegExp(t.source,t.flags)}return e}function _(e,t="",n){const r=t.split(".");let o=e;for(let e=0;e<r.length;e++){const t=r[e];if("*"===t&&E(o)){const t=r.slice(e+1).join("."),i=[];for(const e of o){const r=_(e,t,n);i.push(r)}return i}if(o=o instanceof Object?o[t]:void 0,!o)break}return A(o)?o:n}function H(e,t,n){const r=V(e),o=t.split(".");let i=r;for(let e=0;e<o.length;e++){const t=o[e];e===o.length-1?i[t]=n:(t in i&&"object"==typeof i[t]&&null!==i[t]||(i[t]={}),i=i[t])}return r}function L(e){if("true"===e)return!0;if("false"===e)return!1;const t=Number(e);return e==t&&""!==e?t:String(e)}function B(e,t={},n={}){const r={...t,...n},o={};let i=void 0===e;return Object.keys(r).forEach(t=>{r[t]&&(o[t]=!0,e&&e[t]&&(i=!0))}),!!i&&o}function R(e,t){const n={...e};return n.config=j(e.config,t,{shallow:!0,merge:!0,extend:!0}),e.config.settings&&t.settings&&(n.config.settings=j(e.config.settings,t.settings,{shallow:!0,merge:!0,extend:!0})),e.config.mapping&&t.mapping&&(n.config.mapping=j(e.config.mapping,t.mapping,{shallow:!0,merge:!0,extend:!0})),n}var{version:z}=s();function q(e={}){const t=e.timestamp||(new Date).setHours(0,13,37,0),n=e.group||"gr0up",r=e.count||1,o=j({name:"entity action",data:{string:"foo",number:1,boolean:!0,array:[0,"text",!1],not:void 0},context:{dev:["test",1]},globals:{lang:"elb"},custom:{completely:"random"},user:{id:"us3r",device:"c00k13",session:"s3ss10n"},nested:[{entity:"child",data:{is:"subordinated"},nested:[],context:{element:["child",0]}}],consent:{functional:!0},id:`${t}-${n}-${r}`,trigger:"test",entity:"entity",action:"action",timestamp:t,timing:3.14,group:n,count:r,version:{source:z,tagging:1},source:{type:"web",id:"https://localhost:80",previous_id:"http://remotehost:9001"}},e,{merge:!1});if(e.name){const[t,n]=e.name.split(" ")??[];t&&n&&(o.entity=t,o.action=n)}return o}function K(e="entity action",t={}){const n=t.timestamp||(new Date).setHours(0,13,37,0),r={data:{id:"ers",name:"Everyday Ruck Snack",color:"black",size:"l",price:420}},o={data:{id:"cc",name:"Cool Cap",size:"one size",price:42}};return q({...{"cart view":{data:{currency:"EUR",value:2*r.data.price},context:{shopping:["cart",0]},globals:{pagegroup:"shop"},nested:[{entity:"product",data:{...r.data,quantity:2},context:{shopping:["cart",0]},nested:[]}],trigger:"load"},"checkout view":{data:{step:"payment",currency:"EUR",value:r.data.price+o.data.price},context:{shopping:["checkout",0]},globals:{pagegroup:"shop"},nested:[{entity:"product",...r,context:{shopping:["checkout",0]},nested:[]},{entity:"product",...o,context:{shopping:["checkout",0]},nested:[]}],trigger:"load"},"order complete":{data:{id:"0rd3r1d",currency:"EUR",shipping:5.22,taxes:73.76,total:555},context:{shopping:["complete",0]},globals:{pagegroup:"shop"},nested:[{entity:"product",...r,context:{shopping:["complete",0]},nested:[]},{entity:"product",...o,context:{shopping:["complete",0]},nested:[]},{entity:"gift",data:{name:"Surprise"},context:{shopping:["complete",0]},nested:[]}],trigger:"load"},"page view":{data:{domain:"www.example.com",title:"walkerOS documentation",referrer:"https://www.elbwalker.com/",search:"?foo=bar",hash:"#hash",id:"/docs/"},globals:{pagegroup:"docs"},trigger:"load"},"product add":{...r,context:{shopping:["intent",0]},globals:{pagegroup:"shop"},nested:[],trigger:"click"},"product view":{...r,context:{shopping:["detail",0]},globals:{pagegroup:"shop"},nested:[],trigger:"load"},"product visible":{data:{...r.data,position:3,promo:!0},context:{shopping:["discover",0]},globals:{pagegroup:"shop"},nested:[],trigger:"load"},"promotion visible":{data:{name:"Setting up tracking easily",position:"hero"},context:{ab_test:["engagement",0]},globals:{pagegroup:"homepage"},trigger:"visible"},"session start":{data:{id:"s3ss10n",start:n,isNew:!0,count:1,runs:1,isStart:!0,storage:!0,referrer:"",device:"c00k13"},user:{id:"us3r",device:"c00k13",session:"s3ss10n",hash:"h4sh",address:"street number",email:"user@example.com",phone:"+49 123 456 789",userAgent:"Mozilla...",browser:"Chrome",browserVersion:"90",deviceType:"desktop",language:"de-DE",country:"DE",region:"HH",city:"Hamburg",zip:"20354",timezone:"Berlin",os:"walkerOS",osVersion:"1.0",screenSize:"1337x420",ip:"127.0.0.0",internal:!0,custom:"value"}}}[e],...t,name:e})}function U(e=6){let t="";for(let n=36;t.length<e;)t+=(Math.random()*n|0).toString(n);return t}function W(e,t={}){const n="clickId",r={},o={utm_campaign:"campaign",utm_content:"content",utm_medium:"medium",utm_source:"source",utm_term:"term",dclid:n,fbclid:n,gclid:n,msclkid:n,ttclid:n,twclid:n,igshid:n,sclid:n};return Object.entries(j(o,t)).forEach(([t,o])=>{const i=e.searchParams.get(t);i&&(o===n&&(o=t,r[n]=t),r[o]=i)}),r}function F(e,t=1e3,n=!1){let r,o=null,i=!1;return(...s)=>new Promise(a=>{const c=n&&!i;o&&clearTimeout(o),o=setTimeout(()=>{o=null,n&&!i||(r=e(...s),a(r))},t),c&&(i=!0,r=e(...s),a(r))})}function G(e,t=1e3){let n=null;return function(...r){if(null===n)return n=setTimeout(()=>{n=null},t),e(...r)}}function X(e){return P(e)||N(e)||C(e)||!A(e)||E(e)&&e.every(X)||$(e)&&Object.values(e).every(X)}function J(e){return P(e)||N(e)||C(e)?e:S(e)?J(Array.from(e)):E(e)?e.map(e=>J(e)).filter(e=>void 0!==e):$(e)?Object.entries(e).reduce((e,[t,n])=>{const r=J(n);return void 0!==r&&(e[t]=r),e},{}):void 0}function Q(e){return X(e)?e:void 0}function Y(e,t,n){return function(...r){try{return e(...r)}catch(e){if(!t)return;return t(e)}finally{n?.()}}}function Z(e,t,n){return async function(...r){try{return await e(...r)}catch(e){if(!t)return;return await t(e)}finally{await(n?.())}}}async function ee(e,t){const[n,r]=(e.name||"").split(" ");if(!t||!n||!r)return{};let o,i="",s=n,a=r;const c=t=>{if(t)return(t=E(t)?t:[t]).find(t=>!t.condition||t.condition(e))};t[s]||(s="*");const u=t[s];return u&&(u[a]||(a="*"),o=c(u[a])),o||(s="*",a="*",o=c(t[s]?.[a])),o&&(i=`${s} ${a}`),{eventMapping:o,mappingKey:i}}async function te(e,t={},n={}){if(!A(e))return;const r=$(e)&&e.consent||n.consent||n.collector?.consent,o=E(t)?t:[t];for(const t of o){const o=await Z(ne)(e,t,{...n,consent:r});if(A(o))return o}}async function ne(e,t,n={}){const{collector:r,consent:o}=n;return(E(t)?t:[t]).reduce(async(t,i)=>{const s=await t;if(s)return s;const a=N(i)?{key:i}:i;if(!Object.keys(a).length)return;const{condition:c,consent:u,fn:l,key:p,loop:d,map:g,set:m,validate:f,value:y}=a;if(c&&!await Z(c)(e,i,r))return;if(u&&!B(u,o))return y;let h=A(y)?y:e;if(l&&(h=await Z(l)(e,i,n)),p&&(h=_(e,p,y)),d){const[t,r]=d,o="this"===t?[e]:await te(e,t,n);E(o)&&(h=(await Promise.all(o.map(e=>te(e,r,n)))).filter(A))}else g?h=await Object.entries(g).reduce(async(t,[r,o])=>{const i=await t,s=await te(e,o,n);return A(s)&&(i[r]=s),i},Promise.resolve({})):m&&(h=await Promise.all(m.map(t=>ne(e,t,n))));f&&!await Z(f)(h)&&(h=void 0);const b=Q(h);return A(b)?b:Q(y)},Promise.resolve(void 0))}function re(e,t=!1){t&&console.dir(e,{depth:4})}function oe(e){const t=String(e),n=t.split("?")[1]||t;return Y(()=>{const e=new URLSearchParams(n),t={};return e.forEach((e,n)=>{const r=n.split(/[[\]]+/).filter(Boolean);let o=t;r.forEach((t,n)=>{const i=n===r.length-1;if(E(o)){const s=parseInt(t,10);i?o[s]=L(e):(o[s]=o[s]||(isNaN(parseInt(r[n+1],10))?{}:[]),o=o[s])}else $(o)&&(i?o[t]=L(e):(o[t]=o[t]||(isNaN(parseInt(r[n+1],10))?{}:[]),o=o[t]))})}),t})()}function ie(e){if(!e)return"";const t=[],n=encodeURIComponent;function r(e,o){null!=o&&(E(o)?o.forEach((t,n)=>r(`${e}[${n}]`,t)):$(o)?Object.entries(o).forEach(([t,n])=>r(`${e}[${t}]`,n)):t.push(`${n(e)}=${n(String(o))}`))}return"object"!=typeof e?n(e):(Object.entries(e).forEach(([e,t])=>r(e,t)),t.join("&"))}function se(e){return void 0===e||I(e,"")?e:JSON.stringify(e)}function ae(e={}){return j({"Content-Type":"application/json; charset=utf-8"},e)}function ce(e){throw new Error(String(e))}function ue(e){return e?e.trim().replace(/^'|'$/g,"").trim():""}function le(e,t,n){return function(...r){let o;const i="post"+t,s=n["pre"+t],a=n[i];return o=s?s({fn:e},...r):e(...r),a&&(o=a({fn:e,result:o},...r)),o}}function pe(e){return e?{userAgent:e,browser:de(e),browserVersion:ge(e),os:me(e),osVersion:fe(e),deviceType:ye(e)}:{}}function de(e){const t=[{name:"Edge",substr:"Edg"},{name:"Chrome",substr:"Chrome"},{name:"Safari",substr:"Safari",exclude:"Chrome"},{name:"Firefox",substr:"Firefox"},{name:"IE",substr:"MSIE"},{name:"IE",substr:"Trident"}];for(const n of t)if(e.includes(n.substr)&&(!n.exclude||!e.includes(n.exclude)))return n.name}function ge(e){const t=[/Edg\/([0-9]+)/,/Chrome\/([0-9]+)/,/Version\/([0-9]+).*Safari/,/Firefox\/([0-9]+)/,/MSIE ([0-9]+)/,/rv:([0-9]+).*Trident/];for(const n of t){const t=e.match(n);if(t)return t[1]}}function me(e){const t=[{name:"Windows",substr:"Windows NT"},{name:"macOS",substr:"Mac OS X"},{name:"Android",substr:"Android"},{name:"iOS",substr:"iPhone OS"},{name:"Linux",substr:"Linux"}];for(const n of t)if(e.includes(n.substr))return n.name}function fe(e){const t=e.match(/(?:Windows NT|Mac OS X|Android|iPhone OS) ([0-9._]+)/);return t?t[1].replace(/_/g,"."):void 0}function ye(e){let t="Desktop";return/Tablet|iPad/i.test(e)?t="Tablet":/Mobi|Android|iPhone|iPod|BlackBerry|Opera Mini|IEMobile|WPDesktop/i.test(e)&&(t="Mobile"),t}function he(e,t=[]){let n,r,o;I(e,{})||ce("Invalid object"),I(e.name,"")?(n=e.name,[r,o]=n.split(" "),r&&o||ce("Invalid event name")):I(e.entity,"")&&I(e.action,"")?(r=e.entity,o=e.action,n=`${r} ${o}`):ce("Missing or invalid name, entity, or action");const i={name:n,data:{},context:{},custom:{},globals:{},user:{},nested:[],consent:{},id:"",trigger:"",entity:r,action:o,timestamp:0,timing:0,group:"",count:0,version:{source:"",tagging:0},source:{type:"",id:"",previous_id:""}};return[{"*":{"*":{name:{maxLength:255},user:{allowedKeys:["id","device","session"]},consent:{allowedValues:[!0,!1]},timestamp:{min:0},timing:{min:0},count:{min:0},version:{allowedKeys:["source","tagging"]},source:{allowedKeys:["type","id","previous_id"]}}}}].concat(t).reduce((e,t)=>["*",r].reduce((e,n)=>["*",o].reduce((e,r)=>{const o=t[n]?.[r];return o?e.concat([o]):e},e),e),[]).reduce((t,n)=>{const r=Object.keys(n).filter(e=>{const t=n[e];return!0===t?.required});return[...Object.keys(e),...r].reduce((t,r)=>{const o=n[r];let i=e[r];return o&&(i=Y(be,e=>{ce(String(e))})(t,r,i,o)),I(i,t[r])&&(t[r]=i),t},t)},i)}function be(e,t,n,r){if(r.validate&&(n=Y(r.validate,e=>{ce(String(e))})(n,t,e)),r.required&&void 0===n&&ce("Missing required property"),I(n,""))r.maxLength&&n.length>r.maxLength&&(r.strict&&ce("Value exceeds maxLength"),n=n.substring(0,r.maxLength));else if(I(n,1))I(r.min,1)&&n<r.min?(r.strict&&ce("Value below min"),n=r.min):I(r.max,1)&&n>r.max&&(r.strict&&ce("Value exceeds max"),n=r.max);else if(I(n,{})){if(r.schema){const e=r.schema;Object.keys(e).reduce((t,n)=>{const r=e[n];let o=t[n];return r&&(r.type&&typeof o!==r.type&&ce(`Type doesn't match (${n})`),o=Y(be,e=>{ce(String(e))})(t,n,o,r)),o},n)}for(const e of Object.keys(n))r.allowedKeys&&!r.allowedKeys.includes(e)&&(r.strict&&ce("Key not allowed"),delete n[e])}return n}//# sourceMappingURL=index.js.map
1
+ "use strict";var e,t,n=Object.defineProperty,r=Object.getOwnPropertyDescriptor,o=Object.getOwnPropertyNames,i=Object.prototype.hasOwnProperty,s=(e={"package.json"(e,t){t.exports={name:"@walkeros/core",description:"Core types and platform-agnostic utilities for walkerOS",version:"0.1.2",main:"./dist/index.js",module:"./dist/index.mjs",types:"./dist/index.d.ts",license:"MIT",files:["dist/**"],scripts:{build:"tsup --silent",clean:"rm -rf .turbo && rm -rf node_modules && rm -rf dist",dev:"jest --watchAll --colors",lint:'tsc && eslint "**/*.ts*"',test:"jest",update:"npx npm-check-updates -u && npm update"},dependencies:{},devDependencies:{},repository:{url:"git+https://github.com/elbwalker/walkerOS.git",directory:"packages/core"},author:"elbwalker <hello@elbwalker.com>",homepage:"https://github.com/elbwalker/walkerOS#readme",bugs:{url:"https://github.com/elbwalker/walkerOS/issues"},keywords:["walker","walkerOS","analytics","tracking","data collection","measurement","data privacy","privacy friendly","web analytics","product analytics","core","types","utils"],funding:[{type:"GitHub Sponsors",url:"https://github.com/sponsors/elbwalker"}]}}},function(){return t||(0,e[o(e)[0]])((t={exports:{}}).exports,t),t.exports}),a={};((e,t)=>{for(var r in t)n(e,r,{get:t[r],enumerable:!0})})(a,{Collector:()=>c,Const:()=>k,Data:()=>u,Destination:()=>l,Elb:()=>p,Flow:()=>d,Handler:()=>g,Hooks:()=>m,Mapping:()=>f,On:()=>y,Request:()=>h,Schema:()=>b,Source:()=>w,WalkerOS:()=>v,anonymizeIP:()=>x,assign:()=>j,castToProperty:()=>Q,castValue:()=>L,clone:()=>V,createDestination:()=>R,createEvent:()=>q,debounce:()=>F,filterValues:()=>J,getBrowser:()=>de,getBrowserVersion:()=>ge,getByPath:()=>_,getDeviceType:()=>ye,getEvent:()=>K,getGrantedConsent:()=>B,getHeaders:()=>ae,getId:()=>U,getMappingEvent:()=>ee,getMappingValue:()=>te,getMarketingParameters:()=>W,getOS:()=>me,getOSVersion:()=>fe,isArguments:()=>S,isArray:()=>E,isBoolean:()=>P,isCommand:()=>T,isDefined:()=>A,isElementOrDocument:()=>M,isFunction:()=>D,isNumber:()=>C,isObject:()=>$,isPropertyType:()=>X,isSameType:()=>I,isString:()=>N,onLog:()=>re,parseUserAgent:()=>pe,requestToData:()=>oe,requestToParameter:()=>ie,setByPath:()=>H,throttle:()=>G,throwError:()=>ce,transformData:()=>se,trim:()=>ue,tryCatch:()=>Y,tryCatchAsync:()=>Z,useHooks:()=>le,validateEvent:()=>he,validateProperty:()=>be}),module.exports=(e=>((e,t,s,a)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let c of o(t))i.call(e,c)||c===s||n(e,c,{get:()=>t[c],enumerable:!(a=r(t,c))||a.enumerable});return e})(n({},"__esModule",{value:!0}),e))(a);var c={},u={},l={},p={},d={},g={},m={},f={},y={},h={},b={},w={},v={},k={Utils:{Storage:{Local:"local",Session:"session",Cookie:"cookie"}}};function x(e){return/^(?:\d{1,3}\.){3}\d{1,3}$/.test(e)?e.replace(/\.\d+$/,".0"):""}var O={merge:!0,shallow:!0,extend:!0};function j(e,t={},n={}){n={...O,...n};const r=Object.entries(t).reduce((t,[r,o])=>{const i=e[r];return n.merge&&Array.isArray(i)&&Array.isArray(o)?t[r]=o.reduce((e,t)=>e.includes(t)?e:[...e,t],[...i]):(n.extend||r in e)&&(t[r]=o),t},{});return n.shallow?{...e,...r}:(Object.assign(e,r),e)}function S(e){return"[object Arguments]"===Object.prototype.toString.call(e)}function E(e){return Array.isArray(e)}function P(e){return"boolean"==typeof e}function T(e){return"walker"===e}function A(e){return void 0!==e}function M(e){return e===document||e instanceof Element}function D(e){return"function"==typeof e}function C(e){return"number"==typeof e&&!Number.isNaN(e)}function $(e){return"object"==typeof e&&null!==e&&!E(e)&&"[object Object]"===Object.prototype.toString.call(e)}function I(e,t){return typeof e==typeof t}function N(e){return"string"==typeof e}function V(e,t=new WeakMap){if("object"!=typeof e||null===e)return e;if(t.has(e))return t.get(e);const n=Object.prototype.toString.call(e);if("[object Object]"===n){const n={};t.set(e,n);for(const r in e)Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=V(e[r],t));return n}if("[object Array]"===n){const n=[];return t.set(e,n),e.forEach(e=>{n.push(V(e,t))}),n}if("[object Date]"===n)return new Date(e.getTime());if("[object RegExp]"===n){const t=e;return new RegExp(t.source,t.flags)}return e}function _(e,t="",n){const r=t.split(".");let o=e;for(let e=0;e<r.length;e++){const t=r[e];if("*"===t&&E(o)){const t=r.slice(e+1).join("."),i=[];for(const e of o){const r=_(e,t,n);i.push(r)}return i}if(o=o instanceof Object?o[t]:void 0,!o)break}return A(o)?o:n}function H(e,t,n){const r=V(e),o=t.split(".");let i=r;for(let e=0;e<o.length;e++){const t=o[e];e===o.length-1?i[t]=n:(t in i&&"object"==typeof i[t]&&null!==i[t]||(i[t]={}),i=i[t])}return r}function L(e){if("true"===e)return!0;if("false"===e)return!1;const t=Number(e);return e==t&&""!==e?t:String(e)}function B(e,t={},n={}){const r={...t,...n},o={};let i=void 0===e;return Object.keys(r).forEach(t=>{r[t]&&(o[t]=!0,e&&e[t]&&(i=!0))}),!!i&&o}function R(e,t){const n={...e};return n.config=j(e.config,t,{shallow:!0,merge:!0,extend:!0}),e.config.settings&&t.settings&&(n.config.settings=j(e.config.settings,t.settings,{shallow:!0,merge:!0,extend:!0})),e.config.mapping&&t.mapping&&(n.config.mapping=j(e.config.mapping,t.mapping,{shallow:!0,merge:!0,extend:!0})),n}var{version:z}=s();function q(e={}){const t=e.timestamp||(new Date).setHours(0,13,37,0),n=e.group||"gr0up",r=e.count||1,o=j({name:"entity action",data:{string:"foo",number:1,boolean:!0,array:[0,"text",!1],not:void 0},context:{dev:["test",1]},globals:{lang:"elb"},custom:{completely:"random"},user:{id:"us3r",device:"c00k13",session:"s3ss10n"},nested:[{entity:"child",data:{is:"subordinated"},nested:[],context:{element:["child",0]}}],consent:{functional:!0},id:`${t}-${n}-${r}`,trigger:"test",entity:"entity",action:"action",timestamp:t,timing:3.14,group:n,count:r,version:{source:z,tagging:1},source:{type:"web",id:"https://localhost:80",previous_id:"http://remotehost:9001"}},e,{merge:!1});if(e.name){const[t,n]=e.name.split(" ")??[];t&&n&&(o.entity=t,o.action=n)}return o}function K(e="entity action",t={}){const n=t.timestamp||(new Date).setHours(0,13,37,0),r={data:{id:"ers",name:"Everyday Ruck Snack",color:"black",size:"l",price:420}},o={data:{id:"cc",name:"Cool Cap",size:"one size",price:42}};return q({...{"cart view":{data:{currency:"EUR",value:2*r.data.price},context:{shopping:["cart",0]},globals:{pagegroup:"shop"},nested:[{entity:"product",data:{...r.data,quantity:2},context:{shopping:["cart",0]},nested:[]}],trigger:"load"},"checkout view":{data:{step:"payment",currency:"EUR",value:r.data.price+o.data.price},context:{shopping:["checkout",0]},globals:{pagegroup:"shop"},nested:[{entity:"product",...r,context:{shopping:["checkout",0]},nested:[]},{entity:"product",...o,context:{shopping:["checkout",0]},nested:[]}],trigger:"load"},"order complete":{data:{id:"0rd3r1d",currency:"EUR",shipping:5.22,taxes:73.76,total:555},context:{shopping:["complete",0]},globals:{pagegroup:"shop"},nested:[{entity:"product",...r,context:{shopping:["complete",0]},nested:[]},{entity:"product",...o,context:{shopping:["complete",0]},nested:[]},{entity:"gift",data:{name:"Surprise"},context:{shopping:["complete",0]},nested:[]}],trigger:"load"},"page view":{data:{domain:"www.example.com",title:"walkerOS documentation",referrer:"https://www.elbwalker.com/",search:"?foo=bar",hash:"#hash",id:"/docs/"},globals:{pagegroup:"docs"},trigger:"load"},"product add":{...r,context:{shopping:["intent",0]},globals:{pagegroup:"shop"},nested:[],trigger:"click"},"product view":{...r,context:{shopping:["detail",0]},globals:{pagegroup:"shop"},nested:[],trigger:"load"},"product visible":{data:{...r.data,position:3,promo:!0},context:{shopping:["discover",0]},globals:{pagegroup:"shop"},nested:[],trigger:"load"},"promotion visible":{data:{name:"Setting up tracking easily",position:"hero"},context:{ab_test:["engagement",0]},globals:{pagegroup:"homepage"},trigger:"visible"},"session start":{data:{id:"s3ss10n",start:n,isNew:!0,count:1,runs:1,isStart:!0,storage:!0,referrer:"",device:"c00k13"},user:{id:"us3r",device:"c00k13",session:"s3ss10n",hash:"h4sh",address:"street number",email:"user@example.com",phone:"+49 123 456 789",userAgent:"Mozilla...",browser:"Chrome",browserVersion:"90",deviceType:"desktop",language:"de-DE",country:"DE",region:"HH",city:"Hamburg",zip:"20354",timezone:"Berlin",os:"walkerOS",osVersion:"1.0",screenSize:"1337x420",ip:"127.0.0.0",internal:!0,custom:"value"}}}[e],...t,name:e})}function U(e=6){let t="";for(let n=36;t.length<e;)t+=(Math.random()*n|0).toString(n);return t}function W(e,t={}){const n="clickId",r={},o={utm_campaign:"campaign",utm_content:"content",utm_medium:"medium",utm_source:"source",utm_term:"term",dclid:n,fbclid:n,gclid:n,msclkid:n,ttclid:n,twclid:n,igshid:n,sclid:n};return Object.entries(j(o,t)).forEach(([t,o])=>{const i=e.searchParams.get(t);i&&(o===n&&(o=t,r[n]=t),r[o]=i)}),r}function F(e,t=1e3,n=!1){let r,o=null,i=!1;return(...s)=>new Promise(a=>{const c=n&&!i;o&&clearTimeout(o),o=setTimeout(()=>{o=null,n&&!i||(r=e(...s),a(r))},t),c&&(i=!0,r=e(...s),a(r))})}function G(e,t=1e3){let n=null;return function(...r){if(null===n)return n=setTimeout(()=>{n=null},t),e(...r)}}function X(e){return P(e)||N(e)||C(e)||!A(e)||E(e)&&e.every(X)||$(e)&&Object.values(e).every(X)}function J(e){return P(e)||N(e)||C(e)?e:S(e)?J(Array.from(e)):E(e)?e.map(e=>J(e)).filter(e=>void 0!==e):$(e)?Object.entries(e).reduce((e,[t,n])=>{const r=J(n);return void 0!==r&&(e[t]=r),e},{}):void 0}function Q(e){return X(e)?e:void 0}function Y(e,t,n){return function(...r){try{return e(...r)}catch(e){if(!t)return;return t(e)}finally{n?.()}}}function Z(e,t,n){return async function(...r){try{return await e(...r)}catch(e){if(!t)return;return await t(e)}finally{await(n?.())}}}async function ee(e,t){const[n,r]=(e.name||"").split(" ");if(!t||!n||!r)return{};let o,i="",s=n,a=r;const c=t=>{if(t)return(t=E(t)?t:[t]).find(t=>!t.condition||t.condition(e))};t[s]||(s="*");const u=t[s];return u&&(u[a]||(a="*"),o=c(u[a])),o||(s="*",a="*",o=c(t[s]?.[a])),o&&(i=`${s} ${a}`),{eventMapping:o,mappingKey:i}}async function te(e,t={},n={}){if(!A(e))return;const r=$(e)&&e.consent||n.consent||n.collector?.consent,o=E(t)?t:[t];for(const t of o){const o=await Z(ne)(e,t,{...n,consent:r});if(A(o))return o}}async function ne(e,t,n={}){const{collector:r,consent:o}=n;return(E(t)?t:[t]).reduce(async(t,i)=>{const s=await t;if(s)return s;const a=N(i)?{key:i}:i;if(!Object.keys(a).length)return;const{condition:c,consent:u,fn:l,key:p,loop:d,map:g,set:m,validate:f,value:y}=a;if(c&&!await Z(c)(e,i,r))return;if(u&&!B(u,o))return y;let h=A(y)?y:e;if(l&&(h=await Z(l)(e,i,n)),p&&(h=_(e,p,y)),d){const[t,r]=d,o="this"===t?[e]:await te(e,t,n);E(o)&&(h=(await Promise.all(o.map(e=>te(e,r,n)))).filter(A))}else g?h=await Object.entries(g).reduce(async(t,[r,o])=>{const i=await t,s=await te(e,o,n);return A(s)&&(i[r]=s),i},Promise.resolve({})):m&&(h=await Promise.all(m.map(t=>ne(e,t,n))));f&&!await Z(f)(h)&&(h=void 0);const b=Q(h);return A(b)?b:Q(y)},Promise.resolve(void 0))}function re(e,t=!1){t&&console.dir(e,{depth:4})}function oe(e){const t=String(e),n=t.split("?")[1]||t;return Y(()=>{const e=new URLSearchParams(n),t={};return e.forEach((e,n)=>{const r=n.split(/[[\]]+/).filter(Boolean);let o=t;r.forEach((t,n)=>{const i=n===r.length-1;if(E(o)){const s=parseInt(t,10);i?o[s]=L(e):(o[s]=o[s]||(isNaN(parseInt(r[n+1],10))?{}:[]),o=o[s])}else $(o)&&(i?o[t]=L(e):(o[t]=o[t]||(isNaN(parseInt(r[n+1],10))?{}:[]),o=o[t]))})}),t})()}function ie(e){if(!e)return"";const t=[],n=encodeURIComponent;function r(e,o){null!=o&&(E(o)?o.forEach((t,n)=>r(`${e}[${n}]`,t)):$(o)?Object.entries(o).forEach(([t,n])=>r(`${e}[${t}]`,n)):t.push(`${n(e)}=${n(String(o))}`))}return"object"!=typeof e?n(e):(Object.entries(e).forEach(([e,t])=>r(e,t)),t.join("&"))}function se(e){return void 0===e||I(e,"")?e:JSON.stringify(e)}function ae(e={}){return j({"Content-Type":"application/json; charset=utf-8"},e)}function ce(e){throw new Error(String(e))}function ue(e){return e?e.trim().replace(/^'|'$/g,"").trim():""}function le(e,t,n){return function(...r){let o;const i="post"+t,s=n["pre"+t],a=n[i];return o=s?s({fn:e},...r):e(...r),a&&(o=a({fn:e,result:o},...r)),o}}function pe(e){return e?{userAgent:e,browser:de(e),browserVersion:ge(e),os:me(e),osVersion:fe(e),deviceType:ye(e)}:{}}function de(e){const t=[{name:"Edge",substr:"Edg"},{name:"Chrome",substr:"Chrome"},{name:"Safari",substr:"Safari",exclude:"Chrome"},{name:"Firefox",substr:"Firefox"},{name:"IE",substr:"MSIE"},{name:"IE",substr:"Trident"}];for(const n of t)if(e.includes(n.substr)&&(!n.exclude||!e.includes(n.exclude)))return n.name}function ge(e){const t=[/Edg\/([0-9]+)/,/Chrome\/([0-9]+)/,/Version\/([0-9]+).*Safari/,/Firefox\/([0-9]+)/,/MSIE ([0-9]+)/,/rv:([0-9]+).*Trident/];for(const n of t){const t=e.match(n);if(t)return t[1]}}function me(e){const t=[{name:"Windows",substr:"Windows NT"},{name:"macOS",substr:"Mac OS X"},{name:"Android",substr:"Android"},{name:"iOS",substr:"iPhone OS"},{name:"Linux",substr:"Linux"}];for(const n of t)if(e.includes(n.substr))return n.name}function fe(e){const t=e.match(/(?:Windows NT|Mac OS X|Android|iPhone OS) ([0-9._]+)/);return t?t[1].replace(/_/g,"."):void 0}function ye(e){let t="Desktop";return/Tablet|iPad/i.test(e)?t="Tablet":/Mobi|Android|iPhone|iPod|BlackBerry|Opera Mini|IEMobile|WPDesktop/i.test(e)&&(t="Mobile"),t}function he(e,t=[]){let n,r,o;I(e,{})||ce("Invalid object"),I(e.name,"")?(n=e.name,[r,o]=n.split(" "),r&&o||ce("Invalid event name")):I(e.entity,"")&&I(e.action,"")?(r=e.entity,o=e.action,n=`${r} ${o}`):ce("Missing or invalid name, entity, or action");const i={name:n,data:{},context:{},custom:{},globals:{},user:{},nested:[],consent:{},id:"",trigger:"",entity:r,action:o,timestamp:0,timing:0,group:"",count:0,version:{source:"",tagging:0},source:{type:"",id:"",previous_id:""}};return[{"*":{"*":{name:{maxLength:255},user:{allowedKeys:["id","device","session"]},consent:{allowedValues:[!0,!1]},timestamp:{min:0},timing:{min:0},count:{min:0},version:{allowedKeys:["source","tagging"]},source:{allowedKeys:["type","id","previous_id"]}}}}].concat(t).reduce((e,t)=>["*",r].reduce((e,n)=>["*",o].reduce((e,r)=>{const o=t[n]?.[r];return o?e.concat([o]):e},e),e),[]).reduce((t,n)=>{const r=Object.keys(n).filter(e=>{const t=n[e];return!0===t?.required});return[...Object.keys(e),...r].reduce((t,r)=>{const o=n[r];let i=e[r];return o&&(i=Y(be,e=>{ce(String(e))})(t,r,i,o)),I(i,t[r])&&(t[r]=i),t},t)},i)}function be(e,t,n,r){if(r.validate&&(n=Y(r.validate,e=>{ce(String(e))})(n,t,e)),r.required&&void 0===n&&ce("Missing required property"),I(n,""))r.maxLength&&n.length>r.maxLength&&(r.strict&&ce("Value exceeds maxLength"),n=n.substring(0,r.maxLength));else if(I(n,1))I(r.min,1)&&n<r.min?(r.strict&&ce("Value below min"),n=r.min):I(r.max,1)&&n>r.max&&(r.strict&&ce("Value exceeds max"),n=r.max);else if(I(n,{})){if(r.schema){const e=r.schema;Object.keys(e).reduce((t,n)=>{const r=e[n];let o=t[n];return r&&(r.type&&typeof o!==r.type&&ce(`Type doesn't match (${n})`),o=Y(be,e=>{ce(String(e))})(t,n,o,r)),o},n)}for(const e of Object.keys(n))r.allowedKeys&&!r.allowedKeys.includes(e)&&(r.strict&&ce("Key not allowed"),delete n[e])}return n}//# sourceMappingURL=index.js.map