From c7537cc9a0b00c531a3970f694412ec2d536c51a Mon Sep 17 00:00:00 2001 From: Tyson Cleary Date: Thu, 11 Jan 2024 16:32:25 -0800 Subject: [PATCH 1/2] upgrade deps, align eslint with dynamic tracker --- .eslintignore | 3 + .eslintrc | 36 - .eslintrc.json | 66 + .lintstagedrc.json | 3 + babel.config.json | 2 +- dist/w.js | 3 +- dist/w.js.map | 2 +- dist/wpt.js | 1092 ++--- package.json | 45 +- rollup.config.js => rollup.config.mjs | 12 +- ...ig.snippet.js => rollup.config.snippet.mjs | 0 rollup.config.watch.js | 29 - rollup.config.watch.mjs | 8 + yarn.lock | 3699 ++++++++--------- 14 files changed, 2229 insertions(+), 2771 deletions(-) create mode 100644 .eslintignore delete mode 100644 .eslintrc create mode 100644 .eslintrc.json create mode 100644 .lintstagedrc.json rename rollup.config.js => rollup.config.mjs (78%) rename rollup.config.snippet.js => rollup.config.snippet.mjs (100%) delete mode 100644 rollup.config.watch.js create mode 100644 rollup.config.watch.mjs diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000..b0acead --- /dev/null +++ b/.eslintignore @@ -0,0 +1,3 @@ +dist +test +src/snippet.js diff --git a/.eslintrc b/.eslintrc deleted file mode 100644 index ea84087..0000000 --- a/.eslintrc +++ /dev/null @@ -1,36 +0,0 @@ -{ - "root": true, - "env": { - "browser": true, - "mocha": true - }, - "rules": { - "no-dupe-args": "error", - "no-unsafe-negation": "error", - "eqeqeq": "warn", - "no-extra-bind": "error", - "no-extra-label": "error", - "no-implicit-coercion": "error", - "no-multi-spaces": "error", - "no-useless-rename": "error", - "no-else-return": "error", - "no-extra-boolean-cast": 2, - "no-useless-computed-key": "error", - "no-console": 2, - "sort-imports": [ - "error", - { - "ignoreDeclarationSort": true - } - ], - "no-mixed-operators": 1 - }, - "plugins": ["import"], - "parser": "@babel/eslint-parser", - "parserOptions": { - "sourceType": "module" - }, - "settings": { - "import/parser": "@babel/eslint-parser" - } -} diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000..dec2b8f --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,66 @@ +{ + "root": true, + "env": { + "browser": true, + "mocha": true + }, + "extends": [ + "plugin:prettier/recommended", + "prettier" + ], + "rules": { + "no-dupe-args": "error", + "no-unsafe-negation": "error", + "eqeqeq": "warn", + "no-extra-bind": "error", + "no-extra-label": "error", + "no-implicit-coercion": "error", + "no-multi-spaces": "error", + "no-var": "error", + "prefer-const": "error", + "no-useless-rename": [ + "error", + { + "ignoreDestructuring": true + } + ], + "prefer-destructuring": [ + "warn", + { + "array": false, + "object": true + } + ], + "no-else-return": "error", + "no-extra-boolean-cast": "error", + "no-useless-computed-key": "error", + "no-console": "warn", + "no-mixed-operators": "warn", + "simple-import-sort/imports": [ + "error", + { + "groups": [ + [ + "^\\u0000", + "^" + ], + [ + "^\\.\\.(?!/?$)", + "^\\.\\./?$", + "^\\./(?=.*/)(?!/?$)", + "^\\.(?!/?$)", + "^\\./?$", + "^\\." + ] + ] + } + ], + "simple-import-sort/exports": "error", + "unused-imports/no-unused-imports": "error" + }, + "plugins": ["simple-import-sort", "unused-imports"], + "parser": "@babel/eslint-parser", + "parserOptions": { + "sourceType": "module" + } +} diff --git a/.lintstagedrc.json b/.lintstagedrc.json new file mode 100644 index 0000000..bbd66cc --- /dev/null +++ b/.lintstagedrc.json @@ -0,0 +1,3 @@ +{ + "*.{mjs,js}": ["yarn eslint --fix"] +} diff --git a/babel.config.json b/babel.config.json index 10cb6f4..630d382 100644 --- a/babel.config.json +++ b/babel.config.json @@ -1,5 +1,5 @@ { - "plugins": ["lodash"], + "plugins": ["@sigmacomputing/babel-plugin-lodash"], "presets": [ [ "@babel/preset-env", diff --git a/dist/w.js b/dist/w.js index 85e6194..a1d5ece 100644 --- a/dist/w.js +++ b/dist/w.js @@ -3,6 +3,5 @@ * * For license information please see https://static.woopra.com/js/w.js.LICENSE.txt */ - -!function(){"use strict";function t(t){return void 0===t}var e="object"==typeof global&&global&&global.Object===Object&&global,n="object"==typeof self&&self&&self.Object===Object&&self,i=e||n||Function("return this")(),o=i.Symbol,a=Object.prototype,r=a.hasOwnProperty,s=a.toString,c=o?o.toStringTag:void 0;var u=Object.prototype.toString;var l=o?o.toStringTag:void 0;function h(t){return null==t?void 0===t?"[object Undefined]":"[object Null]":l&&l in Object(t)?function(t){var e=r.call(t,c),n=t[c];try{t[c]=void 0;var i=!0}catch(t){}var o=s.call(t);return i&&(e?t[c]=n:delete t[c]),o}(t):function(t){return u.call(t)}(t)}function d(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}function f(t){if(!d(t))return!1;var e=h(t);return"[object Function]"==e||"[object GeneratorFunction]"==e||"[object AsyncFunction]"==e||"[object Proxy]"==e}var p=function(){return i.Date.now()},g=/\s/;var m=/^\s+/;function v(t){return t?t.slice(0,function(t){for(var e=t.length;e--&&g.test(t.charAt(e)););return e}(t)+1).replace(m,""):t}function _(t){return null!=t&&"object"==typeof t}function w(t){return"symbol"==typeof t||_(t)&&"[object Symbol]"==h(t)}var y=/^[-+]0x[0-9a-f]+$/i,k=/^0b[01]+$/i,b=/^0o[0-7]+$/i,C=parseInt;function E(t){if("number"==typeof t)return t;if(w(t))return NaN;if(d(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=d(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=v(t);var n=k.test(t);return n||b.test(t)?C(t.slice(2),n?2:8):y.test(t)?NaN:+t}var S=Math.max,D=Math.min;function x(t,e,n){var i,o,a,r,s,c,u=0,l=!1,h=!1,f=!0;if("function"!=typeof t)throw new TypeError("Expected a function");function g(e){var n=i,a=o;return i=o=void 0,u=e,r=t.apply(a,n)}function m(t){return u=t,s=setTimeout(_,e),l?g(t):r}function v(t){var n=t-c;return void 0===c||n>=e||n<0||h&&t-u>=a}function _(){var t=p();if(v(t))return w(t);s=setTimeout(_,function(t){var n=e-(t-c);return h?D(n,a-(t-u)):n}(t))}function w(t){return s=void 0,f&&i?g(t):(i=o=void 0,r)}function y(){var t=p(),n=v(t);if(i=arguments,o=this,c=t,n){if(void 0===s)return m(c);if(h)return clearTimeout(s),s=setTimeout(_,e),g(c)}return void 0===s&&(s=setTimeout(_,e)),r}return e=E(e)||0,d(n)&&(l=!!n.leading,a=(h="maxWait"in n)?S(E(n.maxWait)||0,e):a,f="trailing"in n?!!n.trailing:f),y.cancel=function(){void 0!==s&&clearTimeout(s),u=0,i=c=o=s=void 0},y.flush=function(){return void 0===s?r:w(p())},y}var N;var O,B=((N={}).eu="www.woopra.com/track/",N.kr="kr.track.airis.appier.net/track/",N.us="us.track.airis.appier.net/track/",N),j="__woopraid",P=["campaign","content","id","medium","source","term"],I=["com.au","net.au","org.au","co.hu","com.ru","ac.za","net.za","com.za","co.za","co.uk","org.uk","me.uk","net.uk"],T="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",A=new RegExp("__woopraid=([^&#]+)"),U="action",R="page",L="scroll depth",W="pv",$="idptnc",M="_blank",F="data-tracked",H="ce_",z="co_",q="ce",Q="update",J="active",K="passive",V="hidden",G="frozen",X="terminated",Y="beforeunload",Z="blur",tt="click",et="download",nt="focus",it="freeze",ot="link",at="mousemove",rt="outgoing",st="pagehide",ct="pageshow",ut="resume",lt="scroll",ht="statechange",dt="unload",ft="visibilitychange",pt="app",gt="appier_app_id",mt="augment_action",vt="auto_decorate",_t="beacons",wt="campaign_once",yt="click_tracking_matcher_selectors",kt="click_pause",bt="context",Ct="cookie_domain",Et="cookie_expire",St="cookie_name",Dt="cookie_path",xt="cookie_secure",Nt="cross_domain",Ot="domain",Bt="download_extensions",jt="download_pause",Pt="download_tracking",It="form_pause",Tt="hide_campaign",At="hide_xdm_data",Ut="idle_threshold",Rt="idle_timeout",Lt="ignore_query_url",Wt="map_query_params",$t="outgoing_pause",Mt="outgoing_tracking",Ft="personalization",Ht="ping",zt="ping_interval",qt="protocol",Qt="region",Jt="save_url_hash",Kt="third_party",Vt="use_cookies",Gt=[[$,$],["$duration","duration"],["$domain",Ot],["$app",pt],["$timestamp","timestamp"],["$action","event"],[gt,gt]],Xt=["avi","css","dmg","doc","eps","exe","js","m4v","mov","mp3","mp4","msi","pdf","ppt","rar","svg","txt","vsd","vxd","wma","wmv","xls","xlsx","zip"],Yt=["a"],Zt=["a","button","input[type=button]","input[type=submit]","[role=button]"],te=((O={}).auto_decorate=void 0,O.download_tracking=!1,O.outgoing_ignore_subdomain=!0,O.outgoing_tracking=!1,O),ee={};function ne(t,e){ee[t][e]=null}function ie(t,e,n){null!=t&&t.addEventListener&&t.addEventListener(e,n)}function oe(t,e,n){var i=t.instanceName;ee[e]||(ee[e]={}),ee[e][i]=t,t.__l&&(t.__l[e]||(t.__l[e]=[]),t.__l[e].push(n))}function ae(t){var e,n,i=ee[t];if(i)for(var o in i)if(i.hasOwnProperty(o)&&(n=(e=i[o])&&e.__l)&&n[t])for(var a=0;at.length)&&(e=t.length);for(var n=0,i=new Array(e);n=t.length?{done:!0}:{done:!1,value:t[i++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function he(t){var e=function(t,e){if("object"!=typeof t||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var i=n.call(t,e||"default");if("object"!=typeof i)return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==typeof e?e:String(e)}var de=function(){function t(){this._registry={}}var e=t.prototype;return e.addEventListener=function(t,e,n){this._getRegistry(t).push(e)},e.removeEventListener=function(t,e,n){var i=this._getRegistry(t),o=i.indexOf(e);o>-1&&i.splice(o,1)},e.dispatchEvent=function(t){return t.target=this,Object.freeze(t),this._getRegistry(t.type).forEach((function(e){return e(t)})),!0},e._getRegistry=function(t){return this._registry[t]=this._registry[t]||[]},t}(),fe=function(t,e){this.type=t,this.newState=e.newState,this.oldState=e.oldState,this.originalEvent=e.originalEvent},pe="object"==typeof safari&&safari.pushNotification,ge="onpageshow"in self,me=[nt,Z,ft,it,ut,ct,ge?st:dt],ve=function(t){return t.preventDefault(),t.returnValue="Are you sure?"},_e=[[J,K,V,X],[J,K,V,G],[V,K,J],[G,V],[G,J],[G,K]].map((function(t){return t.reduce((function(t,e,n){return t[e]=n,t}),{})})),we=function(){return document.visibilityState===V?V:document.hasFocus()?J:K},ye=new(function(t){var e,n;function i(){var e;e=t.call(this)||this;var n=we();return e._state=n,e._unsavedChanges=[],e._handleEvents=e._handleEvents.bind(function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(e)),me.forEach((function(t){return addEventListener(t,e._handleEvents,!0)})),pe&&addEventListener(Y,(function(t){e._safariBeforeUnloadTimeout=setTimeout((function(){t.defaultPrevented||t.returnValue.length>0||e._dispatchChangesIfNeeded(t,V)}),0)})),e}n=t,(e=i).prototype=Object.create(n.prototype),e.prototype.constructor=e,ce(e,n);var o,a,r,s=i.prototype;return s.addUnsavedChanges=function(t){!this._unsavedChanges.indexOf(t)>-1&&(0===this._unsavedChanges.length&&addEventListener(Y,ve),this._unsavedChanges.push(t))},s.removeUnsavedChanges=function(t){var e=this._unsavedChanges.indexOf(t);e>-1&&(this._unsavedChanges.splice(e,1),0===this._unsavedChanges.length&&removeEventListener(Y,ve))},s._dispatchChangesIfNeeded=function(t,e){if(e!==this._state)for(var n=function(t,e){for(var n,i=0;n=_e[i];++i){var o=n[t],a=n[e];if(o>=0&&a>=0&&a>o)return Object.keys(n).slice(o,a+1)}return[]}(this._state,e),i=0;i1?e.unshift(s+"["+o+"]"):e.unshift(s),n=n.parentNode}return e.slice(1).join(" > ")}function He(e){var n=e.srcElement||e.target;Te(e)&&ae(tt,e,n),(te.download_tracking||te.outgoing_tracking)&&(t(n=Me(e.srcElement||e.target,Yt))||null===n||n.getAttribute(F)||ae(ot,e,n))}function ze(e){var n;ae(at,e,Date.now()),te.auto_decorate&&(t(n=Me(e.srcElement||e.target,Yt))||null===n||ae(vt,n))}function qe(t){ae(at,t,Date.now())}var Qe=function(t,e,n){var i=!0,o=!0;if("function"!=typeof t)throw new TypeError("Expected a function");return d(n)&&(i="leading"in n?!!n.leading:i,o="trailing"in n?!!n.trailing:o),x(t,e,{leading:i,maxWait:e,trailing:o})}((function(t){ae(lt,t)}),500);function Je(t){ae(ht,t)}function Ke(){}var Ve=function(){function t(t,e,n,i){this.woopra=t,this.id=e,this.params=n,this.meta=i}var e=t.prototype;return e.update=function(t,e){void 0===t&&(t={}),t.event&&t.event!==this.params.event&&(this.params.event=t.event),this.woopra.update(this.id,se({},t,{$action:this.params.event}),e)},e.cancel=function(){this.woopra.cancelAction(this.id)},t}();function Ge(t,e,n){return t==t&&(void 0!==n&&(t=t<=n?t:n),void 0!==e&&(t=t>=e?t:e)),t}var Xe=o?o.prototype:void 0,Ye=Xe?Xe.toString:void 0;function Ze(t){if("string"==typeof t)return t;if(ke(t))return function(t,e){for(var n=-1,i=null==t?0:t.length,o=Array(i);++n=0;o-=1)if(!(""===t.elements[o].name||n.indexOf(t.elements[o].name)>-1))switch(t.elements[o].nodeName){case"INPUT":switch(t.elements[o].type){case"text":case"hidden":case rn:case cn:case sn:i[t.elements[o].name]=t.elements[o].value;break;case"checkbox":case"radio":t.elements[o].checked&&(i[t.elements[o].name]=t.elements[o].value)}break;case"TEXTAREA":i[t.elements[o].name]=t.elements[o].value;break;case"SELECT":switch(t.elements[o].type){case"select-one":i[t.elements[o].name]=t.elements[o].value;break;case"select-multiple":for(var a=t.elements[o].options.length-1;a>=0;a-=1)t.elements[o].options[a].selected&&(i[t.elements[o].name]=t.elements[o].options[a].value)}break;case"BUTTON":switch(t.elements[o].type){case cn:case sn:case rn:i[t.elements[o].name]=t.elements[o].value}}return i}},ln._on=oe,ln._fire=ae,ln.attachEvent=ie,ln.startsWith=function(t,e,n){return t=nn(t),n=null==n?0:Ge(en(n),0,t.length),e=Ze(e),t.slice(n,n+e.length)==e},ln.endsWith=function(t,e,n){t=nn(t),e=Ze(e);var i=t.length,o=n=void 0===n?i:Ge(en(n),0,i);return(n-=e.length)>=0&&t.slice(n,o)==e};var dn=ln._fire,fn=function(){function e(t){var e;this.visitorData={},this.sessionData={},this.orgData={},this.options=((e={}).app="js-client",e.beacons=f(navigator.sendBeacon),e.campaign_once=!1,e.click_tracking_matcher_selectors=Zt,e.cookie_domain="."+ln.getHostnameNoWww(),e.cookie_expire=new Date((new Date).setDate((new Date).getDate()+730)),e.cookie_name="wooTracker",e.cookie_path="/",e.cookie_secure="https:"===ln.location("protocol"),e.cross_domain=!1,e.download_extensions=Xt,e.download_pause=200,e.download_tracking=!1,e.hide_campaign=!1,e.hide_xdm_data=!1,e.idle_threshold=1e4,e.idle_timeout=6e5,e.ignore_query_url=!1,e.map_query_params={},e.outgoing_ignore_subdomain=!0,e.outgoing_pause=200,e.outgoing_tracking=!1,e.personalization=!0,e.ping_interval=12e3,e.ping=!1,e.protocol="https",e.region="eu",e.save_url_hash=!0,e.third_party=!1,e.click_pause=250,e.form_pause=250,e.use_cookies=!0,e),this.instanceName=t||"woopra",this.idle=0,this.cookie="",this.last_activity=Date.now(),this.loaded=!1,this.dirtyCookie=!1,this.sentCampaign=!1,this.version=11,this.pending=[],this.beaconQueue=[],this.lastAction=null,t&&""!==t&&(window[t]=this)}var n=e.prototype;return n.init=function(){var t=this;this.__l={},this._processQueue("config"),this._setupCookie(),this._bindEvents(),setTimeout((function(){return t._processQueue()}),1),this.loaded=!0;var e=this.config("initialized");f(e)&&e(this.instanceName),this.config(At)&&ln.hideCrossDomainId()},n._processQueue=function(e){var n=window.__woo?window.__woo[this.instanceName]:n;if((n=window._w?window._w[this.instanceName]:n)&&n._e)for(var i=n._e,o=0;o0)for(var s in i)r(i[s],t)},n.trackFormHandler=function(t,e,n,i){void 0===i&&(i={});var o=!1;if(!e.getAttribute(F)){var a=Boolean(this.config(_t)),r=ln.serializeForm(e,i);if(f(i.identify)){var s=i.identify(r)||{};s&&this.identify(s)}var c=f(i.onBeforeSend)?i.onBeforeSend:void 0,u=f(i.callback)?function(){return i.callback(r)}:void 0,l=f(i.onError)?i.onError:void 0;if(i.noSubmit||e.setAttribute(F,1),i.noSubmit||a)this.track(n,r,{onBeforeSend:c,onError:l,onSuccess:u,useBeacon:a});else{t.preventDefault(),t.stopPropagation();var h=setTimeout((function(){o||e.submit()}),this.config(It));this.track(n,r,{onBeforeSend:c,onSuccess:function(){clearTimeout(h),u&&u(),o||e.submit(),o=!0},onError:l})}}},n.trackClick=function(t,e,n,i){var o=this;void 0===t&&(t="Item Clicked"),void 0===i&&(i={});var a=[],r=function(t,e,n,i){ie(t,tt,(function(a){o.trackClickHandler(a,t,e,n,i)}))};if(a=i.elements?i.elements:Ae(e,i))for(var s=0;sthis.config(Ut)&&(this.idle=t-this.last_activity),this},n.push=function(t){return this._push({endpoint:"identify",visitorData:this.visitorData,sessionData:this.sessionData,orgData:this.orgData,callback:t}),this.sendBeacons(),this},n._updateDurations=function(t,e){var n=Date.now();function i(i){var o,a,r;switch(e){case J:case K:var s;return n-i.meta.leave>i.params.timeout?((s={}).expired=!0,s):e===J&&t===K||e===K&&t===J?{}:((o={}).timestamp=n,o);case V:return(a={}).dirty=i.meta.dirty||n-i.meta.timestamp>100,a.duration=i.meta.duration+(n-i.meta.timestamp),a.leave=n,a;case X:return(r={}).dirty=i.meta.dirty||n-i.meta.leave>100,r;default:return{}}}this.pending=this.pending.map((function(t){return t.lifecycle!==R?t:se({},t,{meta:se({},t.meta,i(t))})})),this.lastAction&&(this.lastAction=se({},this.lastAction,{meta:se({},this.lastAction.meta,i(this.lastAction))}))},n._processLifecycle=function(t){var e,n=this,i=[];(this.pending.forEach((function(t){var e;t.meta.expired&&!t.meta.cancelled&&t.meta.retrack&&i.push(se({},t.args,{eventData:se({},t.args.eventData||{},(e={},e[$]=Ie(),e.returning=!0,e))}))})),i.forEach((function(t){return n._push(t)})),this.pending=this.pending.filter((function(e){return!e.meta.expired&&(e.meta.dirty&&n.beaconQueue.push({lifecycle:e.lifecycle,endpoint:e.endpoint,params:se({},e.params),meta:se({},e.meta),successCallback:e.callback,errorCallback:e.errorCallback}),!e.meta.cancelled&&(e.lifecycle===R&&t!==R))})),this.pending=this.pending.map((function(t){var e;return se({},t,{meta:se({},t.meta,(e={},e.dirty=!1,e.sent=!0,e))})})),t===R&&this.lastAction)&&this.beaconQueue.push({lifecycle:R,endpoint:q,params:se({},this.lastAction.params),meta:se({},this.lastAction.meta,(e={},e.sent=!0,e))});return i.length>0},n._drainBeaconQueue=function(){var t=this,e=this.config(Vt);function n(t){t[$],t.cookie,t.project,t.event;var e=function(t,e){if(null==t)return{};var n,i,o={},a=Object.keys(t);for(i=0;i=0||(o[n]=t[n]);return o}(t,[$,"cookie","project","event"].map(he));return Object.keys(e).length>0}var i=this.beaconQueue.reduce((function(t,e){return t[e.params[$]]=[],t}),{});this.beaconQueue.forEach((function(t){i[t.params[$]].push(t)})),this.beaconQueue=[];var o=Object.keys(i).map((function(n){var o=i[n],a={endpoint:void 0,params:{},onSuccess:[],onError:[]};return o.forEach((function(n){var i;a.endpoint||(n.endpoint===q&&n.meta.sent?a.endpoint=Q:a.endpoint=n.endpoint),a.params.project=n.params.project,a.params.event=n.params.event,a.params[$]=n.params[$],e&&(a.params.cookie=t.getCookie()||t.cookie),(n.lifecycle===R||n.params[$]===(null==(i=t.lastAction)?void 0:i.id))&&n.meta.duration>0&&(a.params.duration=n.meta.duration),n.meta[L]&&(a.params["ce_scroll depth"]=Math.round(1e4*n.meta[L])/1e4),n.meta.sent||(a.params=se({},a.params,n.params),f(n.successCallback)&&a.onSuccess.push(n.successCallback),f(n.errorCallback)&&a.onError.push(n.errorCallback))})),a.params.project||(a.params.project=t.config(Ot)||ln.getHostnameNoWww()),a})).filter((function(t){return n(t.params)})),a=navigator.sendBeacon&&navigator.sendBeacon.bind(navigator),r=Boolean(this.config(_t))&&f(a);if(o.length>0)if(r){var s=[""];o.map((function(t){var e=t.endpoint,n=t.params;return JSON.stringify({endpoint:e,params:n})})).forEach((function(t){new Blob([""+s[s.length-1]+t]).size>=65e3&&s.push(""),s[s.length-1]+=t+"\n"})),s.forEach((function(e,n){var i=new FormData;i.append("payload",e.slice(0,-1));try{a(t.getEndpoint("push"),i)}catch(t){console.error("Woopra: sendBeacon failed:",t)}})),o.forEach((function(t){t.onSuccess.forEach((function(e){return We(e,t.params.event)}))}))}else o.forEach((function(e){var n=t.getEndpoint(e.endpoint)+"?"+ln.buildUrlParams(se({close:!0},e.params));ln.loadScript(n,(function(){return e.onSuccess.forEach((function(t){return We(t,e.params.event)}))}),(function(){return e.onError.forEach((function(t){return We(t,e.params.event)}))}))}))},n.sendBeacons=function(t){void 0===t&&(t=U),this._processLifecycle(t),this._drainBeaconQueue()},n.sleep=function(){},n._touch=function(t){void 0===t&&(t=Date.now()),this.last_activity=t,this.idle=0},n.moved=function(t,e){this._touch(e)},n.onClick=function(t){if(this.config("click_tracking")){var e=Boolean(this.config(_t)),n=Me(t.target,this.config(yt));if(n){var i=n.tagName.toLowerCase(),o=n.getAttributeNames().reduce((function(t,e){return ln.startsWith(e,"data-woopra-")&&(t[e.slice(12)]=n.getAttribute(e)),t}),{}),a=n.getAttribute("data-woopra")||"button click",r=se({"page url":this.getPageUrl(),"page title":this.getPageTitle(),text:n.innerText||n.value||n.textContent,title:n.textContent,type:"a"===i?"link":n.type,tagname:i,classname:n.className,"dom path":Fe(n),url:n.href,"pointer type":t.pointerType},o);if(this.config(Jt)){var s=this.getPageHash();""!==s&&"#"!==s&&(r["page hash"]=s)}this.track(a,r,{useBeacon:e})}}},n.onLink=function(t,e){var n=Boolean(this.config(_t)),i=this.config(Bt),o=new RegExp("(?:"+i.join("|")+")($|&)","i").test(e.pathname);this.config(Pt)&&o&&(dn(et,e.href),e.target!==M&&ln.leftClick(t)&&(e.setAttribute(F,1),n||(t.preventDefault(),t.stopPropagation(),setTimeout((function(){e.click()}),this.config(jt))))),this.config(Mt)&&!o&&ln.isOutgoingLink(e.hostname)&&(dn(rt,e.href),e.target!==M&&ln.leftClick(t)&&(e.setAttribute(F,1),n||(t.preventDefault(),t.stopPropagation(),setTimeout((function(){e.click()}),this.config($t)))))},n.downloaded=function(t){var e=Boolean(this.config(_t));this.track(et,{url:t},{useBeacon:e})},n.outgoing=function(t){var e=Boolean(this.config(_t));this.track(rt,{url:t},{useBeacon:e})},n.onUnload=function(){this.isUnloading||(this.isUnloading=!0,this._updateDurations(V,X),this.sendBeacons(R))},n.onPageStateChange=function(t){var e=t.newState,n=t.oldState;switch(e){case J:this._updateDurations(n,e),this.sendBeacons(),this._touch();break;case K:case V:this._updateDurations(n,e),this.sendBeacons();break;case X:this.onUnload()}},n.onScroll=function(t){this._touch();var e=Le();this.pending.filter((function(t){return t.lifecycle===R})).forEach((function(t){t.meta[L]=Math.min(1,Math.max(e,t.meta[L]||0))}))},n.autoDecorate=function(t){var e=this.config(Nt);if(e){for(var n,i=be(e)?[e]:ke(e)?e:[],o=0;o=e||n<0||h&&t-u>=r}function v(){var t=b();if(g(t))return m(t);s=setTimeout(v,function(t){var n=e-(t-c);return h?A(n,r-(t-u)):n}(t))}function m(t){return s=void 0,f&&i?d(t):(i=o=void 0,a)}function w(){var t=b(),n=g(t);if(i=arguments,o=this,c=t,n){if(void 0===s)return function(t){return u=t,s=setTimeout(v,e),l?d(t):a}(c);if(h)return clearTimeout(s),s=setTimeout(v,e),d(c)}return void 0===s&&(s=setTimeout(v,e)),a}return e=P(e)||0,p(n)&&(l=!!n.leading,r=(h="maxWait"in n)?T(P(n.maxWait)||0,e):r,f="trailing"in n?!!n.trailing:f),w.cancel=function(){void 0!==s&&clearTimeout(s),u=0,i=c=o=s=void 0},w.flush=function(){return void 0===s?a:m(b())},w}var R;var L,W=((R={}).eu="www.woopra.com/track/",R.kr="kr.track.airis.appier.net/track/",R.us="us.track.airis.appier.net/track/",R),$="__woopraid",M=["campaign","content","id","medium","source","term"],F=["com.au","net.au","org.au","co.hu","com.ru","ac.za","net.za","com.za","co.za","co.uk","org.uk","me.uk","net.uk"],H="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",z=new RegExp($+"=([^&#]+)"),Q="action",q="page",J="scroll depth",K="pv",V="idptnc",G="_blank",X="data-tracked",Y="ce_",Z="co_",tt="ce",et="update",nt="active",it="passive",ot="hidden",rt="frozen",at="terminated",st="beforeunload",ct="blur",ut="click",lt="download",ht="focus",ft="freeze",dt="link",pt="mousemove",gt="outgoing",vt="pagehide",mt="pageshow",wt="resume",yt="scroll",bt="statechange",_t="unload",kt="visibilitychange",Ct="app",Et="appier_app_id",St="auto_decorate",Dt="beacons",Ot="campaign_once",Nt="click_tracking_matcher_selectors",jt="click_pause",Bt="context",xt="cookie_domain",Pt="cookie_expire",It="cookie_name",Tt="cookie_path",At="cookie_secure",Ut="cross_domain",Rt="domain",Lt="download_extensions",Wt="download_pause",$t="download_tracking",Mt="form_pause",Ft="hide_campaign",Ht="hide_xdm_data",zt="idle_threshold",Qt="idle_timeout",qt="ignore_query_url",Jt="map_query_params",Kt="outgoing_ignore_subdomain",Vt="outgoing_pause",Gt="outgoing_tracking",Xt="personalization",Yt="ping",Zt="ping_interval",te="protocol",ee="region",ne="save_url_hash",ie="third_party",oe="use_cookies",re="cancelled",ae="dirty",se="duration",ce="expired",ue="leave",le="retrack",he="sent",fe="timestamp",de=[[V,V],["$duration","duration"],["$domain",Rt],["$app",Ct],["$timestamp","timestamp"],["$action","event"],[Et,Et]],pe=["avi","css","dmg","doc","eps","exe","js","m4v","mov","mp3","mp4","msi","pdf","ppt","rar","svg","txt","vsd","vxd","wma","wmv","xls","xlsx","zip"],ge=["a"],ve=["a","button","input[type=button]","input[type=submit]","[role=button]"],me=((L={})[St]=void 0,L[$t]=!1,L[Kt]=!0,L[Gt]=!1,L),we={};function ye(t,e){we[t][e]=null}function be(t,e,n){null!=t&&t.addEventListener&&t.addEventListener(e,n)}function _e(t,e,n){var i=t.instanceName;we[e]||(we[e]={}),we[e][i]=t,t.__l&&(t.__l[e]||(t.__l[e]=[]),t.__l[e].push(n))}function ke(t){var e,n,i=we[t];if(i)for(var o in i)if(i.hasOwnProperty(o)&&(n=(e=i[o])&&e.__l)&&n[t])for(var r=0;rt.length)&&(e=t.length);for(var n=0,i=new Array(e);n=t.length?{done:!0}:{done:!1,value:t[i++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var je=function(){function t(){this._registry={}}var e=t.prototype;return e.addEventListener=function(t,e,n){this._getRegistry(t).push(e)},e.removeEventListener=function(t,e,n){var i=this._getRegistry(t),o=i.indexOf(e);o>-1&&i.splice(o,1)},e.dispatchEvent=function(t){return t.target=this,Object.freeze(t),this._getRegistry(t.type).forEach((function(e){return e(t)})),!0},e._getRegistry=function(t){return this._registry[t]=this._registry[t]||[]},t}(),Be=function(t,e){this.type=t,this.newState=e.newState,this.oldState=e.oldState,this.originalEvent=e.originalEvent},xe="object"==typeof safari&&safari.pushNotification,Pe="onpageshow"in self,Ie=[ht,ct,kt,ft,wt,mt,Pe?vt:_t],Te=function(t){return t.preventDefault(),t.returnValue="Are you sure?"},Ae=[[nt,it,ot,at],[nt,it,ot,rt],[ot,it,nt],[rt,ot],[rt,nt],[rt,it]].map((function(t){return t.reduce((function(t,e,n){return t[e]=n,t}),{})})),Ue=function(){return document.visibilityState===ot?ot:document.hasFocus()?nt:it},Re=new(function(t){var e,n;function i(){var e;e=t.call(this)||this;var n=Ue();return e._state=n,e._unsavedChanges=[],e._handleEvents=e._handleEvents.bind(function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(e)),Ie.forEach((function(t){return addEventListener(t,e._handleEvents,!0)})),xe&&addEventListener(st,(function(t){e._safariBeforeUnloadTimeout=setTimeout((function(){t.defaultPrevented||t.returnValue.length>0||e._dispatchChangesIfNeeded(t,ot)}),0)})),e}n=t,(e=i).prototype=Object.create(n.prototype),e.prototype.constructor=e,De(e,n);var o,r,a,s=i.prototype;return s.addUnsavedChanges=function(t){!this._unsavedChanges.indexOf(t)>-1&&(0===this._unsavedChanges.length&&addEventListener(st,Te),this._unsavedChanges.push(t))},s.removeUnsavedChanges=function(t){var e=this._unsavedChanges.indexOf(t);e>-1&&(this._unsavedChanges.splice(e,1),0===this._unsavedChanges.length&&removeEventListener(st,Te))},s._dispatchChangesIfNeeded=function(t,e){if(e!==this._state)for(var n=function(t,e){for(var n,i=0;n=Ae[i];++i){var o=n[t],r=n[e];if(o>=0&&r>=0&&r>o)return Object.keys(n).slice(o,r+1)}return[]}(this._state,e),i=0;i1?e.unshift(s+"["+o+"]"):e.unshift(s),n=n.parentNode}return e.slice(1).join(" > ")}function un(e){var n=e.srcElement||e.target;Ze(e)&&ke(ut,e,n),(me[$t]||me[Gt])&&(t(n=sn(e.srcElement||e.target,ge))||null===n||n.getAttribute(X)||ke(dt,e,n))}function ln(e){var n;ke(pt,e,Date.now()),me[St]&&(t(n=sn(e.srcElement||e.target,ge))||null===n||ke(St,n))}function hn(t){ke(pt,t,Date.now())}var fn=function(t,e,n){var i=!0,o=!0;if("function"!=typeof t)throw new TypeError("Expected a function");return p(n)&&(i="leading"in n?!!n.leading:i,o="trailing"in n?!!n.trailing:o),U(t,e,{leading:i,maxWait:e,trailing:o})}((function(t){ke(yt,t)}),500);function dn(t){ke(bt,t)}function pn(){}var gn=function(){function t(t,e,n,i){this.woopra=t,this.id=e,this.params=n,this.meta=i}var e=t.prototype;return e.update=function(t,e){void 0===t&&(t={}),t.event&&t.event!==this.params.event&&(this.params.event=t.event),this.woopra.update(this.id,Se({},t,{$action:this.params.event}),e)},e.cancel=function(){this.woopra.cancelAction(this.id)},t}();function vn(t,e,n){return t==t&&(void 0!==n&&(t=t<=n?t:n),void 0!==e&&(t=t>=e?t:e)),t}var mn=1/0,wn=o?o.prototype:void 0,yn=wn?wn.toString:void 0;function bn(t){if("string"==typeof t)return t;if(Le(t))return function(t,e){for(var n=-1,i=null==t?0:t.length,o=Array(i);++n=0;o-=1)if(!(""===t.elements[o].name||n.indexOf(t.elements[o].name)>-1))switch(t.elements[o].nodeName){case"INPUT":switch(t.elements[o].type){case"text":case"hidden":case On:case jn:case Nn:i[t.elements[o].name]=t.elements[o].value;break;case"checkbox":case"radio":t.elements[o].checked&&(i[t.elements[o].name]=t.elements[o].value)}break;case"TEXTAREA":i[t.elements[o].name]=t.elements[o].value;break;case"SELECT":switch(t.elements[o].type){case"select-one":i[t.elements[o].name]=t.elements[o].value;break;case"select-multiple":for(var r=t.elements[o].options.length-1;r>=0;r-=1)t.elements[o].options[r].selected&&(i[t.elements[o].name]=t.elements[o].options[r].value)}break;case"BUTTON":switch(t.elements[o].type){case jn:case Nn:case On:i[t.elements[o].name]=t.elements[o].value}}return i}},xn._on=_e,xn._fire=ke,xn.attachEvent=be,xn.startsWith=function(t,e,n){return t=En(t),n=null==n?0:vn(Cn(n),0,t.length),e=bn(e),t.slice(n,n+e.length)==e},xn.endsWith=function(t,e,n){t=En(t),e=bn(e);var i=t.length,o=n=void 0===n?i:vn(Cn(n),0,i);return(n-=e.length)>=0&&t.slice(n,o)==e};var In=xn._fire,Tn=function(){function e(t){var e;this.visitorData={},this.sessionData={},this.orgData={},this.options=((e={})[Ct]="js-client",e[Dt]=y(navigator.sendBeacon),e[Ot]=!1,e[Nt]=ve,e[xt]="."+xn.getHostnameNoWww(),e[Pt]=new Date((new Date).setDate((new Date).getDate()+730)),e[It]="wooTracker",e[Tt]="/",e[At]="https:"===xn.location("protocol"),e[Ut]=!1,e[Lt]=pe,e[Wt]=200,e[$t]=!1,e[Ft]=!1,e[Ht]=!1,e[zt]=1e4,e[Qt]=6e5,e[qt]=!1,e[Jt]={},e[Kt]=!0,e[Vt]=200,e[Gt]=!1,e[Xt]=!0,e[Zt]=12e3,e[Yt]=!1,e[te]="https",e[ee]="eu",e[ne]=!0,e[ie]=!1,e[jt]=250,e[Mt]=250,e[oe]=!0,e),this.instanceName=t||"woopra",this.idle=0,this.cookie="",this.last_activity=Date.now(),this.loaded=!1,this.dirtyCookie=!1,this.sentCampaign=!1,this.version=11,this.pending=[],this.beaconQueue=[],this.lastAction=null,t&&""!==t&&(window[t]=this)}var n=e.prototype;return n.init=function(){var t=this;this.__l={},this._processQueue("config"),this._setupCookie(),this._bindEvents(),setTimeout((function(){return t._processQueue()}),1),this.loaded=!0;var e=this.config("initialized");y(e)&&e(this.instanceName),this.config(Ht)&&xn.hideCrossDomainId()},n._processQueue=function(e){var n=window.__woo?window.__woo[this.instanceName]:n;if((n=window._w?window._w[this.instanceName]:n)&&n._e)for(var i=n._e,o=0;o0)for(var s in i)a(i[s],t)},n.trackFormHandler=function(t,e,n,i){void 0===i&&(i={});var o=!1;if(!e.getAttribute(X)){var r=Boolean(this.config(Dt)),a=xn.serializeForm(e,i);if(y(i.identify)){var s=i.identify(a)||{};s&&this.identify(s)}var c=y(i.onBeforeSend)?i.onBeforeSend:void 0,u=y(i.callback)?function(){return i.callback(a)}:void 0,l=y(i.onError)?i.onError:void 0;if(i.noSubmit||e.setAttribute(X,1),i.noSubmit||r)this.track(n,a,{onBeforeSend:c,onError:l,onSuccess:u,useBeacon:r});else{t.preventDefault(),t.stopPropagation();var h=setTimeout((function(){o||e.submit()}),this.config(Mt));this.track(n,a,{onBeforeSend:c,onSuccess:function(){clearTimeout(h),u&&u(),o||e.submit(),o=!0},onError:l})}}},n.trackClick=function(t,e,n,i){var o=this;void 0===t&&(t="Item Clicked"),void 0===i&&(i={});var r=[],a=function(t,e,n,i){be(t,ut,(function(r){o.trackClickHandler(r,t,e,n,i)}))};if(r=i.elements?i.elements:tn(e,i))for(var s=0;sthis.config(zt)&&(this.idle=t-this.last_activity),this},n.push=function(t){return this._push({endpoint:"identify",visitorData:this.visitorData,sessionData:this.sessionData,orgData:this.orgData,callback:t}),this.sendBeacons(),this},n._updateDurations=function(t,e){var n=Date.now();function i(i){var o,r,a;switch(e){case nt:case it:var s;return n-i.meta[ue]>i.params.timeout?((s={})[ce]=!0,s):e===nt&&t===it||e===it&&t===nt?{}:((o={})[fe]=n,o);case ot:return(r={})[ae]=i.meta[ae]||n-i.meta[fe]>100,r[se]=i.meta[se]+(n-i.meta[fe]),r[ue]=n,r;case at:return(a={})[ae]=i.meta[ae]||n-i.meta[ue]>100,a;default:return{}}}this.pending=this.pending.map((function(t){return t.lifecycle!==q?t:Se({},t,{meta:Se({},t.meta,i(t))})})),this.lastAction&&(this.lastAction=Se({},this.lastAction,{meta:Se({},this.lastAction.meta,i(this.lastAction))}))},n._processLifecycle=function(t){var e,n=this,i=[];(this.pending.forEach((function(t){var e;t.meta[ce]&&!t.meta[re]&&t.meta[le]&&i.push(Se({},t.args,{eventData:Se({},t.args.eventData||{},(e={},e[V]=Ye(),e.returning=!0,e))}))})),i.forEach((function(t){return n._push(t)})),this.pending=this.pending.filter((function(e){return!e.meta[ce]&&(e.meta[ae]&&n.beaconQueue.push({lifecycle:e.lifecycle,endpoint:e.endpoint,params:Se({},e.params),meta:Se({},e.meta),successCallback:e.callback,errorCallback:e.errorCallback}),!e.meta[re]&&(e.lifecycle===q&&t!==q))})),this.pending=this.pending.map((function(t){var e;return Se({},t,{meta:Se({},t.meta,(e={},e[ae]=!1,e[he]=!0,e))})})),t===q&&this.lastAction)&&this.beaconQueue.push({lifecycle:q,endpoint:tt,params:Se({},this.lastAction.params),meta:Se({},this.lastAction.meta,(e={},e[he]=!0,e))});return i.length>0},n._drainBeaconQueue=function(){var t=this,e=this.config(oe);function n(t){t[V],t.cookie,t.project,t.event;var e=function(t,e){if(null==t)return{};var n,i,o={},r=Object.keys(t);for(i=0;i=0||(o[n]=t[n]);return o}(t,[V,"cookie","project","event"].map(Ce));return Object.keys(e).length>0}var i=this.beaconQueue.reduce((function(t,e){return t[e.params[V]]=[],t}),{});this.beaconQueue.forEach((function(t){i[t.params[V]].push(t)})),this.beaconQueue=[];var o=Object.keys(i).map((function(n){var o=i[n],r={endpoint:void 0,params:{},onSuccess:[],onError:[]};return o.forEach((function(n){var i;r.endpoint||(n.endpoint===tt&&n.meta[he]?r.endpoint=et:r.endpoint=n.endpoint),r.params.project=n.params.project,r.params.event=n.params.event,r.params[V]=n.params[V],e&&(r.params.cookie=t.getCookie()||t.cookie),(n.lifecycle===q||n.params[V]===(null==(i=t.lastAction)?void 0:i.id))&&n.meta[se]>0&&(r.params.duration=n.meta[se]),n.meta[J]&&(r.params[""+Y+J]=Math.round(1e4*n.meta[J])/1e4),n.meta[he]||(r.params=Se({},r.params,n.params),y(n.successCallback)&&r.onSuccess.push(n.successCallback),y(n.errorCallback)&&r.onError.push(n.errorCallback))})),r.params.project||(r.params.project=t.config(Rt)||xn.getHostnameNoWww()),r})).filter((function(t){return n(t.params)})),r=navigator.sendBeacon&&navigator.sendBeacon.bind(navigator),a=Boolean(this.config(Dt))&&y(r);if(o.length>0)if(a){var s=[""];o.map((function(t){var e=t.endpoint,n=t.params;return JSON.stringify({endpoint:e,params:n})})).forEach((function(t){new Blob([""+s[s.length-1]+t]).size>=65e3&&s.push(""),s[s.length-1]+=t+"\n"})),s.forEach((function(e,n){var i=new FormData;i.append("payload",e.slice(0,-1));try{r(t.getEndpoint("push"),i)}catch(t){console.error("Woopra: sendBeacon failed:",t)}})),o.forEach((function(t){t.onSuccess.forEach((function(e){return rn(e,t.params.event)}))}))}else o.forEach((function(e){var n=t.getEndpoint(e.endpoint)+"?"+xn.buildUrlParams(Se({close:!0},e.params));xn.loadScript(n,(function(){return e.onSuccess.forEach((function(t){return rn(t,e.params.event)}))}),(function(){return e.onError.forEach((function(t){return rn(t,e.params.event)}))}))}))},n.sendBeacons=function(t){void 0===t&&(t=Q),this._processLifecycle(t),this._drainBeaconQueue()},n.sleep=function(){},n._touch=function(t){void 0===t&&(t=Date.now()),this.last_activity=t,this.idle=0},n.moved=function(t,e){this._touch(e)},n.onClick=function(t){if(this.config("click_tracking")){var e=Boolean(this.config(Dt)),n=sn(t.target,this.config(Nt));if(n){var i=n.tagName.toLowerCase(),o=n.getAttributeNames().reduce((function(t,e){return xn.startsWith(e,"data-woopra-")&&(t[e.slice(12)]=n.getAttribute(e)),t}),{}),r=n.getAttribute("data-woopra")||"button click",a=Se({"page url":this.getPageUrl(),"page title":this.getPageTitle(),text:n.innerText||n.value||n.textContent,title:n.textContent,type:"a"===i?"link":n.type,tagname:i,classname:n.className,"dom path":cn(n),url:n.href,"pointer type":t.pointerType},o);if(this.config(ne)){var s=this.getPageHash();""!==s&&"#"!==s&&(a["page hash"]=s)}this.track(r,a,{useBeacon:e})}}},n.onLink=function(t,e){var n=Boolean(this.config(Dt)),i=this.config(Lt),o=new RegExp("(?:"+i.join("|")+")($|&)","i").test(e.pathname);this.config($t)&&o&&(In(lt,e.href),e.target!==G&&xn.leftClick(t)&&(e.setAttribute(X,1),n||(t.preventDefault(),t.stopPropagation(),setTimeout((function(){e.click()}),this.config(Wt))))),this.config(Gt)&&!o&&xn.isOutgoingLink(e.hostname)&&(In(gt,e.href),e.target!==G&&xn.leftClick(t)&&(e.setAttribute(X,1),n||(t.preventDefault(),t.stopPropagation(),setTimeout((function(){e.click()}),this.config(Vt)))))},n.downloaded=function(t){var e=Boolean(this.config(Dt));this.track(lt,{url:t},{useBeacon:e})},n.outgoing=function(t){var e=Boolean(this.config(Dt));this.track(gt,{url:t},{useBeacon:e})},n.onUnload=function(){this.isUnloading||(this.isUnloading=!0,this._updateDurations(ot,at),this.sendBeacons(q))},n.onPageStateChange=function(t){var e=t.newState,n=t.oldState;switch(e){case nt:this._updateDurations(n,e),this.sendBeacons(),this._touch();break;case it:case ot:this._updateDurations(n,e),this.sendBeacons();break;case at:this.onUnload()}},n.onScroll=function(t){this._touch();var e=on();this.pending.filter((function(t){return t.lifecycle===q})).forEach((function(t){t.meta[J]=Math.min(1,Math.max(e,t.meta[J]||0))}))},n.autoDecorate=function(t){var e=this.config(Ut);if(e){for(var n,i=$e(e)?[e]:Le(e)?e:[],o=0;o true\n *\n * _.isUndefined(null);\n * // => false\n */\nfunction isUndefined(value) {\n return value === undefined;\n}\n\nexport default isUndefined;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nexport default freeGlobal;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nexport default root;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nexport default Symbol;\n","import Symbol from './_Symbol.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nexport default getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nexport default objectToString;\n","import Symbol from './_Symbol.js';\nimport getRawTag from './_getRawTag.js';\nimport objectToString from './_objectToString.js';\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nexport default baseGetTag;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nexport default isObject;\n","import baseGetTag from './_baseGetTag.js';\nimport isObject from './isObject.js';\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nexport default isFunction;\n","import root from './_root.js';\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nexport default now;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\nexport default trimmedEndIndex;\n","import trimmedEndIndex from './_trimmedEndIndex.js';\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nexport default baseTrim;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nexport default isObjectLike;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nexport default isSymbol;\n","import baseTrim from './_baseTrim.js';\nimport isObject from './isObject.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nexport default toNumber;\n","import isObject from './isObject.js';\nimport now from './now.js';\nimport toNumber from './toNumber.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nexport default debounce;\n","import debounce from './debounce.js';\nimport isObject from './isObject.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\nfunction throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n}\n\nexport default throttle;\n","export const VERSION = 11;\nexport const REGION_EU = 'eu';\nexport const REGION_KR = 'kr';\nexport const REGION_US = 'us';\nexport const ENDPOINTS = {\n [REGION_EU]: 'www.woopra.com/track/',\n [REGION_KR]: 'kr.track.airis.appier.net/track/',\n [REGION_US]: 'us.track.airis.appier.net/track/'\n};\nexport const XDM_PARAM_NAME = '__woopraid';\nexport const CAMPAIGN_KEYS = [\n 'campaign',\n 'content',\n 'id',\n 'medium',\n 'source',\n 'term'\n];\nexport const SECOND_LEVEL_TLDS = [\n 'com.au',\n 'net.au',\n 'org.au',\n 'co.hu',\n 'com.ru',\n 'ac.za',\n 'net.za',\n 'com.za',\n 'co.za',\n 'co.uk',\n 'org.uk',\n 'me.uk',\n 'net.uk'\n];\nexport const RANDOM_STRING_CHARS =\n '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';\nexport const MIN_PING_INTERVAL = 6_000;\nexport const MAX_PING_INTERVAL = 60_000;\nexport const URL_ID_REGEX = new RegExp(XDM_PARAM_NAME + '=([^&#]+)');\n\nexport const LIFECYCLE_ACTION = 'action';\nexport const LIFECYCLE_PAGE = 'page';\n\nexport const SCROLL_DEPTH = 'scroll depth';\n\nexport const ACTION_PV = 'pv';\n\nexport const IDPTNC = 'idptnc';\n\nexport const TARGET_BLANK = '_blank';\n\nexport const DATA_TRACKED_ATTRIBUTE = 'data-tracked';\n\nexport const ACTION_PROPERTY_PREFIX = 'ce_';\nexport const VISIT_PROPERTY_PREFIX = 'cs_';\nexport const VISITOR_PROPERTY_PREFIX = 'cv_';\nexport const ORG_PROPERTY_PREFIX = 'co_';\n\nexport const ENDPOINT_TRACK = 'ce';\nexport const ENDPOINT_UPDATE = 'update';\nexport const ENDPOINT_IDENTIFY = 'identify';\n\nexport const PAGE_LIFECYCLE_STATE_ACTIVE = 'active';\nexport const PAGE_LIFECYCLE_STATE_PASSIVE = 'passive';\nexport const PAGE_LIFECYCLE_STATE_HIDDEN = 'hidden';\nexport const PAGE_LIFECYCLE_STATE_FROZEN = 'frozen';\nexport const PAGE_LIFECYCLE_STATE_TERMINATED = 'terminated';\n\nexport const EVENT_BEFOREUNLOAD = 'beforeunload';\nexport const EVENT_BLUR = 'blur';\nexport const EVENT_CLICK = 'click';\nexport const EVENT_DOWNLOAD = 'download';\nexport const EVENT_FOCUS = 'focus';\nexport const EVENT_FREEZE = 'freeze';\nexport const EVENT_LINK_CLICK = 'link';\nexport const EVENT_MOUSEDOWN = 'mousedown';\nexport const EVENT_MOUSEMOVE = 'mousemove';\nexport const EVENT_OUTGOING = 'outgoing';\nexport const EVENT_PAGEHIDE = 'pagehide';\nexport const EVENT_PAGESHOW = 'pageshow';\nexport const EVENT_RESUME = 'resume';\nexport const EVENT_SCROLL = 'scroll';\nexport const EVENT_STATECHANGE = 'statechange';\nexport const EVENT_UNLOAD = 'unload';\nexport const EVENT_VISIBILITYCHANGE = 'visibilitychange';\n\nexport const KEY_APP = 'app';\nexport const KEY_APPIER_APP_ID = 'appier_app_id';\nexport const KEY_AUGMENT_ACTION = 'augment_action';\nexport const KEY_AUTO_DECORATE = 'auto_decorate';\nexport const KEY_BEACONS = 'beacons';\nexport const KEY_CAMPAIGN_ONCE = 'campaign_once';\nexport const KEY_CLICK_TRACKING_MATCHER_SELECTORS =\n 'click_tracking_matcher_selectors';\nexport const KEY_CLICK_PAUSE = 'click_pause';\nexport const KEY_CLICK_TRACKING = 'click_tracking';\nexport const KEY_CONTEXT = 'context';\nexport const KEY_COOKIE_DOMAIN = 'cookie_domain';\nexport const KEY_COOKIE_EXPIRE = 'cookie_expire';\nexport const KEY_COOKIE_NAME = 'cookie_name';\nexport const KEY_COOKIE_PATH = 'cookie_path';\nexport const KEY_COOKIE_SECURE = 'cookie_secure';\nexport const KEY_CROSS_DOMAIN = 'cross_domain';\nexport const KEY_DOMAIN = 'domain';\nexport const KEY_DOWNLOAD_EXTENSIONS = 'download_extensions';\nexport const KEY_DOWNLOAD_PAUSE = 'download_pause';\nexport const KEY_DOWNLOAD_TRACKING = 'download_tracking';\nexport const KEY_FORM_PAUSE = 'form_pause';\nexport const KEY_HIDE_CAMPAIGN = 'hide_campaign';\nexport const KEY_HIDE_XDM_DATA = 'hide_xdm_data';\nexport const KEY_IDLE_THRESHOLD = 'idle_threshold';\nexport const KEY_IDLE_TIMEOUT = 'idle_timeout';\nexport const KEY_IGNORE_QUERY_URL = 'ignore_query_url';\nexport const KEY_IP = 'ip';\nexport const KEY_MAP_QUERY_PARAMS = 'map_query_params';\nexport const KEY_OUTGOING_IGNORE_SUBDOMAIN = 'outgoing_ignore_subdomain';\nexport const KEY_OUTGOING_PAUSE = 'outgoing_pause';\nexport const KEY_OUTGOING_TRACKING = 'outgoing_tracking';\nexport const KEY_PERSONALIZATION = 'personalization';\nexport const KEY_PING = 'ping';\nexport const KEY_PING_INTERVAL = 'ping_interval';\nexport const KEY_PROTOCOL = 'protocol';\nexport const KEY_REGION = 'region';\nexport const KEY_SAVE_URL_HASH = 'save_url_hash';\nexport const KEY_THIRD_PARTY = 'third_party';\nexport const KEY_USE_COOKIES = 'use_cookies';\n\nexport const META_CANCELLED = 'cancelled';\nexport const META_DIRTY = 'dirty';\nexport const META_DURATION = 'duration';\nexport const META_EXPIRED = 'expired';\nexport const META_LEAVE = 'leave';\nexport const META_RETRACK = 'retrack';\nexport const META_SENT = 'sent';\nexport const META_TIMESTAMP = 'timestamp';\n\nexport const ACTION_PROPERTY_ALIASES = [\n [IDPTNC, IDPTNC],\n ['$duration', 'duration'],\n ['$domain', KEY_DOMAIN],\n ['$app', KEY_APP],\n ['$timestamp', 'timestamp'],\n ['$action', 'event'],\n [KEY_APPIER_APP_ID, KEY_APPIER_APP_ID]\n];\n\nexport const DEFAULT_DOWNLOAD_EXTENSIONS = [\n 'avi',\n 'css',\n 'dmg',\n 'doc',\n 'eps',\n 'exe',\n 'js',\n 'm4v',\n 'mov',\n 'mp3',\n 'mp4',\n 'msi',\n 'pdf',\n 'ppt',\n 'rar',\n 'svg',\n 'txt',\n 'vsd',\n 'vxd',\n 'wma',\n 'wmv',\n 'xls',\n 'xlsx',\n 'zip'\n];\n\nexport const ELEMENT_MATCHER_LINK = ['a'];\n\nexport const ELEMENT_MATCHER_CLICK = [\n 'a',\n 'button',\n 'input[type=button]',\n 'input[type=submit]',\n '[role=button]'\n];\n","import {\n KEY_AUTO_DECORATE,\n KEY_DOWNLOAD_TRACKING,\n KEY_OUTGOING_IGNORE_SUBDOMAIN,\n KEY_OUTGOING_TRACKING\n} from './constants';\n\nexport default {\n [KEY_AUTO_DECORATE]: undefined,\n [KEY_DOWNLOAD_TRACKING]: false,\n [KEY_OUTGOING_IGNORE_SUBDOMAIN]: true,\n [KEY_OUTGOING_TRACKING]: false\n};\n","const handlers = {};\n\nexport function removeHandler(id, instance) {\n handlers[id][instance] = null;\n}\n\nexport function addEventListener(element, type, callback) {\n if (element?.addEventListener) {\n element.addEventListener(type, callback);\n }\n}\n\nexport function on(parent, event, callback) {\n const id = parent.instanceName;\n\n if (!handlers[event]) {\n handlers[event] = {};\n }\n handlers[event][id] = parent;\n\n if (parent.__l) {\n if (!parent.__l[event]) {\n parent.__l[event] = [];\n }\n parent.__l[event].push(callback);\n }\n}\n\nexport function fire(event) {\n let handler;\n const _event = handlers[event];\n let _l;\n\n if (_event) {\n for (let id in _event) {\n if (_event.hasOwnProperty(id)) {\n handler = _event[id];\n _l = handler && handler.__l;\n if (_l && _l[event]) {\n for (let i = 0; i < _l[event].length; i++) {\n _l[event][i].apply(this, Array.prototype.slice.call(arguments, 1));\n }\n }\n }\n }\n }\n}\n","/*\n Copyright 2018 Google Inc. All Rights Reserved.\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n http://www.apache.org/licenses/LICENSE-2.0\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n Modifications Copyright (c) 2022 Woopra, Inc.\n*/\n\n/**\n * Original source: https://github.com/GoogleChromeLabs/page-lifecycle\n * MODIFICATIONS:\n * - inline imports\n * - always use shims\n * - use constants in place of string literals\n */\n\nimport {\n EVENT_BEFOREUNLOAD,\n EVENT_BLUR,\n EVENT_FOCUS,\n EVENT_FREEZE,\n EVENT_PAGEHIDE,\n EVENT_PAGESHOW,\n EVENT_RESUME,\n EVENT_UNLOAD,\n EVENT_VISIBILITYCHANGE,\n PAGE_LIFECYCLE_STATE_ACTIVE,\n PAGE_LIFECYCLE_STATE_FROZEN,\n PAGE_LIFECYCLE_STATE_HIDDEN,\n PAGE_LIFECYCLE_STATE_PASSIVE,\n PAGE_LIFECYCLE_STATE_TERMINATED\n} from '../constants';\n\nclass EventTargetShim {\n /**\n * Creates the event registry.\n */\n constructor() {\n this._registry = {};\n }\n\n /**\n * @param {string} type\n * @param {EventListener|function(!Event):(boolean|undefined)} listener\n * @param {(boolean|!AddEventListenerOptions)=} opts\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-eventtarget-addeventlistener\n */\n addEventListener(type, listener, opts = false) {\n this._getRegistry(type).push(listener);\n }\n\n /**\n * @param {string} type\n * @param {EventListener|function(!Event):(boolean|undefined)} listener\n * @param {(boolean|!EventListenerOptions)=} opts\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-eventtarget-removeeventlistener\n */\n removeEventListener(type, listener, opts = false) {\n const typeRegistry = this._getRegistry(type);\n const handlerIndex = typeRegistry.indexOf(listener);\n if (handlerIndex > -1) {\n typeRegistry.splice(handlerIndex, 1);\n }\n }\n\n /**\n * @param {!Event|!EventShim} evt\n * @return {boolean}\n * @see https://dom.spec.whatwg.org/#dom-eventtarget-dispatchevent\n */\n dispatchEvent(evt) {\n // Set the target then freeze the event object to prevent modification.\n evt.target = this;\n Object.freeze(evt);\n\n this._getRegistry(evt.type).forEach((listener) => listener(evt));\n return true;\n }\n\n /**\n * Returns an array of handlers associated with the passed event type.\n * If no handlers have been registered, an empty array is returned.\n * @private\n * @param {string} type The event type.\n * @return {!Array} An array of handler functions.\n */\n _getRegistry(type) {\n return (this._registry[type] = this._registry[type] || []);\n }\n}\n\nclass StateChangeEvent {\n constructor(type, initDict) {\n this.type = type;\n this.newState = initDict.newState;\n this.oldState = initDict.oldState;\n this.originalEvent = initDict.originalEvent;\n }\n}\n\n// Detect Safari to work around Safari-specific bugs.\nconst IS_SAFARI = typeof safari === 'object' && safari.pushNotification;\n\nconst SUPPORTS_PAGE_TRANSITION_EVENTS = 'onpageshow' in self;\n\nconst EVENTS = [\n EVENT_FOCUS,\n EVENT_BLUR,\n EVENT_VISIBILITYCHANGE,\n EVENT_FREEZE,\n EVENT_RESUME,\n EVENT_PAGESHOW,\n // IE9-10 do not support the pagehide event, so we fall back to unload\n // Note: unload *MUST ONLY* be added conditionally, otherwise it will\n // prevent page navigation caching (a.k.a bfcache).\n SUPPORTS_PAGE_TRANSITION_EVENTS ? EVENT_PAGEHIDE : EVENT_UNLOAD\n];\n\n/**\n * @param {!Event} evt\n * @return {string}\n */\nconst onbeforeunload = (evt) => {\n evt.preventDefault();\n return (evt.returnValue = 'Are you sure?');\n};\n\n/**\n * Converts an array of states into an object where the state is the key\n * and the value is the index.\n * @param {!Array} arr\n * @return {!Object}\n */\nconst toIndexedObject = (arr) =>\n arr.reduce((acc, val, idx) => {\n acc[val] = idx;\n return acc;\n }, {});\n\n/**\n * @type {!Array}\n */\nconst LEGAL_STATE_TRANSITIONS = [\n // The normal unload process (bfcache process is addressed above).\n [\n PAGE_LIFECYCLE_STATE_ACTIVE,\n PAGE_LIFECYCLE_STATE_PASSIVE,\n PAGE_LIFECYCLE_STATE_HIDDEN,\n PAGE_LIFECYCLE_STATE_TERMINATED\n ],\n\n // An active page transitioning to frozen,\n // or an unloading page going into the bfcache.\n [\n PAGE_LIFECYCLE_STATE_ACTIVE,\n PAGE_LIFECYCLE_STATE_PASSIVE,\n PAGE_LIFECYCLE_STATE_HIDDEN,\n PAGE_LIFECYCLE_STATE_FROZEN\n ],\n\n // A hidden page transitioning back to active.\n [\n PAGE_LIFECYCLE_STATE_HIDDEN,\n PAGE_LIFECYCLE_STATE_PASSIVE,\n PAGE_LIFECYCLE_STATE_ACTIVE\n ],\n\n // A frozen page being resumed\n [PAGE_LIFECYCLE_STATE_FROZEN, PAGE_LIFECYCLE_STATE_HIDDEN],\n\n // A frozen (bfcached) page navigated back to\n // Note: [FROZEN, HIDDEN] can happen here, but it's already covered above.\n [PAGE_LIFECYCLE_STATE_FROZEN, PAGE_LIFECYCLE_STATE_ACTIVE],\n [PAGE_LIFECYCLE_STATE_FROZEN, PAGE_LIFECYCLE_STATE_PASSIVE]\n].map(toIndexedObject);\n\n/**\n * Accepts a current state and a future state and returns an array of legal\n * state transition paths. This is needed to normalize behavior across browsers\n * since some browsers do not fire events in certain cases and thus skip\n * states.\n * @param {string} oldState\n * @param {string} newState\n * @return {!Array}\n */\nconst getLegalStateTransitionPath = (oldState, newState) => {\n // We're intentionally not using for...of here so when we transpile to ES5\n // we don't need to include the Symbol polyfills.\n for (let order, i = 0; (order = LEGAL_STATE_TRANSITIONS[i]); ++i) {\n const oldIndex = order[oldState];\n const newIndex = order[newState];\n\n if (oldIndex >= 0 && newIndex >= 0 && newIndex > oldIndex) {\n // Differences greater than one should be reported\n // because it means a state was skipped.\n return Object.keys(order).slice(oldIndex, newIndex + 1);\n }\n }\n return [];\n // TODO(philipwalton): it shouldn't be possible to get here, but\n // consider some kind of warning or call to action if it happens.\n // console.warn(`Invalid state change detected: ${oldState} > ${newState}`);\n};\n\n/**\n * Returns the current state based on the document's visibility and\n * in input focus states. Note this method is only used to determine\n * active vs passive vs hidden states, as other states require listening\n * for events.\n * @return {string}\n */\nconst getCurrentState = () => {\n if (document.visibilityState === PAGE_LIFECYCLE_STATE_HIDDEN) {\n return PAGE_LIFECYCLE_STATE_HIDDEN;\n }\n if (document.hasFocus()) {\n return PAGE_LIFECYCLE_STATE_ACTIVE;\n }\n return PAGE_LIFECYCLE_STATE_PASSIVE;\n};\n\n/**\n * Class definition for the exported, singleton lifecycle instance.\n */\nclass PageLifecycle extends EventTargetShim {\n /**\n * Initializes state, state history, and adds event listeners to monitor\n * state changes.\n */\n constructor() {\n super();\n\n const state = getCurrentState();\n\n this._state = state;\n this._unsavedChanges = [];\n\n // Bind the callback and add event listeners.\n this._handleEvents = this._handleEvents.bind(this);\n\n // Add capturing events on window so they run immediately.\n EVENTS.forEach((evt) => addEventListener(evt, this._handleEvents, true));\n\n // Safari does not reliably fire the `pagehide` or `visibilitychange`\n // events when closing a tab, so we have to use `beforeunload` with a\n // timeout to check whether the default action was prevented.\n // - https://bugs.webkit.org/show_bug.cgi?id=151610\n // - https://bugs.webkit.org/show_bug.cgi?id=151234\n // NOTE: we only add this to Safari because adding it to Firefox would\n // prevent the page from being eligible for bfcache.\n if (IS_SAFARI) {\n addEventListener(EVENT_BEFOREUNLOAD, (evt) => {\n this._safariBeforeUnloadTimeout = setTimeout(() => {\n if (!(evt.defaultPrevented || evt.returnValue.length > 0)) {\n this._dispatchChangesIfNeeded(evt, PAGE_LIFECYCLE_STATE_HIDDEN);\n }\n }, 0);\n });\n }\n }\n\n /**\n * @return {string}\n */\n get state() {\n return this._state;\n }\n\n /**\n * Returns the value of document.wasDiscarded. This is arguably unnecessary\n * but I think there's value in having the entire API in one place and\n * consistent across browsers.\n * @return {boolean}\n */\n get pageWasDiscarded() {\n return document.wasDiscarded || false;\n }\n\n /**\n * @param {Symbol|Object} id A unique symbol or object identifying the\n *. pending state. This ID is required when removing the state later.\n */\n addUnsavedChanges(id) {\n // Don't add duplicate state. Note: ideally this would be a set, but for\n // better browser compatibility we're using an array.\n if (!this._unsavedChanges.indexOf(id) > -1) {\n // If this is the first state being added,\n // also add a beforeunload listener.\n if (this._unsavedChanges.length === 0) {\n addEventListener(EVENT_BEFOREUNLOAD, onbeforeunload);\n }\n this._unsavedChanges.push(id);\n }\n }\n\n /**\n * @param {Symbol|Object} id A unique symbol or object identifying the\n *. pending state. This ID is required when removing the state later.\n */\n removeUnsavedChanges(id) {\n const idIndex = this._unsavedChanges.indexOf(id);\n\n if (idIndex > -1) {\n this._unsavedChanges.splice(idIndex, 1);\n\n // If there's no more pending state, remove the event listener.\n if (this._unsavedChanges.length === 0) {\n removeEventListener(EVENT_BEFOREUNLOAD, onbeforeunload);\n }\n }\n }\n\n /**\n * @private\n * @param {!Event} originalEvent\n * @param {string} newState\n */\n _dispatchChangesIfNeeded(originalEvent, newState) {\n if (newState !== this._state) {\n const oldState = this._state;\n const path = getLegalStateTransitionPath(oldState, newState);\n\n for (let i = 0; i < path.length - 1; ++i) {\n const oldState = path[i];\n const newState = path[i + 1];\n\n this._state = newState;\n this.dispatchEvent(\n new StateChangeEvent('statechange', {\n oldState,\n newState,\n originalEvent\n })\n );\n }\n }\n }\n\n /**\n * @private\n * @param {!Event} evt\n */\n _handleEvents(evt) {\n if (IS_SAFARI) {\n clearTimeout(this._safariBeforeUnloadTimeout);\n }\n\n switch (evt.type) {\n case EVENT_PAGESHOW:\n case EVENT_RESUME:\n this._dispatchChangesIfNeeded(evt, getCurrentState());\n break;\n case EVENT_FOCUS:\n this._dispatchChangesIfNeeded(evt, PAGE_LIFECYCLE_STATE_ACTIVE);\n break;\n case EVENT_BLUR:\n // The `blur` event can fire while the page is being unloaded, so we\n // only need to update the state if the current state is \"active\".\n if (this._state === PAGE_LIFECYCLE_STATE_ACTIVE) {\n this._dispatchChangesIfNeeded(evt, getCurrentState());\n }\n break;\n case EVENT_PAGEHIDE:\n case EVENT_UNLOAD:\n this._dispatchChangesIfNeeded(\n evt,\n evt.persisted\n ? PAGE_LIFECYCLE_STATE_FROZEN\n : PAGE_LIFECYCLE_STATE_TERMINATED\n );\n break;\n case EVENT_VISIBILITYCHANGE:\n // The document's `visibilityState` will change to hidden as the page\n // is being unloaded, but in such cases the lifecycle state shouldn't\n // change.\n if (\n this._state !== PAGE_LIFECYCLE_STATE_FROZEN &&\n this._state !== PAGE_LIFECYCLE_STATE_TERMINATED\n ) {\n this._dispatchChangesIfNeeded(evt, getCurrentState());\n }\n break;\n case EVENT_FREEZE:\n this._dispatchChangesIfNeeded(evt, PAGE_LIFECYCLE_STATE_FROZEN);\n break;\n }\n }\n}\n\nexport default new PageLifecycle();\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nexport default isArray;\n","import baseGetTag from './_baseGetTag.js';\nimport isArray from './isArray.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar stringTag = '[object String]';\n\n/**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\nfunction isString(value) {\n return typeof value == 'string' ||\n (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n}\n\nexport default isString;\n","import overArg from './_overArg.js';\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nexport default getPrototype;\n","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\nexport default overArg;\n","import baseGetTag from './_baseGetTag.js';\nimport getPrototype from './_getPrototype.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n}\n\nexport default isPlainObject;\n","import root from './_root.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsFinite = root.isFinite;\n\n/**\n * Checks if `value` is a finite primitive number.\n *\n * **Note:** This method is based on\n * [`Number.isFinite`](https://mdn.io/Number/isFinite).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.\n * @example\n *\n * _.isFinite(3);\n * // => true\n *\n * _.isFinite(Number.MIN_VALUE);\n * // => true\n *\n * _.isFinite(Infinity);\n * // => false\n *\n * _.isFinite('3');\n * // => false\n */\nfunction isFinite(value) {\n return typeof value == 'number' && nativeIsFinite(value);\n}\n\nexport default isFinite;\n","import {\n isArray,\n isFinite,\n isFunction,\n isPlainObject,\n isString,\n isUndefined\n} from 'lodash-es';\nimport { RANDOM_STRING_CHARS } from '../constants';\n\n/**\n * Generates a random 12 character string\n *\n * @return {String} Returns a random 12 character string\n */\nexport function randomString() {\n let s = '';\n\n for (let i = 0; i < 12; i++) {\n const rnum = Math.floor(Math.random() * RANDOM_STRING_CHARS.length);\n s += RANDOM_STRING_CHARS.substring(rnum, rnum + 1);\n }\n\n return s;\n}\n\nexport function isLeftClick(evt = window.event) {\n const button =\n (!isUndefined(evt.which) && evt.which === 1) ||\n (!isUndefined(evt.button) && evt.button === 0);\n return button && !evt.metaKey && !evt.altKey && !evt.ctrlKey && !evt.shiftKey;\n}\n\n/**\n * Helper to either query an element by id, or return element if passed\n * through options\n *\n * Supports searching by ids and classnames (or querySelector if browser supported)\n */\nexport function getElement(selector, options) {\n const _options = isString(selector) ? options || {} : selector || {};\n\n if (_options.el) {\n return _options.el;\n } else if (isString(selector)) {\n if (document.querySelectorAll) {\n return document.querySelectorAll(selector);\n } else if (selector[0] === '#') {\n return document.getElementById(selector.substr(1));\n } else if (selector[0] === '.') {\n return document.getElementsByClassName(selector.substr(1));\n }\n }\n}\n\nexport function prefixObjectKeys(object, prefix, blacklist) {\n const obj = {};\n\n if (isUndefined(object)) return obj;\n\n for (let key in object) {\n if (object.hasOwnProperty(key)) {\n const value = object[key];\n\n let isBlacklisted = false;\n\n for (let i = 0; i < blacklist.length; i++) {\n if (blacklist[i][0] === key) {\n isBlacklisted = true;\n break;\n }\n }\n\n if (\n !isBlacklisted &&\n value !== 'undefined' &&\n value !== 'null' &&\n !isUndefined(value)\n ) {\n obj[`${prefix}${key}`] = value;\n }\n }\n }\n\n return obj;\n}\n\nexport function jsonStringifyObjectValues(object) {\n const obj = {};\n\n if (isUndefined(object)) return obj;\n\n for (let key in object) {\n if (object.hasOwnProperty(key)) {\n if (isPlainObject(object[key]) || isArray(object[key])) {\n try {\n obj[key] = JSON.stringify(object[key]);\n } catch {\n obj[key] = object[key];\n }\n } else obj[key] = object[key];\n }\n }\n\n return obj;\n}\n\nexport function getScrollDepth() {\n const scrollHeight = document.body.scrollHeight;\n\n const scrollDepth =\n ((window.scrollY || 0) + window.innerHeight) / scrollHeight;\n\n return Math.max(0, Math.min(1, isFinite(scrollDepth) ? scrollDepth : 0));\n}\n\nexport function callCallback(callback, action) {\n try {\n callback();\n } catch (e) {\n console.error(`Error in Woopra ${action} callback`); // eslint-disable-line no-console\n console.error(e.stack); // eslint-disable-line no-console\n }\n}\n\nfunction matchesElement(element, matcher) {\n return matcher.some((sel) => element.matches(sel));\n}\n\nexport function findParentElement(element, matcher) {\n let elem = element;\n\n while (!isUndefined(elem) && elem !== null) {\n if (elem.tagName && matchesElement(elem, matcher)) break;\n\n elem = elem.parentNode;\n }\n\n return elem;\n}\n\nexport function hasBeaconSupport() {\n return isFunction(navigator.sendBeacon);\n}\n\nexport function getDOMPath(element) {\n const stack = [];\n\n let elem = element;\n\n while (elem.parentNode) {\n let count = 0;\n let index = 0;\n\n for (let i = 0; i < elem.parentNode.childNodes.length; i++) {\n const siblingElement = elem.parentNode.childNodes[i];\n\n if (siblingElement.nodeName === elem.nodeName) {\n if (siblingElement === elem) index = count;\n\n count++;\n }\n }\n\n const nodeName = elem.nodeName.toLowerCase();\n\n if (elem.hasAttribute('id') && elem.id) {\n stack.unshift(`${nodeName}#${elem.id}`);\n } else if (count > 1) {\n stack.unshift(`${nodeName}[${index}]`);\n } else {\n stack.unshift(nodeName);\n }\n\n elem = elem.parentNode;\n }\n\n return stack.slice(1).join(' > ');\n}\n","import { isUndefined, throttle } from 'lodash-es';\nimport {\n DATA_TRACKED_ATTRIBUTE,\n ELEMENT_MATCHER_LINK,\n EVENT_CLICK,\n EVENT_LINK_CLICK,\n EVENT_MOUSEDOWN,\n EVENT_MOUSEMOVE,\n EVENT_SCROLL,\n EVENT_STATECHANGE,\n KEY_AUTO_DECORATE,\n KEY_DOWNLOAD_TRACKING,\n KEY_OUTGOING_TRACKING\n} from '../constants';\nimport globals from '../globals';\nimport { addEventListener, fire } from './events';\nimport PageLifecycle from './page-lifecycle';\nimport { findParentElement, isLeftClick } from './utils';\n\nfunction onClick(e) {\n let elem = e.srcElement || e.target;\n\n if (isLeftClick(e)) {\n fire(EVENT_CLICK, e, elem);\n }\n\n if (globals[KEY_DOWNLOAD_TRACKING] || globals[KEY_OUTGOING_TRACKING]) {\n elem = findParentElement(e.srcElement || e.target, ELEMENT_MATCHER_LINK);\n\n if (\n !isUndefined(elem) &&\n elem !== null &&\n !elem.getAttribute(DATA_TRACKED_ATTRIBUTE)\n ) {\n fire(EVENT_LINK_CLICK, e, elem);\n }\n }\n}\n\nfunction onMouseDown(e) {\n let elem;\n\n fire(EVENT_MOUSEMOVE, e, Date.now());\n\n if (globals[KEY_AUTO_DECORATE]) {\n elem = findParentElement(e.srcElement || e.target, ELEMENT_MATCHER_LINK);\n\n if (!isUndefined(elem) && elem !== null) {\n fire(KEY_AUTO_DECORATE, elem);\n }\n }\n}\n\nfunction onMouseMove(e) {\n fire(EVENT_MOUSEMOVE, e, Date.now());\n}\n\nconst onScroll = throttle(function onScroll(e) {\n fire(EVENT_SCROLL, e);\n}, 500);\n\nfunction onPageStateChange(e) {\n fire(EVENT_STATECHANGE, e);\n}\n\nconst CAPTURE = { capture: true };\nconst CAPTURE_PASSIVE = { capture: true, passive: true };\n\n// attaches events\n// needs to be handled here, instead of in a tracking instance because\n// these events should only be fired once on a page\nexport default function attachGlobalEvents() {\n addEventListener(document, EVENT_CLICK, onClick, CAPTURE);\n addEventListener(document, EVENT_MOUSEDOWN, onMouseDown, CAPTURE);\n addEventListener(document, EVENT_MOUSEMOVE, onMouseMove, CAPTURE_PASSIVE);\n addEventListener(window, EVENT_SCROLL, onScroll, CAPTURE_PASSIVE);\n\n PageLifecycle.addEventListener(EVENT_STATECHANGE, onPageStateChange);\n}\n","/**\n * This method returns `undefined`.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Util\n * @example\n *\n * _.times(2, _.noop);\n * // => [undefined, undefined]\n */\nfunction noop() {\n // No operation performed.\n}\n\nexport default noop;\n","export default class WoopraAction {\n constructor(woopra, id, params, meta) {\n this.woopra = woopra;\n this.id = id;\n this.params = params;\n this.meta = meta;\n }\n\n update(options = {}, lastArg) {\n if (options.event && options.event !== this.params.event) {\n this.params.event = options.event;\n }\n\n this.woopra.update(\n this.id,\n { ...options, $action: this.params.event },\n lastArg\n );\n }\n\n cancel() {\n this.woopra.cancelAction(this.id);\n }\n}\n","/**\n * The base implementation of `_.clamp` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n */\nfunction baseClamp(number, lower, upper) {\n if (number === number) {\n if (upper !== undefined) {\n number = number <= upper ? number : upper;\n }\n if (lower !== undefined) {\n number = number >= lower ? number : lower;\n }\n }\n return number;\n}\n\nexport default baseClamp;\n","import Symbol from './_Symbol.js';\nimport arrayMap from './_arrayMap.js';\nimport isArray from './isArray.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nexport default baseToString;\n","/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\n\nexport default arrayMap;\n","import toNumber from './toNumber.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0,\n MAX_INTEGER = 1.7976931348623157e+308;\n\n/**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\nfunction toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === INFINITY || value === -INFINITY) {\n var sign = (value < 0 ? -1 : 1);\n return sign * MAX_INTEGER;\n }\n return value === value ? value : 0;\n}\n\nexport default toFinite;\n","import toFinite from './toFinite.js';\n\n/**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\nfunction toInteger(value) {\n var result = toFinite(value),\n remainder = result % 1;\n\n return result === result ? (remainder ? result - remainder : result) : 0;\n}\n\nexport default toInteger;\n","import baseToString from './_baseToString.js';\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\nexport default toString;\n","/*\\\n|*|\n|*| :: cookies.js ::\n|*|\n|*| A complete cookies reader/writer framework with full unicode support.\n|*|\n|*| Revision #1 - September 4, 2014\n|*|\n|*| https://developer.mozilla.org/en-US/docs/Web/API/document.cookie\n|*| https://developer.mozilla.org/User:fusionchess\n|*|\n|*| This framework is released under the GNU Public License, version 3 or later.\n|*| http://www.gnu.org/licenses/gpl-3.0-standalone.html\n|*|\n|*| Syntaxes:\n|*|\n|*| * docCookies.setItem(name, value[, end[, path[, domain[, secure]]]])\n|*| * docCookies.getItem(name)\n|*| * docCookies.removeItem(name[, path[, domain]])\n|*| * docCookies.hasItem(name)\n|*| * docCookies.keys()\n|*|\n\\*/\n\nexport function getItem(sKey) {\n if (!sKey) {\n return null;\n }\n return (\n decodeURIComponent(\n document.cookie.replace(\n new RegExp(\n '(?:(?:^|.*;)\\\\s*' +\n encodeURIComponent(sKey).replace(/[\\-\\.\\+\\*]/g, '\\\\$&') +\n '\\\\s*\\\\=\\\\s*([^;]*).*$)|^.*$'\n ),\n '$1'\n )\n ) || null\n );\n}\n\nexport function setItem(sKey, sValue, vEnd, sPath, sDomain, bSecure) {\n if (!sKey || /^(?:expires|max\\-age|path|domain|secure)$/i.test(sKey)) {\n return false;\n }\n let sExpires = '';\n if (vEnd) {\n switch (vEnd.constructor) {\n case Number:\n sExpires =\n vEnd === Infinity\n ? '; expires=Fri, 31 Dec 9999 23:59:59 GMT'\n : '; max-age=' + vEnd;\n break;\n case String:\n sExpires = '; expires=' + vEnd;\n break;\n case Date:\n sExpires = '; expires=' + vEnd.toUTCString();\n break;\n }\n }\n document.cookie =\n encodeURIComponent(sKey) +\n '=' +\n encodeURIComponent(sValue) +\n sExpires +\n (sDomain ? '; domain=' + sDomain : '') +\n (sPath ? '; path=' + sPath : '') +\n (bSecure ? '; secure' : '');\n return true;\n}\n\nexport function removeItem(sKey, sPath, sDomain) {\n if (!hasItem(sKey)) {\n return false;\n }\n document.cookie =\n encodeURIComponent(sKey) +\n '=; expires=Thu, 01 Jan 1970 00:00:00 GMT' +\n (sDomain ? '; domain=' + sDomain : '') +\n (sPath ? '; path=' + sPath : '');\n return true;\n}\n\nexport function hasItem(sKey) {\n if (!sKey) {\n return false;\n }\n return new RegExp(\n '(?:^|;\\\\s*)' +\n encodeURIComponent(sKey).replace(/[\\-\\.\\+\\*]/g, '\\\\$&') +\n '\\\\s*\\\\='\n ).test(document.cookie);\n}\n\nexport function keys() {\n const aKeys = document.cookie\n .replace(/((?:^|\\s*;)[^\\=]+)(?=;|$)|^\\s*|\\s*(?:\\=[^;]*)?(?:\\1|$)/g, '')\n .split(/\\s*(?:\\=[^;]*)?;\\s*/);\n for (let nLen = aKeys.length, nIdx = 0; nIdx < nLen; nIdx++) {\n aKeys[nIdx] = decodeURIComponent(aKeys[nIdx]);\n }\n return aKeys;\n}\n","const TYPE_BUTTON = 'button';\nconst TYPE_SUBMIT = 'submit';\nconst TYPE_RESET = 'reset';\n\n// https://code.google.com/p/form-serialize/\n// modified to return an object\nexport function serializeForm(form, options = {}) {\n if (!form || form.nodeName !== 'FORM') {\n return;\n }\n\n const exclude = options.exclude || [];\n const data = {};\n\n for (let i = form.elements.length - 1; i >= 0; i = i - 1) {\n if (\n form.elements[i].name === '' ||\n exclude.indexOf(form.elements[i].name) > -1\n ) {\n continue;\n }\n switch (form.elements[i].nodeName) {\n case 'INPUT':\n switch (form.elements[i].type) {\n case 'text':\n case 'hidden':\n case TYPE_BUTTON:\n case TYPE_RESET:\n case TYPE_SUBMIT:\n data[form.elements[i].name] = form.elements[i].value;\n break;\n case 'checkbox':\n case 'radio':\n if (form.elements[i].checked) {\n data[form.elements[i].name] = form.elements[i].value;\n }\n break;\n case 'file':\n break;\n }\n break;\n case 'TEXTAREA':\n data[form.elements[i].name] = form.elements[i].value;\n break;\n case 'SELECT':\n switch (form.elements[i].type) {\n case 'select-one':\n data[form.elements[i].name] = form.elements[i].value;\n break;\n case 'select-multiple':\n for (\n let j = form.elements[i].options.length - 1;\n j >= 0;\n j = j - 1\n ) {\n if (form.elements[i].options[j].selected) {\n data[form.elements[i].name] = form.elements[i].options[j].value;\n }\n }\n break;\n }\n break;\n case 'BUTTON':\n switch (form.elements[i].type) {\n case TYPE_RESET:\n case TYPE_SUBMIT:\n case TYPE_BUTTON:\n data[form.elements[i].name] = form.elements[i].value;\n break;\n }\n break;\n }\n }\n return data;\n}\n","import { isUndefined, noop } from 'lodash-es';\n\nexport function removeScript(script) {\n if (script && script.parentNode) {\n script.parentNode.removeChild(script);\n }\n}\n\nconst statusIsSuccessful = (readyState) =>\n readyState === 4 || readyState === 'complete' || readyState === 'loaded';\n\nexport function loadScript(url, callback = noop, errorCallback = noop) {\n const script = document.createElement('script');\n\n script.type = 'text/javascript';\n script.async = true;\n\n if (!isUndefined(script.onreadystatechange)) {\n script.onreadystatechange = function onreadystatechange() {\n if (statusIsSuccessful(this.readyState)) {\n callback();\n removeScript(script);\n }\n };\n } else {\n script.onload = () => {\n callback();\n removeScript(script);\n };\n script.onerror = (e) => {\n errorCallback(e);\n removeScript(script);\n };\n }\n\n script.src = url;\n\n if (document.body) document.body.appendChild(script);\n else document.head.appendChild(script);\n}\n","import { endsWith, isUndefined, startsWith } from 'lodash-es';\nimport {\n CAMPAIGN_KEYS,\n KEY_OUTGOING_IGNORE_SUBDOMAIN,\n SECOND_LEVEL_TLDS,\n XDM_PARAM_NAME\n} from './constants';\nimport globals from './globals';\nimport * as docCookies from './lib/cookies';\nimport { addEventListener, fire, on } from './lib/events';\nimport { serializeForm } from './lib/form';\nimport { loadScript, removeScript } from './lib/script';\nimport { getElement, isLeftClick, randomString } from './lib/utils';\n\nconst Woopra = {};\n\nWoopra.docCookies = docCookies;\n\n/**\n * Wrapper for window.location to allow stubs in testing\n */\nWoopra.location = function location(property, value) {\n // make sure property is valid\n if (!isUndefined(window.location[property])) {\n if (!isUndefined(value)) {\n window.location[property] = value;\n } else {\n return window.location[property];\n }\n }\n};\n\nfunction getHostname() {\n return Woopra.location('hostname');\n}\n\n/**\n * This exists to please the Safari gods. Sinon can't stub window in Safari.\n */\nWoopra.historyReplaceState =\n window.history && window.history.replaceState\n ? function historyReplaceState(data, title, url) {\n return window.history.replaceState(data, title, url);\n }\n : function () {};\n\n/**\n * Hides any URL parameters by calling window.history.replaceState\n *\n * @param {Array} params A list of parameter prefixes that will be hidden\n * @return {String} Returns the new URL that will be used\n */\nWoopra.hideUrlParams = function hideUrlParams(params) {\n const regex = new RegExp(\n `[?&]+((?:${params.join('|')})[^=&]*)=([^&#]*)`,\n 'gi'\n );\n const href = Woopra.location('href').replace(regex, '');\n\n Woopra.historyReplaceState(null, null, href);\n\n return href;\n};\n\n/**\n * Retrieves the current URL parameters as an object\n *\n * @return {Object} An object for all of the URL parameters\n */\nWoopra.getUrlParams = function getUrlParams() {\n const vars = {};\n const href = Woopra.location('href');\n\n if (href) {\n href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function (m, key, value) {\n vars[key] = decodeURIComponent(value.split('+').join(' '));\n });\n }\n\n return vars;\n};\n\nWoopra.buildUrlParams = function buildUrlParams(params, prefix = '') {\n const p = [];\n\n if (isUndefined(params)) {\n return params;\n }\n\n for (let key in params) {\n if (params.hasOwnProperty(key)) {\n if (\n params[key] !== 'undefined' &&\n params[key] !== 'null' &&\n !isUndefined(params[key])\n ) {\n p.push(\n `${prefix}${encodeURIComponent(key)}=${encodeURIComponent(\n params[key]\n )}`\n );\n }\n }\n }\n return p.join('&');\n};\n\n/**\n * Parses the URL parameters for data beginning with a certain prefix\n *\n * @param {Function} method The callback method for each key found matching `prefix`\n * @param {string} prefix The prefix that the parameter should start with\n */\nWoopra.getCustomData = function getCustomData(method, prefix = 'wv_') {\n const vars = Woopra.getUrlParams();\n\n for (let i in vars) {\n if (vars.hasOwnProperty(i)) {\n const value = vars[i];\n\n if (i.substring(0, prefix.length) === prefix) {\n const key = i.substring(prefix.length);\n method.call(this, key, value);\n }\n }\n }\n};\n\n/**\n * Retrieves the current client domain name using the hostname\n * and returning the last two tokens with a `.` separator (domain + tld).\n *\n * This can be an issue if there is a second level domain\n */\nWoopra.getDomain = function getDomain(hostname = getHostname()) {\n const domain = hostname.substring(\n hostname.lastIndexOf('.', hostname.lastIndexOf('.') - 1) + 1\n );\n\n // check if domain is in list of second level domains, ignore if so\n if (SECOND_LEVEL_TLDS.indexOf(domain) !== -1) {\n return hostname.substring(\n hostname.lastIndexOf('.', hostname.indexOf(domain) - 2) + 1\n );\n }\n\n return domain;\n};\n\n/**\n * Returns the current hostname with 'www' stripped out\n */\nWoopra.getHostnameNoWww = function getHostnameNoWww() {\n const hostname = getHostname();\n\n if (hostname.indexOf('www.') === 0) {\n return hostname.replace('www.', '');\n }\n\n return hostname;\n};\n\n/**\n * Determines if the current URL should be considered an outgoing URL\n */\nWoopra.isOutgoingLink = function isOutgoingLink(targetHostname) {\n const currentHostname = getHostname();\n const currentDomain = Woopra.getDomain(currentHostname);\n\n return (\n targetHostname !== currentHostname &&\n targetHostname.replace(/^www\\./, '') !==\n currentHostname.replace(/^www\\./, '') &&\n (!globals[KEY_OUTGOING_IGNORE_SUBDOMAIN] ||\n currentDomain !== Woopra.getDomain(targetHostname)) &&\n !Woopra.startsWith(targetHostname, 'javascript') &&\n targetHostname !== '' &&\n targetHostname !== '#'\n );\n};\n\nWoopra.hideCrossDomainId = function hideCrossDomainId() {\n return Woopra.hideUrlParams([XDM_PARAM_NAME]);\n};\n\nWoopra.mapQueryParams = function mapQueryParams(mapping) {\n const vars = Woopra.getUrlParams();\n const params = {};\n\n for (let key in mapping) {\n const value = vars[key];\n if (!isUndefined(value)) {\n params[mapping[key]] = value;\n }\n }\n\n return params;\n};\n\nWoopra.redirect = function redirect(link) {\n Woopra.location('href', link);\n};\n\n/**\n * Parses current URL for parameters that start with either `utm_` or `woo_`\n * and have the keys `source`, `medium`, `content`, `campaign`, `term`\n *\n * @return {Object} Returns an object with campaign keys as keys\n */\nWoopra.getCampaignData = function getCampaignData() {\n const vars = Woopra.getUrlParams();\n const campaign = {};\n\n for (let i = 0; i < CAMPAIGN_KEYS.length; i++) {\n const key = CAMPAIGN_KEYS[i];\n const value = vars[`utm_${key}`] || vars[`woo_${key}`];\n\n if (!isUndefined(value)) {\n campaign[`campaign_${key === 'campaign' ? 'name' : key}`] = value;\n }\n }\n\n return campaign;\n};\n\n/**\n * Hides any campaign data (query params: wv_, woo_, utm_) from the URL\n * by using replaceState (if available)\n */\nWoopra.hideCampaignData = function hideCampaignData() {\n return Woopra.hideUrlParams(['wv_', 'woo_', 'utm_']);\n};\n\nWoopra.leftClick = isLeftClick;\nWoopra.randomString = randomString;\nWoopra.getElement = getElement;\nWoopra.loadScript = loadScript;\nWoopra.removeScript = removeScript;\nWoopra.serializeForm = serializeForm;\nWoopra._on = on;\nWoopra._fire = fire;\nWoopra.attachEvent = addEventListener;\nWoopra.startsWith = startsWith;\nWoopra.endsWith = endsWith;\n\nexport default Woopra;\n","import baseClamp from './_baseClamp.js';\nimport baseToString from './_baseToString.js';\nimport toInteger from './toInteger.js';\nimport toString from './toString.js';\n\n/**\n * Checks if `string` starts with the given target string.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {string} [target] The string to search for.\n * @param {number} [position=0] The position to search from.\n * @returns {boolean} Returns `true` if `string` starts with `target`,\n * else `false`.\n * @example\n *\n * _.startsWith('abc', 'a');\n * // => true\n *\n * _.startsWith('abc', 'b');\n * // => false\n *\n * _.startsWith('abc', 'b', 1);\n * // => true\n */\nfunction startsWith(string, target, position) {\n string = toString(string);\n position = position == null\n ? 0\n : baseClamp(toInteger(position), 0, string.length);\n\n target = baseToString(target);\n return string.slice(position, position + target.length) == target;\n}\n\nexport default startsWith;\n","import baseClamp from './_baseClamp.js';\nimport baseToString from './_baseToString.js';\nimport toInteger from './toInteger.js';\nimport toString from './toString.js';\n\n/**\n * Checks if `string` ends with the given target string.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {string} [target] The string to search for.\n * @param {number} [position=string.length] The position to search up to.\n * @returns {boolean} Returns `true` if `string` ends with `target`,\n * else `false`.\n * @example\n *\n * _.endsWith('abc', 'c');\n * // => true\n *\n * _.endsWith('abc', 'b');\n * // => false\n *\n * _.endsWith('abc', 'b', 2);\n * // => true\n */\nfunction endsWith(string, target, position) {\n string = toString(string);\n target = baseToString(target);\n\n var length = string.length;\n position = position === undefined\n ? length\n : baseClamp(toInteger(position), 0, length);\n\n var end = position;\n position -= target.length;\n return position >= 0 && string.slice(position, end) == target;\n}\n\nexport default endsWith;\n","import {\n isArray,\n isFunction,\n isObject,\n isString,\n isUndefined,\n noop\n} from 'lodash-es';\nimport WoopraAction from './action';\nimport {\n ACTION_PROPERTY_ALIASES,\n ACTION_PROPERTY_PREFIX,\n ACTION_PV,\n DATA_TRACKED_ATTRIBUTE,\n DEFAULT_DOWNLOAD_EXTENSIONS,\n ELEMENT_MATCHER_CLICK,\n ENDPOINTS,\n ENDPOINT_IDENTIFY,\n ENDPOINT_TRACK,\n ENDPOINT_UPDATE,\n EVENT_CLICK,\n EVENT_DOWNLOAD,\n EVENT_LINK_CLICK,\n EVENT_MOUSEMOVE,\n EVENT_OUTGOING,\n EVENT_SCROLL,\n EVENT_STATECHANGE,\n IDPTNC,\n KEY_APP,\n KEY_AUGMENT_ACTION,\n KEY_AUTO_DECORATE,\n KEY_BEACONS,\n KEY_CAMPAIGN_ONCE,\n KEY_CLICK_PAUSE,\n KEY_CLICK_TRACKING,\n KEY_CLICK_TRACKING_MATCHER_SELECTORS,\n KEY_CONTEXT,\n KEY_COOKIE_DOMAIN,\n KEY_COOKIE_EXPIRE,\n KEY_COOKIE_NAME,\n KEY_COOKIE_PATH,\n KEY_COOKIE_SECURE,\n KEY_CROSS_DOMAIN,\n KEY_DOMAIN,\n KEY_DOWNLOAD_EXTENSIONS,\n KEY_DOWNLOAD_PAUSE,\n KEY_DOWNLOAD_TRACKING,\n KEY_FORM_PAUSE,\n KEY_HIDE_CAMPAIGN,\n KEY_HIDE_XDM_DATA,\n KEY_IDLE_THRESHOLD,\n KEY_IDLE_TIMEOUT,\n KEY_IGNORE_QUERY_URL,\n KEY_IP,\n KEY_MAP_QUERY_PARAMS,\n KEY_OUTGOING_IGNORE_SUBDOMAIN,\n KEY_OUTGOING_PAUSE,\n KEY_OUTGOING_TRACKING,\n KEY_PERSONALIZATION,\n KEY_PING,\n KEY_PING_INTERVAL,\n KEY_PROTOCOL,\n KEY_REGION,\n KEY_SAVE_URL_HASH,\n KEY_THIRD_PARTY,\n KEY_USE_COOKIES,\n LIFECYCLE_ACTION,\n LIFECYCLE_PAGE,\n MAX_PING_INTERVAL,\n META_CANCELLED,\n META_DIRTY,\n META_DURATION,\n META_EXPIRED,\n META_LEAVE,\n META_RETRACK,\n META_SENT,\n META_TIMESTAMP,\n MIN_PING_INTERVAL,\n ORG_PROPERTY_PREFIX,\n PAGE_LIFECYCLE_STATE_ACTIVE,\n PAGE_LIFECYCLE_STATE_HIDDEN,\n PAGE_LIFECYCLE_STATE_PASSIVE,\n PAGE_LIFECYCLE_STATE_TERMINATED,\n REGION_EU,\n SCROLL_DEPTH,\n TARGET_BLANK,\n URL_ID_REGEX,\n VERSION,\n VISITOR_PROPERTY_PREFIX,\n VISIT_PROPERTY_PREFIX,\n XDM_PARAM_NAME\n} from './constants';\nimport globals from './globals';\nimport { addEventListener, on, removeHandler } from './lib/events';\nimport {\n callCallback,\n findParentElement,\n getDOMPath,\n getElement,\n getScrollDepth,\n hasBeaconSupport,\n jsonStringifyObjectValues,\n prefixObjectKeys,\n randomString\n} from './lib/utils';\nimport Woopra from './woopra';\n\nconst fire = Woopra._fire;\n\nexport default class Tracker {\n constructor(instanceName) {\n this.visitorData = {};\n this.sessionData = {};\n this.orgData = {};\n\n this.options = {\n [KEY_APP]: 'js-client',\n [KEY_BEACONS]: hasBeaconSupport(),\n [KEY_CAMPAIGN_ONCE]: false,\n [KEY_CLICK_TRACKING_MATCHER_SELECTORS]: ELEMENT_MATCHER_CLICK,\n [KEY_COOKIE_DOMAIN]: `.${Woopra.getHostnameNoWww()}`,\n [KEY_COOKIE_EXPIRE]: new Date(\n new Date().setDate(new Date().getDate() + 730)\n ),\n [KEY_COOKIE_NAME]: 'wooTracker',\n [KEY_COOKIE_PATH]: '/',\n [KEY_COOKIE_SECURE]: Woopra.location('protocol') === 'https:',\n [KEY_CROSS_DOMAIN]: false,\n [KEY_DOWNLOAD_EXTENSIONS]: DEFAULT_DOWNLOAD_EXTENSIONS,\n [KEY_DOWNLOAD_PAUSE]: 200,\n [KEY_DOWNLOAD_TRACKING]: false,\n [KEY_HIDE_CAMPAIGN]: false,\n [KEY_HIDE_XDM_DATA]: false,\n [KEY_IDLE_THRESHOLD]: 10 * 1_000,\n [KEY_IDLE_TIMEOUT]: 60 * 10 * 1_000,\n [KEY_IGNORE_QUERY_URL]: false,\n [KEY_MAP_QUERY_PARAMS]: {},\n [KEY_OUTGOING_IGNORE_SUBDOMAIN]: true,\n [KEY_OUTGOING_PAUSE]: 200,\n [KEY_OUTGOING_TRACKING]: false,\n [KEY_PERSONALIZATION]: true,\n [KEY_PING_INTERVAL]: 12 * 1_000,\n [KEY_PING]: false,\n [KEY_PROTOCOL]: 'https',\n [KEY_REGION]: REGION_EU,\n [KEY_SAVE_URL_HASH]: true,\n [KEY_THIRD_PARTY]: false,\n [KEY_CLICK_PAUSE]: 250,\n [KEY_FORM_PAUSE]: 250,\n [KEY_USE_COOKIES]: true\n };\n\n this.instanceName = instanceName || 'woopra';\n this.idle = 0;\n this.cookie = '';\n this.last_activity = Date.now();\n this.loaded = false;\n this.dirtyCookie = false;\n this.sentCampaign = false;\n this.version = VERSION;\n this.pending = [];\n this.beaconQueue = [];\n this.lastAction = null;\n\n if (instanceName && instanceName !== '') {\n window[instanceName] = this;\n }\n }\n\n init() {\n this.__l = {};\n this._processQueue('config');\n this._setupCookie();\n this._bindEvents();\n\n // Otherwise loading indicator gets stuck until the every response\n // in the queue has been received\n setTimeout(() => this._processQueue(), 1);\n\n this.loaded = true;\n\n const callback = this.config('initialized');\n\n if (isFunction(callback)) {\n callback(this.instanceName);\n }\n\n // Safe to remove cross domain url parameter after setupCookie is called\n // Should only need to be called once on load\n if (this.config(KEY_HIDE_XDM_DATA)) {\n Woopra.hideCrossDomainId();\n }\n }\n\n /**\n * Processes the tracker queue in case user tries to push events\n * before tracker is ready.\n */\n _processQueue(type) {\n var _wpt = window.__woo ? window.__woo[this.instanceName] : _wpt;\n _wpt = window._w ? window._w[this.instanceName] : _wpt;\n\n // if _wpt is undefined, means script was loaded asynchronously and\n // there is no queue\n\n if (_wpt && _wpt._e) {\n const events = _wpt._e;\n for (let i = 0; i < events.length; i++) {\n const action = events[i];\n if (\n !isUndefined(action) &&\n this[action[0]] &&\n (isUndefined(type) || type === action[0])\n ) {\n this[action[0]].apply(this, Array.prototype.slice.call(action, 1));\n }\n }\n }\n }\n\n /**\n * Sets up the tracking cookie\n */\n _setupCookie() {\n const url_id = this.getUrlId();\n\n this.cookie = this.getCookie();\n\n // overwrite saved cookie if id is in url\n if (url_id) {\n this.cookie = url_id;\n }\n\n // Setup cookie\n if (!this.cookie || this.cookie.length < 1) {\n this.cookie = randomString();\n }\n\n Woopra.docCookies.setItem(\n this.config(KEY_COOKIE_NAME),\n this.cookie,\n this.config(KEY_COOKIE_EXPIRE),\n this.config(KEY_COOKIE_PATH),\n this.config(KEY_COOKIE_DOMAIN),\n this.config(KEY_COOKIE_SECURE)\n );\n\n this.dirtyCookie = true;\n }\n\n /**\n * Binds some events to measure mouse and keyboard events\n */\n _bindEvents() {\n on(this, EVENT_CLICK, (e) => this.onClick(e));\n on(this, EVENT_DOWNLOAD, (url) => this.downloaded(url));\n on(this, EVENT_LINK_CLICK, (e, link) => this.onLink(e, link));\n on(this, EVENT_MOUSEMOVE, (e, l) => this.moved(e, l));\n on(this, EVENT_OUTGOING, (url) => this.outgoing(url));\n on(this, EVENT_SCROLL, (elem) => this.onScroll(elem));\n on(this, EVENT_STATECHANGE, (e) => this.onPageStateChange(e));\n on(this, KEY_AUTO_DECORATE, (elem) => this.autoDecorate(elem));\n }\n\n /**\n * Sets/gets values from dataStore depending on arguments passed\n *\n * @param dataStore Object The tracker property to read/write\n * @param key String/Object Returns property object if key and value is undefined,\n * acts as a getter if only `key` is defined and a string, and\n * acts as a setter if `key` and `value` are defined OR if `key` is an object.\n */\n _dataSetter(dataStore, key, value) {\n if (isUndefined(key)) {\n return dataStore;\n }\n\n if (isUndefined(value)) {\n if (isString(key)) {\n return dataStore[key];\n }\n if (isObject(key)) {\n for (let i in key) {\n if (key.hasOwnProperty(i)) {\n if (Woopra.startsWith(i, 'cookie_')) {\n this.dirtyCookie = true;\n }\n dataStore[i] = key[i];\n }\n }\n }\n } else {\n if (Woopra.startsWith(key, 'cookie_')) {\n this.dirtyCookie = true;\n }\n dataStore[key] = value;\n }\n\n return this;\n }\n\n getVisitorUrlData() {\n Woopra.getCustomData.call(this, this.identify, 'wv_');\n }\n\n /*\n * Returns the Woopra cookie string\n */\n getCookie() {\n return Woopra.docCookies.getItem(this.config(KEY_COOKIE_NAME));\n }\n\n getProtocol() {\n const protocol = this.config(KEY_PROTOCOL);\n return protocol && protocol !== '' ? `${protocol}:` : '';\n }\n\n /**\n * Generates a destination endpoint string to use depending on different\n * configuration options\n */\n getEndpoint(path = '') {\n const protocol = this.getProtocol();\n\n if (this.config(KEY_THIRD_PARTY) && !this.config(KEY_DOMAIN)) {\n throw new Error('Error: `domain` is not set.');\n }\n\n let thirdPartyPath = this.config(KEY_THIRD_PARTY)\n ? `tp/${this.config(KEY_DOMAIN)}`\n : '';\n\n if (path && !Woopra.endsWith(path, '/')) {\n path += '/';\n }\n\n if (thirdPartyPath && !Woopra.startsWith(path, '/')) {\n thirdPartyPath += '/';\n }\n\n const region = this.config(KEY_REGION);\n const endpoint = ENDPOINTS[region];\n\n if (!endpoint) throw new Error(`Error: Invalid region: ${region}`);\n\n return `${protocol}//${endpoint}${thirdPartyPath}${path}`;\n }\n\n /**\n * Sets configuration options\n */\n config(key, value) {\n const data = this._dataSetter(this.options, key, value);\n\n // dataSetter returns `this` when it is used as a setter\n if (data === this) {\n // clamp ping interval\n this.options[KEY_PING_INTERVAL] = Math.max(\n MIN_PING_INTERVAL,\n Math.min(this.options[KEY_PING_INTERVAL], MAX_PING_INTERVAL)\n );\n\n // set script wide variables for events that are bound on script load\n // since we shouldn't bind per tracker instance\n globals[KEY_OUTGOING_TRACKING] = this.options[KEY_OUTGOING_TRACKING];\n globals[KEY_DOWNLOAD_TRACKING] = this.options[KEY_DOWNLOAD_TRACKING];\n globals[KEY_AUTO_DECORATE] =\n isUndefined(globals[KEY_AUTO_DECORATE]) &&\n this.options[KEY_CROSS_DOMAIN]\n ? this.options[KEY_CROSS_DOMAIN]\n : globals[KEY_AUTO_DECORATE];\n globals[KEY_OUTGOING_IGNORE_SUBDOMAIN] =\n this.options[KEY_OUTGOING_IGNORE_SUBDOMAIN];\n\n if (this.dirtyCookie && this.loaded) {\n this._setupCookie();\n }\n }\n\n return data;\n }\n\n /**\n * Use to attach custom visit data that doesn't stick to visitor\n * ** Not in use yet\n */\n visit(key, value) {\n return this._dataSetter(this.sessionData, key, value);\n }\n\n /**\n * Attach custom visitor data\n */\n identify(...args) {\n let key = undefined;\n let value = undefined;\n let orgKey = undefined;\n let orgValue = undefined;\n\n // identify(props, orgProps)\n if (isObject(args[0]) && isObject(args[1])) {\n key = args[0];\n orgKey = args[1];\n }\n // identify(props, orgKey, orgValue)\n else if (isObject(args[0]) && isString(args[1])) {\n key = args[0];\n orgKey = args[1];\n orgValue = args[2];\n }\n // identify(key, value, orgProps)\n else if (isString(args[0]) && isString(args[1]) && isObject(args[2])) {\n key = args[0];\n value = args[1];\n orgKey = args[2];\n }\n // identify(key, value, orgKey, orgValue)\n else {\n key = args[0];\n value = args[1];\n orgKey = args[2];\n orgValue = args[3];\n }\n\n const visitorProperties = this._dataSetter(this.visitorData, key, value);\n\n if (orgKey) this._dataSetter(this.orgData, orgKey, orgValue);\n\n return visitorProperties;\n }\n\n /**\n * Attach custom org data\n */\n identifyOrg(key, value) {\n return this._dataSetter(this.orgData, key, value);\n }\n\n /**\n * Generic method to call any tracker method\n */\n call(funcName) {\n if (isFunction(this[funcName])) {\n this[funcName].apply(this, Array.prototype.slice.call(arguments, 1));\n }\n }\n\n /**\n * Builds the correct tracking Url and performs an HTTP request\n */\n _push(options = {}) {\n const types = [\n ['visitorData', VISITOR_PROPERTY_PREFIX],\n ['eventData', ACTION_PROPERTY_PREFIX],\n ['sessionData', VISIT_PROPERTY_PREFIX],\n ['orgData', ORG_PROPERTY_PREFIX]\n ];\n\n let data = {};\n\n const endpoint = this.getEndpoint(options.endpoint);\n const lifecycle = options.lifecycle || LIFECYCLE_ACTION;\n\n // Load custom visitor params from url\n this.getVisitorUrlData();\n\n if (this.config(KEY_HIDE_CAMPAIGN)) {\n Woopra.hideCampaignData();\n }\n\n // push tracker config values\n this._dataSetter(data, this.getOptionParams());\n\n // push eventName if it exists\n if (options.eventName) {\n data.event = options.eventName;\n }\n\n // push close if no personalization\n if (!this.config(KEY_PERSONALIZATION)) {\n data.close = true;\n }\n\n data.timeout = isUndefined(options.timeout)\n ? this.config(KEY_IDLE_TIMEOUT)\n : options.timeout;\n\n const rawData = {};\n\n for (const [original, alias] of ACTION_PROPERTY_ALIASES) {\n if (options.eventData && options.eventData[original]) {\n rawData[alias] = options.eventData[original];\n }\n }\n\n this._dataSetter(data, rawData);\n\n for (let i = 0; i < types.length; i++) {\n const [key, prefix] = types[i];\n\n let newData = jsonStringifyObjectValues(\n prefixObjectKeys(\n options[key],\n prefix,\n prefix === ACTION_PROPERTY_PREFIX ? ACTION_PROPERTY_ALIASES : []\n )\n );\n\n if (\n prefix === ORG_PROPERTY_PREFIX &&\n newData[`${ORG_PROPERTY_PREFIX}id`]\n ) {\n newData.org = newData[`${ORG_PROPERTY_PREFIX}id`];\n delete newData[`${ORG_PROPERTY_PREFIX}id`];\n }\n\n this._dataSetter(data, newData);\n }\n\n if (this.config(KEY_CONTEXT)) {\n try {\n var contextData = JSON.stringify(this.config(KEY_CONTEXT));\n data[KEY_CONTEXT] = encodeURIComponent(contextData);\n } catch (e) {}\n }\n\n if (options.fullEventData) data = options.fullEventData;\n\n const dirty = Boolean(options.useBeacon || this.isUnloading);\n\n const meta = {\n [META_DIRTY]: dirty,\n [META_DURATION]: 0,\n [META_RETRACK]: Boolean(options.retrack),\n [META_SENT]: !dirty,\n [META_TIMESTAMP]: Date.now()\n };\n\n const action = new WoopraAction(this, data[IDPTNC], data, meta);\n\n const callback = isFunction(options.callback)\n ? () => options.callback(action)\n : noop;\n const beforeCallback = isFunction(options.beforeCallback)\n ? () => options.beforeCallback(action)\n : noop;\n const errorCallback = options.errorCallback || noop;\n\n // cancel previous lifecycle page event if a new one is tracked\n if (lifecycle === LIFECYCLE_PAGE) {\n this.pending.forEach((item) => {\n if (item.lifecycle === LIFECYCLE_PAGE && item.args.eventData[IDPTNC]) {\n this.cancelAction(item.args.eventData[IDPTNC]);\n }\n });\n }\n\n if (lifecycle === LIFECYCLE_PAGE || options.useBeacon || this.isUnloading) {\n this.pending.push({\n lifecycle,\n endpoint: options.endpoint,\n params: data,\n args: options,\n meta,\n callback,\n errorCallback\n });\n }\n\n if (lifecycle !== LIFECYCLE_PAGE && options.endpoint === ENDPOINT_TRACK) {\n this.lastAction = action;\n }\n\n if (this.isUnloading || (options.useBeacon && !options.queue)) {\n this.sendBeacons();\n } else if (!options.queue) {\n const queryString = Woopra.buildUrlParams(data);\n const scriptUrl = `${endpoint}?${queryString}`;\n\n const onSuccess = () => callCallback(callback, data.event);\n const onError = () => callCallback(errorCallback, data.event);\n\n Woopra.loadScript(scriptUrl, onSuccess, onError);\n }\n\n setTimeout(() => callCallback(beforeCallback, data.event));\n }\n\n /**\n * Send an event to tracking servr\n */\n track(name, options) {\n let eventData = {};\n let eventName = '';\n let hash;\n let callback;\n let beforeCallback;\n let errorCallback;\n let lastArg = arguments[arguments.length - 1];\n let lifecycle = LIFECYCLE_ACTION;\n let queue = false;\n let useBeacon = false;\n let timeout;\n let retrack;\n\n if (isFunction(lastArg)) callback = lastArg;\n else if (isObject(lastArg)) {\n if (isFunction(lastArg.callback)) callback = lastArg.callback;\n else if (isFunction(lastArg.onSuccess)) callback = lastArg.onSuccess;\n if (isFunction(lastArg.onBeforeSend))\n beforeCallback = lastArg.onBeforeSend;\n if (isFunction(lastArg.onError)) errorCallback = lastArg.onError;\n\n if (!isUndefined(lastArg.lifecycle)) lifecycle = lastArg.lifecycle;\n if (!isUndefined(lastArg.timeout)) timeout = lastArg.timeout;\n if (!isUndefined(lastArg.retrack)) retrack = lastArg.retrack;\n\n if (this.config(KEY_BEACONS)) {\n if (!isUndefined(lastArg.queue)) queue = Boolean(lastArg.queue);\n\n if (!isUndefined(lastArg.useBeacon)) {\n useBeacon = Boolean(lastArg.useBeacon);\n } else if (queue) useBeacon = true;\n } else {\n useBeacon = false;\n }\n }\n\n // Load campaign params (load first to allow overrides)\n if (!this.config(KEY_CAMPAIGN_ONCE) || !this.sentCampaign) {\n eventData = { ...eventData, ...Woopra.getCampaignData() };\n this.sentCampaign = true;\n }\n\n // Load query params mapping into Woopra event\n eventData = {\n ...eventData,\n ...Woopra.mapQueryParams(this.config(KEY_MAP_QUERY_PARAMS))\n };\n\n // Track default: pageview\n if (isUndefined(name) || name === callback) {\n eventName = ACTION_PV;\n }\n // Track custom events\n else if (isUndefined(options) || options === callback) {\n if (isString(name)) {\n eventName = name;\n }\n if (isObject(name)) {\n if (name.name && name.name === ACTION_PV) {\n eventName = ACTION_PV;\n }\n\n this._dataSetter(eventData, name);\n }\n }\n // Track custom events in format of name,object\n else {\n this._dataSetter(eventData, options);\n eventName = name;\n }\n\n eventData[IDPTNC] = randomString();\n\n // Add some defaults for pageview\n if (eventName === ACTION_PV) {\n eventData.url = eventData.url || this.getPageUrl();\n eventData.title = eventData.title || this.getPageTitle();\n eventData.domain = eventData.domain || this.getDomainName();\n eventData.uri = eventData.uri || this.getURI();\n eventData[SCROLL_DEPTH] = getScrollDepth();\n eventData.returning = isUndefined(eventData.returning)\n ? false\n : eventData.returning;\n\n if (!lastArg || !lastArg.lifecycle) lifecycle = LIFECYCLE_PAGE;\n\n if (this.config(KEY_SAVE_URL_HASH)) {\n hash = eventData.hash || this.getPageHash();\n if (hash !== '' && hash !== '#') {\n eventData.hash = hash;\n }\n }\n }\n\n const augmentAction = this.config(KEY_AUGMENT_ACTION);\n\n if (isFunction(augmentAction)) {\n augmentAction.call(this, eventName, eventData);\n }\n\n this._push({\n endpoint: ENDPOINT_TRACK,\n visitorData: this.visitorData,\n sessionData: this.sessionData,\n orgData: this.orgData,\n eventName,\n eventData,\n lifecycle,\n callback,\n beforeCallback,\n errorCallback,\n queue,\n useBeacon,\n retrack,\n timeout\n });\n\n this.startPing();\n\n return this;\n }\n\n update(idptnc, options, lastArg) {\n let callback;\n let beforeCallback;\n let errorCallback;\n let queue = false;\n let useBeacon = true;\n\n if (isFunction(lastArg)) callback = lastArg;\n else if (isObject(lastArg)) {\n if (isFunction(lastArg.callback)) callback = lastArg.callback;\n else if (isFunction(lastArg.onSuccess)) callback = lastArg.onSuccess;\n if (isFunction(lastArg.onBeforeSend))\n beforeCallback = lastArg.onBeforeSend;\n if (isFunction(lastArg.onError)) errorCallback = lastArg.onError;\n\n if (this.config(KEY_BEACONS)) {\n if (!isUndefined(lastArg.queue)) queue = Boolean(lastArg.queue);\n\n if (!isUndefined(lastArg.useBeacon)) {\n useBeacon = Boolean(lastArg.useBeacon);\n } else if (queue) useBeacon = true;\n } else {\n useBeacon = false;\n }\n }\n\n const eventData = {\n [IDPTNC]: idptnc,\n project: this.config(KEY_DOMAIN) || Woopra.getHostnameNoWww()\n };\n\n const rawData = {};\n\n for (const [original, alias] of ACTION_PROPERTY_ALIASES) {\n if (options && options[original]) {\n rawData[alias] = options[original];\n }\n }\n\n if (this.config(KEY_USE_COOKIES)) {\n rawData.cookie = this.getCookie() || this.cookie;\n }\n\n this._dataSetter(eventData, rawData);\n\n this._dataSetter(\n eventData,\n jsonStringifyObjectValues(\n prefixObjectKeys(\n options,\n ACTION_PROPERTY_PREFIX,\n ACTION_PROPERTY_ALIASES\n )\n )\n );\n\n this._push({\n endpoint: ENDPOINT_UPDATE,\n fullEventData: eventData,\n callback,\n beforeCallback,\n errorCallback,\n queue,\n useBeacon\n });\n\n return this;\n }\n\n cancelAction(idptnc) {\n let hasCancelled = false;\n\n if (this.lastAction?.id === idptnc) {\n this.lastAction = null;\n }\n\n this.pending = this.pending.map((item) => {\n if (item.params[IDPTNC] === idptnc) {\n hasCancelled = true;\n\n return {\n ...item,\n meta: {\n ...item.meta,\n [META_CANCELLED]: true,\n [META_DIRTY]: true,\n [META_DURATION]:\n item.lifecycle === LIFECYCLE_PAGE\n ? item.meta[META_DURATION] +\n (Date.now() - item.meta[META_TIMESTAMP])\n : item.meta[META_DURATION],\n [META_RETRACK]: false\n }\n };\n }\n\n return item;\n });\n\n if (hasCancelled) {\n this.sendBeacons();\n }\n }\n\n /**\n * Tracks a single form and then resubmits it\n */\n trackForm(eventName = 'Tracked Form', selector, options) {\n let els;\n const _options = isString(selector) ? options || {} : selector || {};\n\n const bindEl = (el, ev, props, opts) => {\n addEventListener(el, 'submit', (e) => {\n this.trackFormHandler(e, el, ev, _options);\n });\n };\n\n if (_options.elements) {\n els = _options.elements;\n } else {\n els = getElement(selector, _options);\n }\n\n // attach event if form was found\n if (els && els.length > 0) {\n for (let i in els) {\n bindEl(els[i], eventName, _options);\n }\n }\n }\n\n trackFormHandler(e, el, eventName, options = {}) {\n let trackFinished = false;\n\n if (!el.getAttribute(DATA_TRACKED_ATTRIBUTE)) {\n const useBeacon = Boolean(this.config(KEY_BEACONS));\n\n const properties = Woopra.serializeForm(el, options);\n\n if (isFunction(options.identify)) {\n const personData = options.identify(properties) || {};\n\n if (personData) {\n this.identify(personData);\n }\n }\n\n const onBeforeSend = isFunction(options.onBeforeSend)\n ? options.onBeforeSend\n : undefined;\n const onSuccess = isFunction(options.callback)\n ? () => options.callback(properties)\n : undefined;\n const onError = isFunction(options.onError) ? options.onError : undefined;\n\n if (!options.noSubmit) el.setAttribute(DATA_TRACKED_ATTRIBUTE, 1);\n\n if (options.noSubmit || useBeacon) {\n this.track(eventName, properties, {\n onBeforeSend,\n onError,\n onSuccess,\n useBeacon\n });\n } else {\n e.preventDefault();\n e.stopPropagation();\n\n // set timeout to resubmit (default 250ms)\n // so even if woopra does not reply it will still\n // submit the form\n const timer = setTimeout(() => {\n if (!trackFinished) {\n el.submit();\n }\n }, this.config(KEY_FORM_PAUSE));\n\n this.track(eventName, properties, {\n onBeforeSend,\n onSuccess() {\n clearTimeout(timer);\n\n if (onSuccess) onSuccess();\n\n if (!trackFinished) el.submit();\n\n trackFinished = true;\n },\n onError\n });\n }\n }\n }\n\n /**\n * Tracks clicks\n *\n * @param {String} eventName The name of the event to track\n * @param {String} selector The id of element to track\n * @param {Object} properties Any event properties to track with\n * @param {Object} options (Optional) Options object\n * @param {Array} options.elements Supports an array of elements (jQuery object)\n * @param {Boolean} options.noNav (Default: false) If true, will only perform the track event and let the click event bubble up\n */\n trackClick(eventName = 'Item Clicked', selector, properties, options = {}) {\n let els = [];\n\n const bindEl = (el, ev, props, opts) => {\n addEventListener(el, EVENT_CLICK, (e) => {\n this.trackClickHandler(e, el, ev, props, opts);\n });\n };\n\n /**\n * Support an array of elements\n */\n if (options.elements) {\n els = options.elements;\n } else {\n els = getElement(selector, options);\n }\n\n if (els) {\n for (let i = 0; i < els.length; i++) {\n bindEl(els[i], eventName, properties, options);\n }\n }\n }\n\n trackClickHandler(e, el, eventName, properties, options) {\n let trackFinished = false;\n\n if (!el.getAttribute(DATA_TRACKED_ATTRIBUTE)) {\n const useBeacon = Boolean(this.config(KEY_BEACONS));\n\n const onBeforeSend = isFunction(options.onBeforeSend)\n ? options.onBeforeSend\n : undefined;\n const onSuccess = isFunction(options.callback)\n ? () => options.callback(properties)\n : undefined;\n const onError = isFunction(options.onError) ? options.onError : undefined;\n\n if (!options.noNav) el.setAttribute(DATA_TRACKED_ATTRIBUTE, 1);\n\n if (options.noNav || useBeacon) {\n this.track(eventName, properties, {\n onBeforeSend,\n onError,\n onSuccess,\n useBeacon\n });\n } else {\n e.preventDefault();\n\n // set timeout to resubmit (default 250ms)\n // so even if woopra does not reply it will still\n // click the link\n const timer = setTimeout(() => {\n if (!trackFinished) {\n el.click();\n }\n }, this.config(KEY_CLICK_PAUSE));\n\n this.track(eventName, properties, {\n onBeforeSend,\n onSuccess() {\n clearTimeout(timer);\n\n if (onSuccess) onSuccess();\n\n if (!trackFinished) el.click();\n\n trackFinished = true;\n },\n onError\n });\n }\n }\n }\n\n startPing() {\n if (isUndefined(this.pingInterval)) {\n this.pingInterval = setInterval(() => {\n this.ping();\n }, this.config(KEY_PING_INTERVAL));\n }\n }\n\n stopPing() {\n if (!isUndefined(this.pingInterval)) {\n clearInterval(this.pingInterval);\n delete this.pingInterval;\n }\n }\n\n /**\n * Pings tracker with visitor info\n */\n ping() {\n if (this.config(KEY_PING) && this.idle < this.config(KEY_IDLE_TIMEOUT)) {\n // this._push({\n // endpoint: 'ping'\n // });\n } else {\n this.stopPing();\n }\n\n const now = Date.now();\n if (now - this.last_activity > this.config(KEY_IDLE_THRESHOLD)) {\n this.idle = now - this.last_activity;\n }\n\n return this;\n }\n\n /**\n * Pushes visitor data to server without sending an event\n */\n push(callback) {\n this._push({\n endpoint: ENDPOINT_IDENTIFY,\n visitorData: this.visitorData,\n sessionData: this.sessionData,\n orgData: this.orgData,\n callback\n });\n\n this.sendBeacons();\n\n return this;\n }\n\n _updateDurations(oldState, newState) {\n const now = Date.now();\n\n function updateDuration(item) {\n switch (newState) {\n case PAGE_LIFECYCLE_STATE_ACTIVE:\n case PAGE_LIFECYCLE_STATE_PASSIVE:\n if (now - item.meta[META_LEAVE] > item.params.timeout) {\n return {\n [META_EXPIRED]: true\n };\n }\n\n if (\n (newState === PAGE_LIFECYCLE_STATE_ACTIVE &&\n oldState === PAGE_LIFECYCLE_STATE_PASSIVE) ||\n (newState === PAGE_LIFECYCLE_STATE_PASSIVE &&\n oldState === PAGE_LIFECYCLE_STATE_ACTIVE)\n ) {\n return {};\n }\n\n return {\n [META_TIMESTAMP]: now\n };\n\n case PAGE_LIFECYCLE_STATE_HIDDEN:\n return {\n [META_DIRTY]:\n item.meta[META_DIRTY] || now - item.meta[META_TIMESTAMP] > 100,\n [META_DURATION]:\n item.meta[META_DURATION] + (now - item.meta[META_TIMESTAMP]),\n [META_LEAVE]: now\n };\n\n case PAGE_LIFECYCLE_STATE_TERMINATED:\n return {\n [META_DIRTY]:\n item.meta[META_DIRTY] || now - item.meta[META_LEAVE] > 100\n };\n\n default:\n return {};\n }\n }\n\n this.pending = this.pending.map((item) => {\n if (item.lifecycle !== LIFECYCLE_PAGE) return item;\n\n return {\n ...item,\n meta: {\n ...item.meta,\n ...updateDuration(item)\n }\n };\n });\n\n if (this.lastAction) {\n this.lastAction = {\n ...this.lastAction,\n meta: {\n ...this.lastAction.meta,\n ...updateDuration(this.lastAction)\n }\n };\n }\n }\n\n _processLifecycle(lifecycle) {\n const toRetrack = [];\n\n this.pending.forEach((item) => {\n if (\n item.meta[META_EXPIRED] &&\n !item.meta[META_CANCELLED] &&\n item.meta[META_RETRACK]\n ) {\n toRetrack.push({\n ...item.args,\n eventData: {\n ...(item.args.eventData || {}),\n [IDPTNC]: randomString(),\n returning: true\n }\n });\n }\n });\n\n toRetrack.forEach((item) => this._push(item));\n\n this.pending = this.pending.filter((item) => {\n if (item.meta[META_EXPIRED]) return false;\n\n if (item.meta[META_DIRTY]) {\n this.beaconQueue.push({\n lifecycle: item.lifecycle,\n endpoint: item.endpoint,\n params: {\n ...item.params\n },\n meta: {\n ...item.meta\n },\n successCallback: item.callback,\n errorCallback: item.errorCallback\n });\n }\n\n if (item.meta[META_CANCELLED]) return false;\n\n if (item.lifecycle === LIFECYCLE_PAGE && lifecycle !== LIFECYCLE_PAGE) {\n return true;\n }\n\n return false;\n });\n\n this.pending = this.pending.map((item) => ({\n ...item,\n meta: {\n ...item.meta,\n [META_DIRTY]: false,\n [META_SENT]: true\n }\n }));\n\n if (lifecycle === LIFECYCLE_PAGE && this.lastAction) {\n this.beaconQueue.push({\n lifecycle: LIFECYCLE_PAGE,\n endpoint: ENDPOINT_TRACK,\n params: {\n ...this.lastAction.params\n },\n meta: {\n ...this.lastAction.meta,\n [META_SENT]: true\n }\n });\n }\n\n return toRetrack.length > 0;\n }\n\n _drainBeaconQueue() {\n const useCookies = this.config(KEY_USE_COOKIES);\n\n function isEmptyBeaconParams(params) {\n const { [IDPTNC]: id, cookie, project, event, ...rest } = params;\n\n return Object.keys(rest).length > 0;\n }\n\n const idMap = this.beaconQueue.reduce((idMap, item) => {\n idMap[item.params[IDPTNC]] = [];\n\n return idMap;\n }, {});\n\n this.beaconQueue.forEach((item) => {\n idMap[item.params[IDPTNC]].push(item);\n });\n\n this.beaconQueue = [];\n\n const toSend = Object.keys(idMap)\n .map((id) => {\n const items = idMap[id];\n\n const data = {\n endpoint: undefined,\n params: {},\n onSuccess: [],\n onError: []\n };\n\n items.forEach((item) => {\n if (!data.endpoint) {\n if (item.endpoint === ENDPOINT_TRACK && item.meta[META_SENT]) {\n data.endpoint = ENDPOINT_UPDATE;\n } else {\n data.endpoint = item.endpoint;\n }\n }\n\n data.params.project = item.params.project;\n data.params.event = item.params.event;\n data.params[IDPTNC] = item.params[IDPTNC];\n\n if (useCookies) {\n data.params.cookie = this.getCookie() || this.cookie;\n }\n\n if (\n (item.lifecycle === LIFECYCLE_PAGE ||\n item.params[IDPTNC] === this.lastAction?.id) &&\n item.meta[META_DURATION] > 0\n ) {\n data.params.duration = item.meta[META_DURATION];\n }\n\n if (item.meta[SCROLL_DEPTH]) {\n data.params[`${ACTION_PROPERTY_PREFIX}${SCROLL_DEPTH}`] =\n Math.round(item.meta[SCROLL_DEPTH] * 10_000) / 10_000;\n }\n\n if (!item.meta[META_SENT]) {\n data.params = { ...data.params, ...item.params };\n\n if (isFunction(item.successCallback)) {\n data.onSuccess.push(item.successCallback);\n }\n\n if (isFunction(item.errorCallback)) {\n data.onError.push(item.errorCallback);\n }\n }\n });\n\n if (!data.params.project) {\n data.params.project =\n this.config(KEY_DOMAIN) || Woopra.getHostnameNoWww();\n }\n\n return data;\n })\n .filter((item) => isEmptyBeaconParams(item.params));\n\n const sendBeacon =\n navigator.sendBeacon && navigator.sendBeacon.bind(navigator);\n const useBeacon =\n Boolean(this.config(KEY_BEACONS)) && isFunction(sendBeacon);\n\n // TODO: fallback to sending via loadScript if sendBeacon fails\n // this probably requires a more stream-like approach to processing the queue\n if (toSend.length > 0) {\n if (useBeacon) {\n const payloads = [''];\n\n const lines = toSend.map(({ endpoint, params }) =>\n JSON.stringify({ endpoint, params })\n );\n\n // chunk beacons into < 64 KiB chunks\n lines.forEach((line) => {\n if (\n new Blob([`${payloads[payloads.length - 1]}${line}`]).size >= 65_000\n ) {\n payloads.push('');\n }\n payloads[payloads.length - 1] += `${line}\\n`;\n });\n\n payloads.forEach((payload, index) => {\n const formData = new FormData();\n\n formData.append('payload', payload.slice(0, -1));\n\n try {\n sendBeacon(this.getEndpoint('push'), formData);\n } catch (e) {\n console.error('Woopra: sendBeacon failed:', e);\n }\n });\n\n toSend.forEach((item) => {\n item.onSuccess.forEach((callback) =>\n callCallback(callback, item.params.event)\n );\n });\n } else {\n toSend.forEach((item) => {\n const endpoint = this.getEndpoint(item.endpoint);\n\n const queryString = Woopra.buildUrlParams({\n close: true,\n ...item.params\n });\n const scriptUrl = `${endpoint}?${queryString}`;\n\n const onSuccess = () =>\n item.onSuccess.forEach((callback) =>\n callCallback(callback, item.params.event)\n );\n const onError = () =>\n item.onError.forEach((callback) =>\n callCallback(callback, item.params.event)\n );\n\n Woopra.loadScript(scriptUrl, onSuccess, onError);\n });\n }\n }\n }\n\n sendBeacons(lifecycle = LIFECYCLE_ACTION) {\n this._processLifecycle(lifecycle);\n this._drainBeaconQueue();\n }\n\n /**\n * synchronous sleep\n */\n sleep() {\n // Why does this exist?\n }\n\n _touch(last_activity = Date.now()) {\n this.last_activity = last_activity;\n this.idle = 0;\n }\n\n // User Action tracking and event handlers\n\n /**\n * Clicks\n */\n\n /**\n * Measure when the user last moved their mouse to update idle state\n */\n moved(e, last_activity) {\n this._touch(last_activity);\n }\n\n onClick(e) {\n if (!this.config(KEY_CLICK_TRACKING)) return;\n\n const useBeacon = Boolean(this.config(KEY_BEACONS));\n\n const { target } = e;\n\n const clickTarget = findParentElement(\n target,\n this.config(KEY_CLICK_TRACKING_MATCHER_SELECTORS)\n );\n\n if (clickTarget) {\n const tagName = clickTarget.tagName.toLowerCase();\n\n // get attributes starting with data-woopra-\n const customProperties = clickTarget\n .getAttributeNames()\n .reduce((result, name) => {\n if (Woopra.startsWith(name, 'data-woopra-')) {\n result[name.slice(12)] = clickTarget.getAttribute(name);\n }\n\n return result;\n }, {});\n\n const eventName =\n clickTarget.getAttribute('data-woopra') || 'button click';\n\n const properties = {\n 'page url': this.getPageUrl(),\n 'page title': this.getPageTitle(),\n text:\n clickTarget.innerText || clickTarget.value || clickTarget.textContent,\n title: clickTarget.textContent,\n type: tagName === 'a' ? 'link' : clickTarget.type,\n tagname: tagName,\n classname: clickTarget.className,\n 'dom path': getDOMPath(clickTarget),\n url: clickTarget.href,\n 'pointer type': e.pointerType,\n ...customProperties\n };\n\n if (this.config(KEY_SAVE_URL_HASH)) {\n const hash = this.getPageHash();\n\n if (hash !== '' && hash !== '#') {\n properties['page hash'] = hash;\n }\n }\n\n this.track(eventName, properties, {\n useBeacon\n });\n }\n }\n\n onLink(e, link) {\n const useBeacon = Boolean(this.config(KEY_BEACONS));\n const downloadTypes = this.config(KEY_DOWNLOAD_EXTENSIONS);\n\n const downloadFileTypeRegexp = new RegExp(\n `(?:${downloadTypes.join('|')})($|\\&)`,\n 'i'\n );\n\n const isDownloadFileType = downloadFileTypeRegexp.test(link.pathname);\n\n if (this.config(KEY_DOWNLOAD_TRACKING) && isDownloadFileType) {\n fire(EVENT_DOWNLOAD, link.href);\n\n if (link.target !== TARGET_BLANK && Woopra.leftClick(e)) {\n link.setAttribute(DATA_TRACKED_ATTRIBUTE, 1);\n\n if (!useBeacon) {\n e.preventDefault();\n e.stopPropagation();\n\n setTimeout(() => {\n link.click();\n }, this.config(KEY_DOWNLOAD_PAUSE));\n }\n }\n }\n\n // Make sure\n // * outgoing tracking is enabled\n // * this URL does not match a download URL (doesn't end\n // in a binary file extension)\n // * not ignoring subdomains OR link hostname is not a partial\n // match of current hostname (to check for subdomains),\n // * hostname is not empty\n if (\n this.config(KEY_OUTGOING_TRACKING) &&\n !isDownloadFileType &&\n Woopra.isOutgoingLink(link.hostname)\n ) {\n fire(EVENT_OUTGOING, link.href);\n\n if (link.target !== TARGET_BLANK && Woopra.leftClick(e)) {\n link.setAttribute(DATA_TRACKED_ATTRIBUTE, 1);\n\n if (!useBeacon) {\n e.preventDefault();\n e.stopPropagation();\n\n setTimeout(() => {\n link.click();\n }, this.config(KEY_OUTGOING_PAUSE));\n }\n }\n }\n }\n\n downloaded(url) {\n const useBeacon = Boolean(this.config(KEY_BEACONS));\n\n this.track(\n EVENT_DOWNLOAD,\n {\n url\n },\n { useBeacon }\n );\n }\n\n outgoing(url) {\n const useBeacon = Boolean(this.config(KEY_BEACONS));\n\n this.track(\n EVENT_OUTGOING,\n {\n url\n },\n { useBeacon }\n );\n }\n\n onUnload() {\n if (!this.isUnloading) {\n this.isUnloading = true;\n this._updateDurations(\n PAGE_LIFECYCLE_STATE_HIDDEN,\n PAGE_LIFECYCLE_STATE_TERMINATED\n );\n this.sendBeacons(LIFECYCLE_PAGE);\n }\n }\n\n onPageStateChange(e) {\n const { newState, oldState } = e;\n\n switch (newState) {\n case PAGE_LIFECYCLE_STATE_ACTIVE:\n this._updateDurations(oldState, newState);\n this.sendBeacons();\n this._touch();\n break;\n\n case PAGE_LIFECYCLE_STATE_PASSIVE:\n this._updateDurations(oldState, newState);\n this.sendBeacons();\n break;\n\n case PAGE_LIFECYCLE_STATE_HIDDEN:\n this._updateDurations(oldState, newState);\n this.sendBeacons();\n break;\n\n case PAGE_LIFECYCLE_STATE_TERMINATED:\n this.onUnload();\n break;\n }\n }\n\n onScroll(e) {\n this._touch();\n\n const scrollDepth = getScrollDepth();\n\n const pages = this.pending.filter(\n (item) => item.lifecycle === LIFECYCLE_PAGE\n );\n\n pages.forEach((pv) => {\n pv.meta[SCROLL_DEPTH] = Math.min(\n 1,\n Math.max(scrollDepth, pv.meta[SCROLL_DEPTH] || 0)\n );\n });\n }\n\n /**\n * Event handler for decorating an element with a URL (for now only\n * anchor tags)\n */\n autoDecorate(elem) {\n const xdm = this.config(KEY_CROSS_DOMAIN);\n\n if (!xdm) return;\n\n const domains = isString(xdm) ? [xdm] : isArray(xdm) ? xdm : [];\n\n let canDecorate;\n\n for (let i = 0; i < domains.length; i++) {\n if (\n elem.hostname.indexOf(domains[i]) !== -1 &&\n elem.hostname !== Woopra.location('hostname')\n ) {\n canDecorate = true;\n break;\n }\n }\n\n if (canDecorate) {\n const decorated = this.decorate(elem);\n\n if (decorated) {\n elem.href = decorated;\n // bind an event handler on mouseup to remove the url\n }\n }\n }\n\n /**\n * Resets cookie\n */\n reset() {\n Woopra.docCookies.removeItem(\n this.config(KEY_COOKIE_NAME),\n this.config(KEY_COOKIE_PATH),\n this.config(KEY_COOKIE_DOMAIN)\n );\n this.cookie = null;\n this._setupCookie();\n }\n\n /**\n * Decorates a given URL with a __woopraid query param with value of\n * the current cookie\n */\n decorate(url) {\n let el;\n let query;\n let pathname;\n let host;\n\n if (isString(url)) {\n el = document.createElement('a');\n el.href = url;\n query = el.search ? '&' : '?';\n } else if (url && url.href) {\n el = url;\n }\n\n if (el) {\n query = el.search ? '&' : '?';\n pathname =\n el.pathname && el.pathname.charAt(0) === '/'\n ? el.pathname\n : `/${el.pathname}`;\n\n host =\n el.hostname +\n (el.port && el.port !== '' && el.port !== '80' && el.port !== '0'\n ? `:${el.port}`\n : '');\n\n return `${el.protocol}//${host}${pathname}${el.search}${query}${XDM_PARAM_NAME}=${this.cookie}${el.hash}`;\n }\n }\n\n /**\n * Undecorates a URL with __woopraid query param\n */\n undecorate(url) {\n const regex = new RegExp(`[?&]+(?:${XDM_PARAM_NAME})=([^&#]*)`, 'gi');\n let _url = url;\n\n if (url && url.href) {\n _url = url.href;\n }\n\n if (_url) {\n return _url.replace(regex, '');\n }\n }\n\n getPageUrl() {\n if (this.config(KEY_IGNORE_QUERY_URL)) {\n return Woopra.location('pathname');\n }\n return `${Woopra.location('pathname')}${Woopra.location('search')}`;\n }\n\n getPageHash() {\n return Woopra.location('hash');\n }\n\n getPageTitle() {\n return document.getElementsByTagName('title').length === 0\n ? ''\n : document.getElementsByTagName('title')[0].innerHTML;\n }\n\n getDomainName() {\n return Woopra.location('hostname');\n }\n\n getURI() {\n return Woopra.location('href');\n }\n\n /**\n * Retrieves a Woopra unique id from a URL's query param (__woopraid)\n *\n * @param {String} href The full URL to extract from\n */\n getUrlId(href = Woopra.location('href')) {\n const matches = href.match(URL_ID_REGEX);\n\n if (matches && matches[1]) {\n return matches[1];\n }\n }\n\n getOptionParams() {\n // default params\n const o = {\n project: this.config(KEY_DOMAIN) || Woopra.getHostnameNoWww(),\n instance: this.instanceName,\n meta: Woopra.docCookies.getItem('wooMeta') || '',\n screen: `${window.screen.width}x${window.screen.height}`,\n language:\n window.navigator.browserLanguage || window.navigator.language || '',\n app: this.config(KEY_APP),\n referer: document.referrer\n };\n\n if (!this.config(KEY_DOMAIN)) {\n o._warn = 'no_domain';\n\n if (Woopra.getHostnameNoWww() !== Woopra.getDomain()) {\n o._warn += ',domain_mismatch';\n }\n }\n\n // set cookie if configured\n if (this.config(KEY_USE_COOKIES)) {\n o.cookie = this.getCookie() || this.cookie;\n }\n\n // set ip if configured\n if (this.config(KEY_IP)) {\n o.ip = this.config(KEY_IP);\n }\n\n return o;\n }\n\n /**\n * Stop ping timers and cleanup any globals. Shouldn't really\n * be needed by clients.\n */\n dispose() {\n this.stopPing();\n\n for (let id in this.__l) {\n if (this.__l.hasOwnProperty(id)) {\n removeHandler(id, this.instanceName);\n }\n }\n this.__l = null;\n\n // cleanup global\n if (!isUndefined(window[this.instanceName])) {\n try {\n delete window[this.instanceName];\n } catch (e) {\n window[this.instanceName] = undefined;\n }\n }\n }\n}\n","import { isFunction, isUndefined } from 'lodash-es';\nimport attachGlobalEvents from './lib/global-events';\nimport Tracker from './tracker';\nimport Woopra from './woopra';\n\nif (!window.WoopraTracker) attachGlobalEvents();\n\nwindow.WoopraTracker = Tracker;\nwindow.WoopraLoadScript = Woopra.loadScript;\n\nif (!isUndefined(window.exports)) {\n Woopra.Tracker = Tracker;\n window.exports.Woopra = Woopra;\n\n if (isFunction(window.woopraLoaded)) {\n window.woopraLoaded();\n window.woopraLoaded = null;\n }\n}\n\n// Initialize instances & preloaded settings/events\nvar _queue = window.__woo || window._w;\nif (!isUndefined(_queue)) {\n for (var name in _queue) {\n if (_queue.hasOwnProperty(name)) {\n var instance = new Tracker(name);\n instance.init();\n\n // DO NOT REMOVE\n // compatibility with old tracker and chat\n if (isUndefined(window.woopraTracker)) {\n window.woopraTracker = instance;\n }\n }\n }\n}\n"],"names":["isUndefined","value","undefined","global","Object","freeSelf","self","freeGlobal","Function","root","Symbol","objectProto","prototype","hasOwnProperty","nativeObjectToString","toString","symToStringTag","toStringTag","baseGetTag","isOwn","call","tag","unmasked","e","result","getRawTag","objectToString","isObject","type","isFunction","Date","now","reWhitespace","reTrimStart","baseTrim","string","slice","index","length","test","charAt","trimmedEndIndex","replace","isObjectLike","isSymbol","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","parseInt","toNumber","other","valueOf","isBinary","nativeMax","Math","max","nativeMin","min","debounce","func","wait","options","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","TypeError","invokeFunc","time","args","thisArg","apply","leadingEdge","setTimeout","timerExpired","shouldInvoke","timeSinceLastCall","trailingEdge","timeWaiting","remainingWait","debounced","isInvoking","arguments","this","clearTimeout","cancel","flush","ENDPOINTS","XDM_PARAM_NAME","CAMPAIGN_KEYS","SECOND_LEVEL_TLDS","RANDOM_STRING_CHARS","URL_ID_REGEX","RegExp","LIFECYCLE_ACTION","LIFECYCLE_PAGE","SCROLL_DEPTH","ACTION_PV","IDPTNC","TARGET_BLANK","DATA_TRACKED_ATTRIBUTE","ACTION_PROPERTY_PREFIX","ORG_PROPERTY_PREFIX","ENDPOINT_TRACK","ENDPOINT_UPDATE","PAGE_LIFECYCLE_STATE_ACTIVE","PAGE_LIFECYCLE_STATE_PASSIVE","PAGE_LIFECYCLE_STATE_HIDDEN","PAGE_LIFECYCLE_STATE_FROZEN","PAGE_LIFECYCLE_STATE_TERMINATED","EVENT_BEFOREUNLOAD","EVENT_BLUR","EVENT_CLICK","EVENT_DOWNLOAD","EVENT_FOCUS","EVENT_FREEZE","EVENT_LINK_CLICK","EVENT_MOUSEMOVE","EVENT_OUTGOING","EVENT_PAGEHIDE","EVENT_PAGESHOW","EVENT_RESUME","EVENT_SCROLL","EVENT_STATECHANGE","EVENT_UNLOAD","EVENT_VISIBILITYCHANGE","KEY_APP","KEY_APPIER_APP_ID","KEY_AUGMENT_ACTION","KEY_AUTO_DECORATE","KEY_BEACONS","KEY_CAMPAIGN_ONCE","KEY_CLICK_TRACKING_MATCHER_SELECTORS","KEY_CLICK_PAUSE","KEY_CONTEXT","KEY_COOKIE_DOMAIN","KEY_COOKIE_EXPIRE","KEY_COOKIE_NAME","KEY_COOKIE_PATH","KEY_COOKIE_SECURE","KEY_CROSS_DOMAIN","KEY_DOMAIN","KEY_DOWNLOAD_EXTENSIONS","KEY_DOWNLOAD_PAUSE","KEY_DOWNLOAD_TRACKING","KEY_FORM_PAUSE","KEY_HIDE_CAMPAIGN","KEY_HIDE_XDM_DATA","KEY_IDLE_THRESHOLD","KEY_IDLE_TIMEOUT","KEY_IGNORE_QUERY_URL","KEY_MAP_QUERY_PARAMS","KEY_OUTGOING_PAUSE","KEY_OUTGOING_TRACKING","KEY_PERSONALIZATION","KEY_PING","KEY_PING_INTERVAL","KEY_PROTOCOL","KEY_REGION","KEY_SAVE_URL_HASH","KEY_THIRD_PARTY","KEY_USE_COOKIES","ACTION_PROPERTY_ALIASES","DEFAULT_DOWNLOAD_EXTENSIONS","ELEMENT_MATCHER_LINK","ELEMENT_MATCHER_CLICK","handlers","removeHandler","id","instance","addEventListener","element","callback","on","parent","event","instanceName","__l","push","fire","handler","_l","_event","i","Array","EventTargetShim","_registry","listener","opts","_getRegistry","removeEventListener","typeRegistry","handlerIndex","indexOf","splice","dispatchEvent","evt","target","freeze","forEach","StateChangeEvent","initDict","newState","oldState","originalEvent","IS_SAFARI","safari","pushNotification","SUPPORTS_PAGE_TRANSITION_EVENTS","EVENTS","onbeforeunload","preventDefault","returnValue","LEGAL_STATE_TRANSITIONS","map","arr","reduce","acc","val","idx","getCurrentState","document","visibilityState","hasFocus","state","_state","_unsavedChanges","_handleEvents","_this","bind","_safariBeforeUnloadTimeout","defaultPrevented","_dispatchChangesIfNeeded","addUnsavedChanges","removeUnsavedChanges","idIndex","path","order","oldIndex","newIndex","keys","getLegalStateTransitionPath","persisted","wasDiscarded","isArray","isString","transform","getPrototypeOf","arg","funcProto","funcToString","objectCtorString","isPlainObject","proto","getPrototype","Ctor","constructor","nativeIsFinite","isFinite","randomString","s","rnum","floor","random","substring","isLeftClick","window","_isUndefined","which","button","metaKey","altKey","ctrlKey","shiftKey","getElement","selector","_options","_isString","el","querySelectorAll","getElementById","substr","getElementsByClassName","prefixObjectKeys","object","prefix","blacklist","obj","key","isBlacklisted","jsonStringifyObjectValues","_isPlainObject","_isArray","JSON","stringify","getScrollDepth","scrollHeight","body","scrollDepth","scrollY","innerHeight","callCallback","action","console","error","stack","matchesElement","matcher","some","sel","matches","findParentElement","elem","tagName","parentNode","getDOMPath","count","childNodes","siblingElement","nodeName","toLowerCase","hasAttribute","unshift","join","onClick","srcElement","globals","getAttribute","onMouseDown","onMouseMove","onScroll","_throttle","onPageStateChange","noop","WoopraAction","woopra","params","meta","update","lastArg","$action","cancelAction","baseClamp","number","lower","upper","symbolProto","symbolToString","baseToString","array","iteratee","arrayMap","INFINITY","toInteger","toFinite","remainder","hasItem","sKey","encodeURIComponent","cookie","decodeURIComponent","sValue","vEnd","sPath","sDomain","bSecure","sExpires","Number","Infinity","String","toUTCString","aKeys","split","nLen","nIdx","TYPE_BUTTON","TYPE_SUBMIT","TYPE_RESET","removeScript","script","removeChild","Woopra","getHostname","location","docCookies","property","historyReplaceState","history","replaceState","data","title","url","hideUrlParams","regex","href","getUrlParams","vars","m","buildUrlParams","p","getCustomData","method","getDomain","hostname","domain","lastIndexOf","getHostnameNoWww","isOutgoingLink","targetHostname","currentHostname","currentDomain","startsWith","hideCrossDomainId","mapQueryParams","mapping","redirect","link","getCampaignData","campaign","hideCampaignData","leftClick","loadScript","errorCallback","createElement","async","onreadystatechange","onload","onerror","readyState","src","appendChild","head","serializeForm","form","exclude","elements","name","checked","j","selected","_on","_fire","attachEvent","position","endsWith","end","Tracker","visitorData","sessionData","orgData","_isFunction","navigator","sendBeacon","setDate","getDate","idle","last_activity","loaded","dirtyCookie","sentCampaign","version","pending","beaconQueue","lastAction","init","_processQueue","_setupCookie","_bindEvents","config","_wpt","__woo","_w","_e","events","url_id","getUrlId","getCookie","setItem","_this2","downloaded","onLink","l","moved","outgoing","autoDecorate","_dataSetter","dataStore","_isObject","getVisitorUrlData","identify","getItem","getProtocol","protocol","getEndpoint","Error","thirdPartyPath","region","endpoint","visit","orgKey","orgValue","visitorProperties","identifyOrg","funcName","_push","types","lifecycle","getOptionParams","eventName","close","timeout","rawData","original","alias","eventData","newData","org","contextData","fullEventData","dirty","Boolean","useBeacon","isUnloading","retrack","beforeCallback","item","_this3","queue","sendBeacons","scriptUrl","track","hash","onSuccess","onBeforeSend","onError","getPageUrl","getPageTitle","getDomainName","uri","getURI","returning","getPageHash","augmentAction","startPing","idptnc","project","hasCancelled","trackForm","els","bindEl","ev","props","_this4","trackFormHandler","trackFinished","properties","personData","noSubmit","setAttribute","stopPropagation","timer","submit","trackClick","_this5","trackClickHandler","noNav","click","pingInterval","setInterval","_this6","ping","stopPing","clearInterval","_updateDurations","updateDuration","_processLifecycle","toRetrack","_this7","filter","successCallback","_drainBeaconQueue","useCookies","isEmptyBeaconParams","rest","idMap","toSend","items","_this8","_this8$lastAction","duration","round","payloads","line","Blob","size","payload","formData","FormData","append","sleep","_touch","clickTarget","customProperties","getAttributeNames","text","innerText","textContent","tagname","classname","className","pointerType","downloadTypes","isDownloadFileType","pathname","onUnload","pv","xdm","canDecorate","domains","decorated","decorate","reset","removeItem","query","host","search","port","undecorate","_url","getElementsByTagName","innerHTML","match","o","screen","width","height","language","browserLanguage","app","referer","referrer","_warn","ip","dispose","WoopraTracker","PageLifecycle","WoopraLoadScript","exports","woopraLoaded","_queue","woopraTracker"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"w.js","sources":["../node_modules/lodash-es/isUndefined.js","../node_modules/lodash-es/_freeGlobal.js","../node_modules/lodash-es/_root.js","../node_modules/lodash-es/_Symbol.js","../node_modules/lodash-es/_getRawTag.js","../node_modules/lodash-es/_objectToString.js","../node_modules/lodash-es/_baseGetTag.js","../node_modules/lodash-es/isObject.js","../node_modules/lodash-es/isFunction.js","../node_modules/lodash-es/now.js","../node_modules/lodash-es/_trimmedEndIndex.js","../node_modules/lodash-es/_baseTrim.js","../node_modules/lodash-es/isObjectLike.js","../node_modules/lodash-es/isSymbol.js","../node_modules/lodash-es/toNumber.js","../node_modules/lodash-es/debounce.js","../node_modules/lodash-es/throttle.js","../src/constants.js","../src/globals.js","../src/lib/events.js","../src/lib/page-lifecycle.js","../node_modules/lodash-es/isArray.js","../node_modules/lodash-es/isString.js","../node_modules/lodash-es/_getPrototype.js","../node_modules/lodash-es/_overArg.js","../node_modules/lodash-es/isPlainObject.js","../node_modules/lodash-es/isFinite.js","../src/lib/utils.js","../src/lib/global-events.js","../node_modules/lodash-es/noop.js","../src/action.js","../node_modules/lodash-es/_baseClamp.js","../node_modules/lodash-es/_baseToString.js","../node_modules/lodash-es/_arrayMap.js","../node_modules/lodash-es/toFinite.js","../node_modules/lodash-es/toInteger.js","../node_modules/lodash-es/toString.js","../src/lib/cookies.js","../src/lib/form.js","../src/lib/script.js","../src/woopra.js","../node_modules/lodash-es/startsWith.js","../node_modules/lodash-es/endsWith.js","../src/tracker.js","../src/index.js"],"sourcesContent":["/**\n * Checks if `value` is `undefined`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n * @example\n *\n * _.isUndefined(void 0);\n * // => true\n *\n * _.isUndefined(null);\n * // => false\n */\nfunction isUndefined(value) {\n return value === undefined;\n}\n\nexport default isUndefined;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nexport default freeGlobal;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nexport default root;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nexport default Symbol;\n","import Symbol from './_Symbol.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nexport default getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nexport default objectToString;\n","import Symbol from './_Symbol.js';\nimport getRawTag from './_getRawTag.js';\nimport objectToString from './_objectToString.js';\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nexport default baseGetTag;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nexport default isObject;\n","import baseGetTag from './_baseGetTag.js';\nimport isObject from './isObject.js';\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nexport default isFunction;\n","import root from './_root.js';\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nexport default now;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\nexport default trimmedEndIndex;\n","import trimmedEndIndex from './_trimmedEndIndex.js';\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nexport default baseTrim;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nexport default isObjectLike;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nexport default isSymbol;\n","import baseTrim from './_baseTrim.js';\nimport isObject from './isObject.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nexport default toNumber;\n","import isObject from './isObject.js';\nimport now from './now.js';\nimport toNumber from './toNumber.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nexport default debounce;\n","import debounce from './debounce.js';\nimport isObject from './isObject.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\nfunction throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n}\n\nexport default throttle;\n","export const VERSION = 11;\nexport const REGION_EU = 'eu';\nexport const REGION_KR = 'kr';\nexport const REGION_US = 'us';\nexport const ENDPOINTS = {\n [REGION_EU]: 'www.woopra.com/track/',\n [REGION_KR]: 'kr.track.airis.appier.net/track/',\n [REGION_US]: 'us.track.airis.appier.net/track/'\n};\nexport const XDM_PARAM_NAME = '__woopraid';\nexport const CAMPAIGN_KEYS = [\n 'campaign',\n 'content',\n 'id',\n 'medium',\n 'source',\n 'term'\n];\nexport const SECOND_LEVEL_TLDS = [\n 'com.au',\n 'net.au',\n 'org.au',\n 'co.hu',\n 'com.ru',\n 'ac.za',\n 'net.za',\n 'com.za',\n 'co.za',\n 'co.uk',\n 'org.uk',\n 'me.uk',\n 'net.uk'\n];\nexport const RANDOM_STRING_CHARS =\n '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';\nexport const MIN_PING_INTERVAL = 6_000;\nexport const MAX_PING_INTERVAL = 60_000;\nexport const URL_ID_REGEX = new RegExp(XDM_PARAM_NAME + '=([^&#]+)');\n\nexport const LIFECYCLE_ACTION = 'action';\nexport const LIFECYCLE_PAGE = 'page';\n\nexport const SCROLL_DEPTH = 'scroll depth';\n\nexport const ACTION_PV = 'pv';\n\nexport const IDPTNC = 'idptnc';\n\nexport const TARGET_BLANK = '_blank';\n\nexport const DATA_TRACKED_ATTRIBUTE = 'data-tracked';\n\nexport const ACTION_PROPERTY_PREFIX = 'ce_';\nexport const VISIT_PROPERTY_PREFIX = 'cs_';\nexport const VISITOR_PROPERTY_PREFIX = 'cv_';\nexport const ORG_PROPERTY_PREFIX = 'co_';\n\nexport const ENDPOINT_TRACK = 'ce';\nexport const ENDPOINT_UPDATE = 'update';\nexport const ENDPOINT_IDENTIFY = 'identify';\n\nexport const PAGE_LIFECYCLE_STATE_ACTIVE = 'active';\nexport const PAGE_LIFECYCLE_STATE_PASSIVE = 'passive';\nexport const PAGE_LIFECYCLE_STATE_HIDDEN = 'hidden';\nexport const PAGE_LIFECYCLE_STATE_FROZEN = 'frozen';\nexport const PAGE_LIFECYCLE_STATE_TERMINATED = 'terminated';\n\nexport const EVENT_BEFOREUNLOAD = 'beforeunload';\nexport const EVENT_BLUR = 'blur';\nexport const EVENT_CLICK = 'click';\nexport const EVENT_DOWNLOAD = 'download';\nexport const EVENT_FOCUS = 'focus';\nexport const EVENT_FREEZE = 'freeze';\nexport const EVENT_LINK_CLICK = 'link';\nexport const EVENT_MOUSEDOWN = 'mousedown';\nexport const EVENT_MOUSEMOVE = 'mousemove';\nexport const EVENT_OUTGOING = 'outgoing';\nexport const EVENT_PAGEHIDE = 'pagehide';\nexport const EVENT_PAGESHOW = 'pageshow';\nexport const EVENT_RESUME = 'resume';\nexport const EVENT_SCROLL = 'scroll';\nexport const EVENT_STATECHANGE = 'statechange';\nexport const EVENT_UNLOAD = 'unload';\nexport const EVENT_VISIBILITYCHANGE = 'visibilitychange';\n\nexport const KEY_APP = 'app';\nexport const KEY_APPIER_APP_ID = 'appier_app_id';\nexport const KEY_AUGMENT_ACTION = 'augment_action';\nexport const KEY_AUTO_DECORATE = 'auto_decorate';\nexport const KEY_BEACONS = 'beacons';\nexport const KEY_CAMPAIGN_ONCE = 'campaign_once';\nexport const KEY_CLICK_TRACKING_MATCHER_SELECTORS =\n 'click_tracking_matcher_selectors';\nexport const KEY_CLICK_PAUSE = 'click_pause';\nexport const KEY_CLICK_TRACKING = 'click_tracking';\nexport const KEY_CONTEXT = 'context';\nexport const KEY_COOKIE_DOMAIN = 'cookie_domain';\nexport const KEY_COOKIE_EXPIRE = 'cookie_expire';\nexport const KEY_COOKIE_NAME = 'cookie_name';\nexport const KEY_COOKIE_PATH = 'cookie_path';\nexport const KEY_COOKIE_SECURE = 'cookie_secure';\nexport const KEY_CROSS_DOMAIN = 'cross_domain';\nexport const KEY_DOMAIN = 'domain';\nexport const KEY_DOWNLOAD_EXTENSIONS = 'download_extensions';\nexport const KEY_DOWNLOAD_PAUSE = 'download_pause';\nexport const KEY_DOWNLOAD_TRACKING = 'download_tracking';\nexport const KEY_FORM_PAUSE = 'form_pause';\nexport const KEY_HIDE_CAMPAIGN = 'hide_campaign';\nexport const KEY_HIDE_XDM_DATA = 'hide_xdm_data';\nexport const KEY_IDLE_THRESHOLD = 'idle_threshold';\nexport const KEY_IDLE_TIMEOUT = 'idle_timeout';\nexport const KEY_IGNORE_QUERY_URL = 'ignore_query_url';\nexport const KEY_IP = 'ip';\nexport const KEY_MAP_QUERY_PARAMS = 'map_query_params';\nexport const KEY_OUTGOING_IGNORE_SUBDOMAIN = 'outgoing_ignore_subdomain';\nexport const KEY_OUTGOING_PAUSE = 'outgoing_pause';\nexport const KEY_OUTGOING_TRACKING = 'outgoing_tracking';\nexport const KEY_PERSONALIZATION = 'personalization';\nexport const KEY_PING = 'ping';\nexport const KEY_PING_INTERVAL = 'ping_interval';\nexport const KEY_PROTOCOL = 'protocol';\nexport const KEY_REGION = 'region';\nexport const KEY_SAVE_URL_HASH = 'save_url_hash';\nexport const KEY_THIRD_PARTY = 'third_party';\nexport const KEY_USE_COOKIES = 'use_cookies';\n\nexport const META_CANCELLED = 'cancelled';\nexport const META_DIRTY = 'dirty';\nexport const META_DURATION = 'duration';\nexport const META_EXPIRED = 'expired';\nexport const META_LEAVE = 'leave';\nexport const META_RETRACK = 'retrack';\nexport const META_SENT = 'sent';\nexport const META_TIMESTAMP = 'timestamp';\n\nexport const ACTION_PROPERTY_ALIASES = [\n [IDPTNC, IDPTNC],\n ['$duration', 'duration'],\n ['$domain', KEY_DOMAIN],\n ['$app', KEY_APP],\n ['$timestamp', 'timestamp'],\n ['$action', 'event'],\n [KEY_APPIER_APP_ID, KEY_APPIER_APP_ID]\n];\n\nexport const DEFAULT_DOWNLOAD_EXTENSIONS = [\n 'avi',\n 'css',\n 'dmg',\n 'doc',\n 'eps',\n 'exe',\n 'js',\n 'm4v',\n 'mov',\n 'mp3',\n 'mp4',\n 'msi',\n 'pdf',\n 'ppt',\n 'rar',\n 'svg',\n 'txt',\n 'vsd',\n 'vxd',\n 'wma',\n 'wmv',\n 'xls',\n 'xlsx',\n 'zip'\n];\n\nexport const ELEMENT_MATCHER_LINK = ['a'];\n\nexport const ELEMENT_MATCHER_CLICK = [\n 'a',\n 'button',\n 'input[type=button]',\n 'input[type=submit]',\n '[role=button]'\n];\n","import {\n KEY_AUTO_DECORATE,\n KEY_DOWNLOAD_TRACKING,\n KEY_OUTGOING_IGNORE_SUBDOMAIN,\n KEY_OUTGOING_TRACKING\n} from './constants';\n\nexport default {\n [KEY_AUTO_DECORATE]: undefined,\n [KEY_DOWNLOAD_TRACKING]: false,\n [KEY_OUTGOING_IGNORE_SUBDOMAIN]: true,\n [KEY_OUTGOING_TRACKING]: false\n};\n","const handlers = {};\n\nexport function removeHandler(id, instance) {\n handlers[id][instance] = null;\n}\n\nexport function addEventListener(element, type, callback) {\n if (element?.addEventListener) {\n element.addEventListener(type, callback);\n }\n}\n\nexport function on(parent, event, callback) {\n const id = parent.instanceName;\n\n if (!handlers[event]) {\n handlers[event] = {};\n }\n handlers[event][id] = parent;\n\n if (parent.__l) {\n if (!parent.__l[event]) {\n parent.__l[event] = [];\n }\n parent.__l[event].push(callback);\n }\n}\n\nexport function fire(event) {\n let handler;\n const _event = handlers[event];\n let _l;\n\n if (_event) {\n for (let id in _event) {\n if (_event.hasOwnProperty(id)) {\n handler = _event[id];\n _l = handler && handler.__l;\n if (_l && _l[event]) {\n for (let i = 0; i < _l[event].length; i++) {\n _l[event][i].apply(this, Array.prototype.slice.call(arguments, 1));\n }\n }\n }\n }\n }\n}\n","/*\n Copyright 2018 Google Inc. All Rights Reserved.\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n http://www.apache.org/licenses/LICENSE-2.0\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n Modifications Copyright (c) 2022 Woopra, Inc.\n*/\n\n/**\n * Original source: https://github.com/GoogleChromeLabs/page-lifecycle\n * MODIFICATIONS:\n * - inline imports\n * - always use shims\n * - use constants in place of string literals\n */\n\nimport {\n EVENT_BEFOREUNLOAD,\n EVENT_BLUR,\n EVENT_FOCUS,\n EVENT_FREEZE,\n EVENT_PAGEHIDE,\n EVENT_PAGESHOW,\n EVENT_RESUME,\n EVENT_UNLOAD,\n EVENT_VISIBILITYCHANGE,\n PAGE_LIFECYCLE_STATE_ACTIVE,\n PAGE_LIFECYCLE_STATE_FROZEN,\n PAGE_LIFECYCLE_STATE_HIDDEN,\n PAGE_LIFECYCLE_STATE_PASSIVE,\n PAGE_LIFECYCLE_STATE_TERMINATED\n} from '../constants';\n\nclass EventTargetShim {\n /**\n * Creates the event registry.\n */\n constructor() {\n this._registry = {};\n }\n\n /**\n * @param {string} type\n * @param {EventListener|function(!Event):(boolean|undefined)} listener\n * @param {(boolean|!AddEventListenerOptions)=} opts\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-eventtarget-addeventlistener\n */\n addEventListener(type, listener, opts = false) {\n this._getRegistry(type).push(listener);\n }\n\n /**\n * @param {string} type\n * @param {EventListener|function(!Event):(boolean|undefined)} listener\n * @param {(boolean|!EventListenerOptions)=} opts\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-eventtarget-removeeventlistener\n */\n removeEventListener(type, listener, opts = false) {\n const typeRegistry = this._getRegistry(type);\n const handlerIndex = typeRegistry.indexOf(listener);\n if (handlerIndex > -1) {\n typeRegistry.splice(handlerIndex, 1);\n }\n }\n\n /**\n * @param {!Event|!EventShim} evt\n * @return {boolean}\n * @see https://dom.spec.whatwg.org/#dom-eventtarget-dispatchevent\n */\n dispatchEvent(evt) {\n // Set the target then freeze the event object to prevent modification.\n evt.target = this;\n Object.freeze(evt);\n\n this._getRegistry(evt.type).forEach((listener) => listener(evt));\n return true;\n }\n\n /**\n * Returns an array of handlers associated with the passed event type.\n * If no handlers have been registered, an empty array is returned.\n * @private\n * @param {string} type The event type.\n * @return {!Array} An array of handler functions.\n */\n _getRegistry(type) {\n return (this._registry[type] = this._registry[type] || []);\n }\n}\n\nclass StateChangeEvent {\n constructor(type, initDict) {\n this.type = type;\n this.newState = initDict.newState;\n this.oldState = initDict.oldState;\n this.originalEvent = initDict.originalEvent;\n }\n}\n\n// Detect Safari to work around Safari-specific bugs.\nconst IS_SAFARI = typeof safari === 'object' && safari.pushNotification;\n\nconst SUPPORTS_PAGE_TRANSITION_EVENTS = 'onpageshow' in self;\n\nconst EVENTS = [\n EVENT_FOCUS,\n EVENT_BLUR,\n EVENT_VISIBILITYCHANGE,\n EVENT_FREEZE,\n EVENT_RESUME,\n EVENT_PAGESHOW,\n // IE9-10 do not support the pagehide event, so we fall back to unload\n // Note: unload *MUST ONLY* be added conditionally, otherwise it will\n // prevent page navigation caching (a.k.a bfcache).\n SUPPORTS_PAGE_TRANSITION_EVENTS ? EVENT_PAGEHIDE : EVENT_UNLOAD\n];\n\n/**\n * @param {!Event} evt\n * @return {string}\n */\nconst onbeforeunload = (evt) => {\n evt.preventDefault();\n return (evt.returnValue = 'Are you sure?');\n};\n\n/**\n * Converts an array of states into an object where the state is the key\n * and the value is the index.\n * @param {!Array} arr\n * @return {!Object}\n */\nconst toIndexedObject = (arr) =>\n arr.reduce((acc, val, idx) => {\n acc[val] = idx;\n return acc;\n }, {});\n\n/**\n * @type {!Array}\n */\nconst LEGAL_STATE_TRANSITIONS = [\n // The normal unload process (bfcache process is addressed above).\n [\n PAGE_LIFECYCLE_STATE_ACTIVE,\n PAGE_LIFECYCLE_STATE_PASSIVE,\n PAGE_LIFECYCLE_STATE_HIDDEN,\n PAGE_LIFECYCLE_STATE_TERMINATED\n ],\n\n // An active page transitioning to frozen,\n // or an unloading page going into the bfcache.\n [\n PAGE_LIFECYCLE_STATE_ACTIVE,\n PAGE_LIFECYCLE_STATE_PASSIVE,\n PAGE_LIFECYCLE_STATE_HIDDEN,\n PAGE_LIFECYCLE_STATE_FROZEN\n ],\n\n // A hidden page transitioning back to active.\n [\n PAGE_LIFECYCLE_STATE_HIDDEN,\n PAGE_LIFECYCLE_STATE_PASSIVE,\n PAGE_LIFECYCLE_STATE_ACTIVE\n ],\n\n // A frozen page being resumed\n [PAGE_LIFECYCLE_STATE_FROZEN, PAGE_LIFECYCLE_STATE_HIDDEN],\n\n // A frozen (bfcached) page navigated back to\n // Note: [FROZEN, HIDDEN] can happen here, but it's already covered above.\n [PAGE_LIFECYCLE_STATE_FROZEN, PAGE_LIFECYCLE_STATE_ACTIVE],\n [PAGE_LIFECYCLE_STATE_FROZEN, PAGE_LIFECYCLE_STATE_PASSIVE]\n].map(toIndexedObject);\n\n/**\n * Accepts a current state and a future state and returns an array of legal\n * state transition paths. This is needed to normalize behavior across browsers\n * since some browsers do not fire events in certain cases and thus skip\n * states.\n * @param {string} oldState\n * @param {string} newState\n * @return {!Array}\n */\nconst getLegalStateTransitionPath = (oldState, newState) => {\n // We're intentionally not using for...of here so when we transpile to ES5\n // we don't need to include the Symbol polyfills.\n for (let order, i = 0; (order = LEGAL_STATE_TRANSITIONS[i]); ++i) {\n const oldIndex = order[oldState];\n const newIndex = order[newState];\n\n if (oldIndex >= 0 && newIndex >= 0 && newIndex > oldIndex) {\n // Differences greater than one should be reported\n // because it means a state was skipped.\n return Object.keys(order).slice(oldIndex, newIndex + 1);\n }\n }\n return [];\n // TODO(philipwalton): it shouldn't be possible to get here, but\n // consider some kind of warning or call to action if it happens.\n // console.warn(`Invalid state change detected: ${oldState} > ${newState}`);\n};\n\n/**\n * Returns the current state based on the document's visibility and\n * in input focus states. Note this method is only used to determine\n * active vs passive vs hidden states, as other states require listening\n * for events.\n * @return {string}\n */\nconst getCurrentState = () => {\n if (document.visibilityState === PAGE_LIFECYCLE_STATE_HIDDEN) {\n return PAGE_LIFECYCLE_STATE_HIDDEN;\n }\n if (document.hasFocus()) {\n return PAGE_LIFECYCLE_STATE_ACTIVE;\n }\n return PAGE_LIFECYCLE_STATE_PASSIVE;\n};\n\n/**\n * Class definition for the exported, singleton lifecycle instance.\n */\nclass PageLifecycle extends EventTargetShim {\n /**\n * Initializes state, state history, and adds event listeners to monitor\n * state changes.\n */\n constructor() {\n super();\n\n const state = getCurrentState();\n\n this._state = state;\n this._unsavedChanges = [];\n\n // Bind the callback and add event listeners.\n this._handleEvents = this._handleEvents.bind(this);\n\n // Add capturing events on window so they run immediately.\n EVENTS.forEach((evt) => addEventListener(evt, this._handleEvents, true));\n\n // Safari does not reliably fire the `pagehide` or `visibilitychange`\n // events when closing a tab, so we have to use `beforeunload` with a\n // timeout to check whether the default action was prevented.\n // - https://bugs.webkit.org/show_bug.cgi?id=151610\n // - https://bugs.webkit.org/show_bug.cgi?id=151234\n // NOTE: we only add this to Safari because adding it to Firefox would\n // prevent the page from being eligible for bfcache.\n if (IS_SAFARI) {\n addEventListener(EVENT_BEFOREUNLOAD, (evt) => {\n this._safariBeforeUnloadTimeout = setTimeout(() => {\n if (!(evt.defaultPrevented || evt.returnValue.length > 0)) {\n this._dispatchChangesIfNeeded(evt, PAGE_LIFECYCLE_STATE_HIDDEN);\n }\n }, 0);\n });\n }\n }\n\n /**\n * @return {string}\n */\n get state() {\n return this._state;\n }\n\n /**\n * Returns the value of document.wasDiscarded. This is arguably unnecessary\n * but I think there's value in having the entire API in one place and\n * consistent across browsers.\n * @return {boolean}\n */\n get pageWasDiscarded() {\n return document.wasDiscarded || false;\n }\n\n /**\n * @param {Symbol|Object} id A unique symbol or object identifying the\n *. pending state. This ID is required when removing the state later.\n */\n addUnsavedChanges(id) {\n // Don't add duplicate state. Note: ideally this would be a set, but for\n // better browser compatibility we're using an array.\n if (!this._unsavedChanges.indexOf(id) > -1) {\n // If this is the first state being added,\n // also add a beforeunload listener.\n if (this._unsavedChanges.length === 0) {\n addEventListener(EVENT_BEFOREUNLOAD, onbeforeunload);\n }\n this._unsavedChanges.push(id);\n }\n }\n\n /**\n * @param {Symbol|Object} id A unique symbol or object identifying the\n *. pending state. This ID is required when removing the state later.\n */\n removeUnsavedChanges(id) {\n const idIndex = this._unsavedChanges.indexOf(id);\n\n if (idIndex > -1) {\n this._unsavedChanges.splice(idIndex, 1);\n\n // If there's no more pending state, remove the event listener.\n if (this._unsavedChanges.length === 0) {\n removeEventListener(EVENT_BEFOREUNLOAD, onbeforeunload);\n }\n }\n }\n\n /**\n * @private\n * @param {!Event} originalEvent\n * @param {string} newState\n */\n _dispatchChangesIfNeeded(originalEvent, newState) {\n if (newState !== this._state) {\n const oldState = this._state;\n const path = getLegalStateTransitionPath(oldState, newState);\n\n for (let i = 0; i < path.length - 1; ++i) {\n const oldState = path[i];\n const newState = path[i + 1];\n\n this._state = newState;\n this.dispatchEvent(\n new StateChangeEvent('statechange', {\n oldState,\n newState,\n originalEvent\n })\n );\n }\n }\n }\n\n /**\n * @private\n * @param {!Event} evt\n */\n _handleEvents(evt) {\n if (IS_SAFARI) {\n clearTimeout(this._safariBeforeUnloadTimeout);\n }\n\n switch (evt.type) {\n case EVENT_PAGESHOW:\n case EVENT_RESUME:\n this._dispatchChangesIfNeeded(evt, getCurrentState());\n break;\n case EVENT_FOCUS:\n this._dispatchChangesIfNeeded(evt, PAGE_LIFECYCLE_STATE_ACTIVE);\n break;\n case EVENT_BLUR:\n // The `blur` event can fire while the page is being unloaded, so we\n // only need to update the state if the current state is \"active\".\n if (this._state === PAGE_LIFECYCLE_STATE_ACTIVE) {\n this._dispatchChangesIfNeeded(evt, getCurrentState());\n }\n break;\n case EVENT_PAGEHIDE:\n case EVENT_UNLOAD:\n this._dispatchChangesIfNeeded(\n evt,\n evt.persisted\n ? PAGE_LIFECYCLE_STATE_FROZEN\n : PAGE_LIFECYCLE_STATE_TERMINATED\n );\n break;\n case EVENT_VISIBILITYCHANGE:\n // The document's `visibilityState` will change to hidden as the page\n // is being unloaded, but in such cases the lifecycle state shouldn't\n // change.\n if (\n this._state !== PAGE_LIFECYCLE_STATE_FROZEN &&\n this._state !== PAGE_LIFECYCLE_STATE_TERMINATED\n ) {\n this._dispatchChangesIfNeeded(evt, getCurrentState());\n }\n break;\n case EVENT_FREEZE:\n this._dispatchChangesIfNeeded(evt, PAGE_LIFECYCLE_STATE_FROZEN);\n break;\n }\n }\n}\n\nexport default new PageLifecycle();\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nexport default isArray;\n","import baseGetTag from './_baseGetTag.js';\nimport isArray from './isArray.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar stringTag = '[object String]';\n\n/**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\nfunction isString(value) {\n return typeof value == 'string' ||\n (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n}\n\nexport default isString;\n","import overArg from './_overArg.js';\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nexport default getPrototype;\n","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\nexport default overArg;\n","import baseGetTag from './_baseGetTag.js';\nimport getPrototype from './_getPrototype.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n}\n\nexport default isPlainObject;\n","import root from './_root.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsFinite = root.isFinite;\n\n/**\n * Checks if `value` is a finite primitive number.\n *\n * **Note:** This method is based on\n * [`Number.isFinite`](https://mdn.io/Number/isFinite).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.\n * @example\n *\n * _.isFinite(3);\n * // => true\n *\n * _.isFinite(Number.MIN_VALUE);\n * // => true\n *\n * _.isFinite(Infinity);\n * // => false\n *\n * _.isFinite('3');\n * // => false\n */\nfunction isFinite(value) {\n return typeof value == 'number' && nativeIsFinite(value);\n}\n\nexport default isFinite;\n","import {\n isArray,\n isFinite,\n isFunction,\n isPlainObject,\n isString,\n isUndefined\n} from 'lodash-es';\nimport { RANDOM_STRING_CHARS } from '../constants';\n\n/**\n * Generates a random 12 character string\n *\n * @return {String} Returns a random 12 character string\n */\nexport function randomString() {\n let s = '';\n\n for (let i = 0; i < 12; i++) {\n const rnum = Math.floor(Math.random() * RANDOM_STRING_CHARS.length);\n s += RANDOM_STRING_CHARS.substring(rnum, rnum + 1);\n }\n\n return s;\n}\n\nexport function isLeftClick(evt = window.event) {\n const button =\n (!isUndefined(evt.which) && evt.which === 1) ||\n (!isUndefined(evt.button) && evt.button === 0);\n return button && !evt.metaKey && !evt.altKey && !evt.ctrlKey && !evt.shiftKey;\n}\n\n/**\n * Helper to either query an element by id, or return element if passed\n * through options\n *\n * Supports searching by ids and classnames (or querySelector if browser supported)\n */\nexport function getElement(selector, options) {\n const _options = isString(selector) ? options || {} : selector || {};\n\n if (_options.el) {\n return _options.el;\n } else if (isString(selector)) {\n if (document.querySelectorAll) {\n return document.querySelectorAll(selector);\n } else if (selector[0] === '#') {\n return document.getElementById(selector.substr(1));\n } else if (selector[0] === '.') {\n return document.getElementsByClassName(selector.substr(1));\n }\n }\n}\n\nexport function prefixObjectKeys(object, prefix, blacklist) {\n const obj = {};\n\n if (isUndefined(object)) return obj;\n\n for (let key in object) {\n if (object.hasOwnProperty(key)) {\n const value = object[key];\n\n let isBlacklisted = false;\n\n for (let i = 0; i < blacklist.length; i++) {\n if (blacklist[i][0] === key) {\n isBlacklisted = true;\n break;\n }\n }\n\n if (\n !isBlacklisted &&\n value !== 'undefined' &&\n value !== 'null' &&\n !isUndefined(value)\n ) {\n obj[`${prefix}${key}`] = value;\n }\n }\n }\n\n return obj;\n}\n\nexport function jsonStringifyObjectValues(object) {\n const obj = {};\n\n if (isUndefined(object)) return obj;\n\n for (let key in object) {\n if (object.hasOwnProperty(key)) {\n if (isPlainObject(object[key]) || isArray(object[key])) {\n try {\n obj[key] = JSON.stringify(object[key]);\n } catch {\n obj[key] = object[key];\n }\n } else obj[key] = object[key];\n }\n }\n\n return obj;\n}\n\nexport function getScrollDepth() {\n const scrollHeight = document.body.scrollHeight;\n\n const scrollDepth =\n ((window.scrollY || 0) + window.innerHeight) / scrollHeight;\n\n return Math.max(0, Math.min(1, isFinite(scrollDepth) ? scrollDepth : 0));\n}\n\nexport function callCallback(callback, action) {\n try {\n callback();\n } catch (e) {\n console.error(`Error in Woopra ${action} callback`); // eslint-disable-line no-console\n console.error(e.stack); // eslint-disable-line no-console\n }\n}\n\nfunction matchesElement(element, matcher) {\n return matcher.some((sel) => element.matches(sel));\n}\n\nexport function findParentElement(element, matcher) {\n let elem = element;\n\n while (!isUndefined(elem) && elem !== null) {\n if (elem.tagName && matchesElement(elem, matcher)) break;\n\n elem = elem.parentNode;\n }\n\n return elem;\n}\n\nexport function hasBeaconSupport() {\n return isFunction(navigator.sendBeacon);\n}\n\nexport function getDOMPath(element) {\n const stack = [];\n\n let elem = element;\n\n while (elem.parentNode) {\n let count = 0;\n let index = 0;\n\n for (let i = 0; i < elem.parentNode.childNodes.length; i++) {\n const siblingElement = elem.parentNode.childNodes[i];\n\n if (siblingElement.nodeName === elem.nodeName) {\n if (siblingElement === elem) index = count;\n\n count++;\n }\n }\n\n const nodeName = elem.nodeName.toLowerCase();\n\n if (elem.hasAttribute('id') && elem.id) {\n stack.unshift(`${nodeName}#${elem.id}`);\n } else if (count > 1) {\n stack.unshift(`${nodeName}[${index}]`);\n } else {\n stack.unshift(nodeName);\n }\n\n elem = elem.parentNode;\n }\n\n return stack.slice(1).join(' > ');\n}\n","import { isUndefined, throttle } from 'lodash-es';\nimport {\n DATA_TRACKED_ATTRIBUTE,\n ELEMENT_MATCHER_LINK,\n EVENT_CLICK,\n EVENT_LINK_CLICK,\n EVENT_MOUSEDOWN,\n EVENT_MOUSEMOVE,\n EVENT_SCROLL,\n EVENT_STATECHANGE,\n KEY_AUTO_DECORATE,\n KEY_DOWNLOAD_TRACKING,\n KEY_OUTGOING_TRACKING\n} from '../constants';\nimport globals from '../globals';\nimport { addEventListener, fire } from './events';\nimport PageLifecycle from './page-lifecycle';\nimport { findParentElement, isLeftClick } from './utils';\n\nfunction onClick(e) {\n let elem = e.srcElement || e.target;\n\n if (isLeftClick(e)) {\n fire(EVENT_CLICK, e, elem);\n }\n\n if (globals[KEY_DOWNLOAD_TRACKING] || globals[KEY_OUTGOING_TRACKING]) {\n elem = findParentElement(e.srcElement || e.target, ELEMENT_MATCHER_LINK);\n\n if (\n !isUndefined(elem) &&\n elem !== null &&\n !elem.getAttribute(DATA_TRACKED_ATTRIBUTE)\n ) {\n fire(EVENT_LINK_CLICK, e, elem);\n }\n }\n}\n\nfunction onMouseDown(e) {\n let elem;\n\n fire(EVENT_MOUSEMOVE, e, Date.now());\n\n if (globals[KEY_AUTO_DECORATE]) {\n elem = findParentElement(e.srcElement || e.target, ELEMENT_MATCHER_LINK);\n\n if (!isUndefined(elem) && elem !== null) {\n fire(KEY_AUTO_DECORATE, elem);\n }\n }\n}\n\nfunction onMouseMove(e) {\n fire(EVENT_MOUSEMOVE, e, Date.now());\n}\n\nconst onScroll = throttle(function onScroll(e) {\n fire(EVENT_SCROLL, e);\n}, 500);\n\nfunction onPageStateChange(e) {\n fire(EVENT_STATECHANGE, e);\n}\n\nconst CAPTURE = { capture: true };\nconst CAPTURE_PASSIVE = { capture: true, passive: true };\n\n// attaches events\n// needs to be handled here, instead of in a tracking instance because\n// these events should only be fired once on a page\nexport default function attachGlobalEvents() {\n addEventListener(document, EVENT_CLICK, onClick, CAPTURE);\n addEventListener(document, EVENT_MOUSEDOWN, onMouseDown, CAPTURE);\n addEventListener(document, EVENT_MOUSEMOVE, onMouseMove, CAPTURE_PASSIVE);\n addEventListener(window, EVENT_SCROLL, onScroll, CAPTURE_PASSIVE);\n\n PageLifecycle.addEventListener(EVENT_STATECHANGE, onPageStateChange);\n}\n","/**\n * This method returns `undefined`.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Util\n * @example\n *\n * _.times(2, _.noop);\n * // => [undefined, undefined]\n */\nfunction noop() {\n // No operation performed.\n}\n\nexport default noop;\n","export default class WoopraAction {\n constructor(woopra, id, params, meta) {\n this.woopra = woopra;\n this.id = id;\n this.params = params;\n this.meta = meta;\n }\n\n update(options = {}, lastArg) {\n if (options.event && options.event !== this.params.event) {\n this.params.event = options.event;\n }\n\n this.woopra.update(\n this.id,\n { ...options, $action: this.params.event },\n lastArg\n );\n }\n\n cancel() {\n this.woopra.cancelAction(this.id);\n }\n}\n","/**\n * The base implementation of `_.clamp` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n */\nfunction baseClamp(number, lower, upper) {\n if (number === number) {\n if (upper !== undefined) {\n number = number <= upper ? number : upper;\n }\n if (lower !== undefined) {\n number = number >= lower ? number : lower;\n }\n }\n return number;\n}\n\nexport default baseClamp;\n","import Symbol from './_Symbol.js';\nimport arrayMap from './_arrayMap.js';\nimport isArray from './isArray.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nexport default baseToString;\n","/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\n\nexport default arrayMap;\n","import toNumber from './toNumber.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0,\n MAX_INTEGER = 1.7976931348623157e+308;\n\n/**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\nfunction toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === INFINITY || value === -INFINITY) {\n var sign = (value < 0 ? -1 : 1);\n return sign * MAX_INTEGER;\n }\n return value === value ? value : 0;\n}\n\nexport default toFinite;\n","import toFinite from './toFinite.js';\n\n/**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\nfunction toInteger(value) {\n var result = toFinite(value),\n remainder = result % 1;\n\n return result === result ? (remainder ? result - remainder : result) : 0;\n}\n\nexport default toInteger;\n","import baseToString from './_baseToString.js';\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\nexport default toString;\n","/*\\\n|*|\n|*| :: cookies.js ::\n|*|\n|*| A complete cookies reader/writer framework with full unicode support.\n|*|\n|*| Revision #1 - September 4, 2014\n|*|\n|*| https://developer.mozilla.org/en-US/docs/Web/API/document.cookie\n|*| https://developer.mozilla.org/User:fusionchess\n|*|\n|*| This framework is released under the GNU Public License, version 3 or later.\n|*| http://www.gnu.org/licenses/gpl-3.0-standalone.html\n|*|\n|*| Syntaxes:\n|*|\n|*| * docCookies.setItem(name, value[, end[, path[, domain[, secure]]]])\n|*| * docCookies.getItem(name)\n|*| * docCookies.removeItem(name[, path[, domain]])\n|*| * docCookies.hasItem(name)\n|*| * docCookies.keys()\n|*|\n\\*/\n\nexport function getItem(sKey) {\n if (!sKey) {\n return null;\n }\n return (\n decodeURIComponent(\n document.cookie.replace(\n new RegExp(\n '(?:(?:^|.*;)\\\\s*' +\n encodeURIComponent(sKey).replace(/[\\-\\.\\+\\*]/g, '\\\\$&') +\n '\\\\s*\\\\=\\\\s*([^;]*).*$)|^.*$'\n ),\n '$1'\n )\n ) || null\n );\n}\n\nexport function setItem(sKey, sValue, vEnd, sPath, sDomain, bSecure) {\n if (!sKey || /^(?:expires|max\\-age|path|domain|secure)$/i.test(sKey)) {\n return false;\n }\n let sExpires = '';\n if (vEnd) {\n switch (vEnd.constructor) {\n case Number:\n sExpires =\n vEnd === Infinity\n ? '; expires=Fri, 31 Dec 9999 23:59:59 GMT'\n : '; max-age=' + vEnd;\n break;\n case String:\n sExpires = '; expires=' + vEnd;\n break;\n case Date:\n sExpires = '; expires=' + vEnd.toUTCString();\n break;\n }\n }\n document.cookie =\n encodeURIComponent(sKey) +\n '=' +\n encodeURIComponent(sValue) +\n sExpires +\n (sDomain ? '; domain=' + sDomain : '') +\n (sPath ? '; path=' + sPath : '') +\n (bSecure ? '; secure' : '');\n return true;\n}\n\nexport function removeItem(sKey, sPath, sDomain) {\n if (!hasItem(sKey)) {\n return false;\n }\n document.cookie =\n encodeURIComponent(sKey) +\n '=; expires=Thu, 01 Jan 1970 00:00:00 GMT' +\n (sDomain ? '; domain=' + sDomain : '') +\n (sPath ? '; path=' + sPath : '');\n return true;\n}\n\nexport function hasItem(sKey) {\n if (!sKey) {\n return false;\n }\n return new RegExp(\n '(?:^|;\\\\s*)' +\n encodeURIComponent(sKey).replace(/[\\-\\.\\+\\*]/g, '\\\\$&') +\n '\\\\s*\\\\='\n ).test(document.cookie);\n}\n\nexport function keys() {\n const aKeys = document.cookie\n .replace(/((?:^|\\s*;)[^\\=]+)(?=;|$)|^\\s*|\\s*(?:\\=[^;]*)?(?:\\1|$)/g, '')\n .split(/\\s*(?:\\=[^;]*)?;\\s*/);\n for (let nLen = aKeys.length, nIdx = 0; nIdx < nLen; nIdx++) {\n aKeys[nIdx] = decodeURIComponent(aKeys[nIdx]);\n }\n return aKeys;\n}\n","const TYPE_BUTTON = 'button';\nconst TYPE_SUBMIT = 'submit';\nconst TYPE_RESET = 'reset';\n\n// https://code.google.com/p/form-serialize/\n// modified to return an object\nexport function serializeForm(form, options = {}) {\n if (!form || form.nodeName !== 'FORM') {\n return;\n }\n\n const exclude = options.exclude || [];\n const data = {};\n\n for (let i = form.elements.length - 1; i >= 0; i = i - 1) {\n if (\n form.elements[i].name === '' ||\n exclude.indexOf(form.elements[i].name) > -1\n ) {\n continue;\n }\n switch (form.elements[i].nodeName) {\n case 'INPUT':\n switch (form.elements[i].type) {\n case 'text':\n case 'hidden':\n case TYPE_BUTTON:\n case TYPE_RESET:\n case TYPE_SUBMIT:\n data[form.elements[i].name] = form.elements[i].value;\n break;\n case 'checkbox':\n case 'radio':\n if (form.elements[i].checked) {\n data[form.elements[i].name] = form.elements[i].value;\n }\n break;\n case 'file':\n break;\n }\n break;\n case 'TEXTAREA':\n data[form.elements[i].name] = form.elements[i].value;\n break;\n case 'SELECT':\n switch (form.elements[i].type) {\n case 'select-one':\n data[form.elements[i].name] = form.elements[i].value;\n break;\n case 'select-multiple':\n for (\n let j = form.elements[i].options.length - 1;\n j >= 0;\n j = j - 1\n ) {\n if (form.elements[i].options[j].selected) {\n data[form.elements[i].name] = form.elements[i].options[j].value;\n }\n }\n break;\n }\n break;\n case 'BUTTON':\n switch (form.elements[i].type) {\n case TYPE_RESET:\n case TYPE_SUBMIT:\n case TYPE_BUTTON:\n data[form.elements[i].name] = form.elements[i].value;\n break;\n }\n break;\n }\n }\n return data;\n}\n","import { isUndefined, noop } from 'lodash-es';\n\nexport function removeScript(script) {\n if (script && script.parentNode) {\n script.parentNode.removeChild(script);\n }\n}\n\nconst statusIsSuccessful = (readyState) =>\n readyState === 4 || readyState === 'complete' || readyState === 'loaded';\n\nexport function loadScript(url, callback = noop, errorCallback = noop) {\n const script = document.createElement('script');\n\n script.type = 'text/javascript';\n script.async = true;\n\n if (!isUndefined(script.onreadystatechange)) {\n script.onreadystatechange = function onreadystatechange() {\n if (statusIsSuccessful(this.readyState)) {\n callback();\n removeScript(script);\n }\n };\n } else {\n script.onload = () => {\n callback();\n removeScript(script);\n };\n script.onerror = (e) => {\n errorCallback(e);\n removeScript(script);\n };\n }\n\n script.src = url;\n\n if (document.body) document.body.appendChild(script);\n else document.head.appendChild(script);\n}\n","import { endsWith, isUndefined, startsWith } from 'lodash-es';\nimport {\n CAMPAIGN_KEYS,\n KEY_OUTGOING_IGNORE_SUBDOMAIN,\n SECOND_LEVEL_TLDS,\n XDM_PARAM_NAME\n} from './constants';\nimport globals from './globals';\nimport * as docCookies from './lib/cookies';\nimport { addEventListener, fire, on } from './lib/events';\nimport { serializeForm } from './lib/form';\nimport { loadScript, removeScript } from './lib/script';\nimport { getElement, isLeftClick, randomString } from './lib/utils';\n\nconst Woopra = {};\n\nWoopra.docCookies = docCookies;\n\n/**\n * Wrapper for window.location to allow stubs in testing\n */\nWoopra.location = function location(property, value) {\n // make sure property is valid\n if (!isUndefined(window.location[property])) {\n if (!isUndefined(value)) {\n window.location[property] = value;\n } else {\n return window.location[property];\n }\n }\n};\n\nfunction getHostname() {\n return Woopra.location('hostname');\n}\n\n/**\n * This exists to please the Safari gods. Sinon can't stub window in Safari.\n */\nWoopra.historyReplaceState =\n window.history && window.history.replaceState\n ? function historyReplaceState(data, title, url) {\n return window.history.replaceState(data, title, url);\n }\n : function () {};\n\n/**\n * Hides any URL parameters by calling window.history.replaceState\n *\n * @param {Array} params A list of parameter prefixes that will be hidden\n * @return {String} Returns the new URL that will be used\n */\nWoopra.hideUrlParams = function hideUrlParams(params) {\n const regex = new RegExp(\n `[?&]+((?:${params.join('|')})[^=&]*)=([^&#]*)`,\n 'gi'\n );\n const href = Woopra.location('href').replace(regex, '');\n\n Woopra.historyReplaceState(null, null, href);\n\n return href;\n};\n\n/**\n * Retrieves the current URL parameters as an object\n *\n * @return {Object} An object for all of the URL parameters\n */\nWoopra.getUrlParams = function getUrlParams() {\n const vars = {};\n const href = Woopra.location('href');\n\n if (href) {\n href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function (m, key, value) {\n vars[key] = decodeURIComponent(value.split('+').join(' '));\n });\n }\n\n return vars;\n};\n\nWoopra.buildUrlParams = function buildUrlParams(params, prefix = '') {\n const p = [];\n\n if (isUndefined(params)) {\n return params;\n }\n\n for (let key in params) {\n if (params.hasOwnProperty(key)) {\n if (\n params[key] !== 'undefined' &&\n params[key] !== 'null' &&\n !isUndefined(params[key])\n ) {\n p.push(\n `${prefix}${encodeURIComponent(key)}=${encodeURIComponent(\n params[key]\n )}`\n );\n }\n }\n }\n return p.join('&');\n};\n\n/**\n * Parses the URL parameters for data beginning with a certain prefix\n *\n * @param {Function} method The callback method for each key found matching `prefix`\n * @param {string} prefix The prefix that the parameter should start with\n */\nWoopra.getCustomData = function getCustomData(method, prefix = 'wv_') {\n const vars = Woopra.getUrlParams();\n\n for (let i in vars) {\n if (vars.hasOwnProperty(i)) {\n const value = vars[i];\n\n if (i.substring(0, prefix.length) === prefix) {\n const key = i.substring(prefix.length);\n method.call(this, key, value);\n }\n }\n }\n};\n\n/**\n * Retrieves the current client domain name using the hostname\n * and returning the last two tokens with a `.` separator (domain + tld).\n *\n * This can be an issue if there is a second level domain\n */\nWoopra.getDomain = function getDomain(hostname = getHostname()) {\n const domain = hostname.substring(\n hostname.lastIndexOf('.', hostname.lastIndexOf('.') - 1) + 1\n );\n\n // check if domain is in list of second level domains, ignore if so\n if (SECOND_LEVEL_TLDS.indexOf(domain) !== -1) {\n return hostname.substring(\n hostname.lastIndexOf('.', hostname.indexOf(domain) - 2) + 1\n );\n }\n\n return domain;\n};\n\n/**\n * Returns the current hostname with 'www' stripped out\n */\nWoopra.getHostnameNoWww = function getHostnameNoWww() {\n const hostname = getHostname();\n\n if (hostname.indexOf('www.') === 0) {\n return hostname.replace('www.', '');\n }\n\n return hostname;\n};\n\n/**\n * Determines if the current URL should be considered an outgoing URL\n */\nWoopra.isOutgoingLink = function isOutgoingLink(targetHostname) {\n const currentHostname = getHostname();\n const currentDomain = Woopra.getDomain(currentHostname);\n\n return (\n targetHostname !== currentHostname &&\n targetHostname.replace(/^www\\./, '') !==\n currentHostname.replace(/^www\\./, '') &&\n (!globals[KEY_OUTGOING_IGNORE_SUBDOMAIN] ||\n currentDomain !== Woopra.getDomain(targetHostname)) &&\n !Woopra.startsWith(targetHostname, 'javascript') &&\n targetHostname !== '' &&\n targetHostname !== '#'\n );\n};\n\nWoopra.hideCrossDomainId = function hideCrossDomainId() {\n return Woopra.hideUrlParams([XDM_PARAM_NAME]);\n};\n\nWoopra.mapQueryParams = function mapQueryParams(mapping) {\n const vars = Woopra.getUrlParams();\n const params = {};\n\n for (let key in mapping) {\n const value = vars[key];\n if (!isUndefined(value)) {\n params[mapping[key]] = value;\n }\n }\n\n return params;\n};\n\nWoopra.redirect = function redirect(link) {\n Woopra.location('href', link);\n};\n\n/**\n * Parses current URL for parameters that start with either `utm_` or `woo_`\n * and have the keys `source`, `medium`, `content`, `campaign`, `term`\n *\n * @return {Object} Returns an object with campaign keys as keys\n */\nWoopra.getCampaignData = function getCampaignData() {\n const vars = Woopra.getUrlParams();\n const campaign = {};\n\n for (let i = 0; i < CAMPAIGN_KEYS.length; i++) {\n const key = CAMPAIGN_KEYS[i];\n const value = vars[`utm_${key}`] || vars[`woo_${key}`];\n\n if (!isUndefined(value)) {\n campaign[`campaign_${key === 'campaign' ? 'name' : key}`] = value;\n }\n }\n\n return campaign;\n};\n\n/**\n * Hides any campaign data (query params: wv_, woo_, utm_) from the URL\n * by using replaceState (if available)\n */\nWoopra.hideCampaignData = function hideCampaignData() {\n return Woopra.hideUrlParams(['wv_', 'woo_', 'utm_']);\n};\n\nWoopra.leftClick = isLeftClick;\nWoopra.randomString = randomString;\nWoopra.getElement = getElement;\nWoopra.loadScript = loadScript;\nWoopra.removeScript = removeScript;\nWoopra.serializeForm = serializeForm;\nWoopra._on = on;\nWoopra._fire = fire;\nWoopra.attachEvent = addEventListener;\nWoopra.startsWith = startsWith;\nWoopra.endsWith = endsWith;\n\nexport default Woopra;\n","import baseClamp from './_baseClamp.js';\nimport baseToString from './_baseToString.js';\nimport toInteger from './toInteger.js';\nimport toString from './toString.js';\n\n/**\n * Checks if `string` starts with the given target string.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {string} [target] The string to search for.\n * @param {number} [position=0] The position to search from.\n * @returns {boolean} Returns `true` if `string` starts with `target`,\n * else `false`.\n * @example\n *\n * _.startsWith('abc', 'a');\n * // => true\n *\n * _.startsWith('abc', 'b');\n * // => false\n *\n * _.startsWith('abc', 'b', 1);\n * // => true\n */\nfunction startsWith(string, target, position) {\n string = toString(string);\n position = position == null\n ? 0\n : baseClamp(toInteger(position), 0, string.length);\n\n target = baseToString(target);\n return string.slice(position, position + target.length) == target;\n}\n\nexport default startsWith;\n","import baseClamp from './_baseClamp.js';\nimport baseToString from './_baseToString.js';\nimport toInteger from './toInteger.js';\nimport toString from './toString.js';\n\n/**\n * Checks if `string` ends with the given target string.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {string} [target] The string to search for.\n * @param {number} [position=string.length] The position to search up to.\n * @returns {boolean} Returns `true` if `string` ends with `target`,\n * else `false`.\n * @example\n *\n * _.endsWith('abc', 'c');\n * // => true\n *\n * _.endsWith('abc', 'b');\n * // => false\n *\n * _.endsWith('abc', 'b', 2);\n * // => true\n */\nfunction endsWith(string, target, position) {\n string = toString(string);\n target = baseToString(target);\n\n var length = string.length;\n position = position === undefined\n ? length\n : baseClamp(toInteger(position), 0, length);\n\n var end = position;\n position -= target.length;\n return position >= 0 && string.slice(position, end) == target;\n}\n\nexport default endsWith;\n","import {\n isArray,\n isFunction,\n isObject,\n isString,\n isUndefined,\n noop\n} from 'lodash-es';\nimport WoopraAction from './action';\nimport {\n ACTION_PROPERTY_ALIASES,\n ACTION_PROPERTY_PREFIX,\n ACTION_PV,\n DATA_TRACKED_ATTRIBUTE,\n DEFAULT_DOWNLOAD_EXTENSIONS,\n ELEMENT_MATCHER_CLICK,\n ENDPOINTS,\n ENDPOINT_IDENTIFY,\n ENDPOINT_TRACK,\n ENDPOINT_UPDATE,\n EVENT_CLICK,\n EVENT_DOWNLOAD,\n EVENT_LINK_CLICK,\n EVENT_MOUSEMOVE,\n EVENT_OUTGOING,\n EVENT_SCROLL,\n EVENT_STATECHANGE,\n IDPTNC,\n KEY_APP,\n KEY_AUGMENT_ACTION,\n KEY_AUTO_DECORATE,\n KEY_BEACONS,\n KEY_CAMPAIGN_ONCE,\n KEY_CLICK_PAUSE,\n KEY_CLICK_TRACKING,\n KEY_CLICK_TRACKING_MATCHER_SELECTORS,\n KEY_CONTEXT,\n KEY_COOKIE_DOMAIN,\n KEY_COOKIE_EXPIRE,\n KEY_COOKIE_NAME,\n KEY_COOKIE_PATH,\n KEY_COOKIE_SECURE,\n KEY_CROSS_DOMAIN,\n KEY_DOMAIN,\n KEY_DOWNLOAD_EXTENSIONS,\n KEY_DOWNLOAD_PAUSE,\n KEY_DOWNLOAD_TRACKING,\n KEY_FORM_PAUSE,\n KEY_HIDE_CAMPAIGN,\n KEY_HIDE_XDM_DATA,\n KEY_IDLE_THRESHOLD,\n KEY_IDLE_TIMEOUT,\n KEY_IGNORE_QUERY_URL,\n KEY_IP,\n KEY_MAP_QUERY_PARAMS,\n KEY_OUTGOING_IGNORE_SUBDOMAIN,\n KEY_OUTGOING_PAUSE,\n KEY_OUTGOING_TRACKING,\n KEY_PERSONALIZATION,\n KEY_PING,\n KEY_PING_INTERVAL,\n KEY_PROTOCOL,\n KEY_REGION,\n KEY_SAVE_URL_HASH,\n KEY_THIRD_PARTY,\n KEY_USE_COOKIES,\n LIFECYCLE_ACTION,\n LIFECYCLE_PAGE,\n MAX_PING_INTERVAL,\n META_CANCELLED,\n META_DIRTY,\n META_DURATION,\n META_EXPIRED,\n META_LEAVE,\n META_RETRACK,\n META_SENT,\n META_TIMESTAMP,\n MIN_PING_INTERVAL,\n ORG_PROPERTY_PREFIX,\n PAGE_LIFECYCLE_STATE_ACTIVE,\n PAGE_LIFECYCLE_STATE_HIDDEN,\n PAGE_LIFECYCLE_STATE_PASSIVE,\n PAGE_LIFECYCLE_STATE_TERMINATED,\n REGION_EU,\n SCROLL_DEPTH,\n TARGET_BLANK,\n URL_ID_REGEX,\n VERSION,\n VISITOR_PROPERTY_PREFIX,\n VISIT_PROPERTY_PREFIX,\n XDM_PARAM_NAME\n} from './constants';\nimport globals from './globals';\nimport { addEventListener, on, removeHandler } from './lib/events';\nimport {\n callCallback,\n findParentElement,\n getDOMPath,\n getElement,\n getScrollDepth,\n hasBeaconSupport,\n jsonStringifyObjectValues,\n prefixObjectKeys,\n randomString\n} from './lib/utils';\nimport Woopra from './woopra';\n\nconst fire = Woopra._fire;\n\nexport default class Tracker {\n constructor(instanceName) {\n this.visitorData = {};\n this.sessionData = {};\n this.orgData = {};\n\n this.options = {\n [KEY_APP]: 'js-client',\n [KEY_BEACONS]: hasBeaconSupport(),\n [KEY_CAMPAIGN_ONCE]: false,\n [KEY_CLICK_TRACKING_MATCHER_SELECTORS]: ELEMENT_MATCHER_CLICK,\n [KEY_COOKIE_DOMAIN]: `.${Woopra.getHostnameNoWww()}`,\n [KEY_COOKIE_EXPIRE]: new Date(\n new Date().setDate(new Date().getDate() + 730)\n ),\n [KEY_COOKIE_NAME]: 'wooTracker',\n [KEY_COOKIE_PATH]: '/',\n [KEY_COOKIE_SECURE]: Woopra.location('protocol') === 'https:',\n [KEY_CROSS_DOMAIN]: false,\n [KEY_DOWNLOAD_EXTENSIONS]: DEFAULT_DOWNLOAD_EXTENSIONS,\n [KEY_DOWNLOAD_PAUSE]: 200,\n [KEY_DOWNLOAD_TRACKING]: false,\n [KEY_HIDE_CAMPAIGN]: false,\n [KEY_HIDE_XDM_DATA]: false,\n [KEY_IDLE_THRESHOLD]: 10 * 1_000,\n [KEY_IDLE_TIMEOUT]: 60 * 10 * 1_000,\n [KEY_IGNORE_QUERY_URL]: false,\n [KEY_MAP_QUERY_PARAMS]: {},\n [KEY_OUTGOING_IGNORE_SUBDOMAIN]: true,\n [KEY_OUTGOING_PAUSE]: 200,\n [KEY_OUTGOING_TRACKING]: false,\n [KEY_PERSONALIZATION]: true,\n [KEY_PING_INTERVAL]: 12 * 1_000,\n [KEY_PING]: false,\n [KEY_PROTOCOL]: 'https',\n [KEY_REGION]: REGION_EU,\n [KEY_SAVE_URL_HASH]: true,\n [KEY_THIRD_PARTY]: false,\n [KEY_CLICK_PAUSE]: 250,\n [KEY_FORM_PAUSE]: 250,\n [KEY_USE_COOKIES]: true\n };\n\n this.instanceName = instanceName || 'woopra';\n this.idle = 0;\n this.cookie = '';\n this.last_activity = Date.now();\n this.loaded = false;\n this.dirtyCookie = false;\n this.sentCampaign = false;\n this.version = VERSION;\n this.pending = [];\n this.beaconQueue = [];\n this.lastAction = null;\n\n if (instanceName && instanceName !== '') {\n window[instanceName] = this;\n }\n }\n\n init() {\n this.__l = {};\n this._processQueue('config');\n this._setupCookie();\n this._bindEvents();\n\n // Otherwise loading indicator gets stuck until the every response\n // in the queue has been received\n setTimeout(() => this._processQueue(), 1);\n\n this.loaded = true;\n\n const callback = this.config('initialized');\n\n if (isFunction(callback)) {\n callback(this.instanceName);\n }\n\n // Safe to remove cross domain url parameter after setupCookie is called\n // Should only need to be called once on load\n if (this.config(KEY_HIDE_XDM_DATA)) {\n Woopra.hideCrossDomainId();\n }\n }\n\n /**\n * Processes the tracker queue in case user tries to push events\n * before tracker is ready.\n */\n _processQueue(type) {\n var _wpt = window.__woo ? window.__woo[this.instanceName] : _wpt;\n _wpt = window._w ? window._w[this.instanceName] : _wpt;\n\n // if _wpt is undefined, means script was loaded asynchronously and\n // there is no queue\n\n if (_wpt && _wpt._e) {\n const events = _wpt._e;\n for (let i = 0; i < events.length; i++) {\n const action = events[i];\n if (\n !isUndefined(action) &&\n this[action[0]] &&\n (isUndefined(type) || type === action[0])\n ) {\n this[action[0]].apply(this, Array.prototype.slice.call(action, 1));\n }\n }\n }\n }\n\n /**\n * Sets up the tracking cookie\n */\n _setupCookie() {\n const url_id = this.getUrlId();\n\n this.cookie = this.getCookie();\n\n // overwrite saved cookie if id is in url\n if (url_id) {\n this.cookie = url_id;\n }\n\n // Setup cookie\n if (!this.cookie || this.cookie.length < 1) {\n this.cookie = randomString();\n }\n\n Woopra.docCookies.setItem(\n this.config(KEY_COOKIE_NAME),\n this.cookie,\n this.config(KEY_COOKIE_EXPIRE),\n this.config(KEY_COOKIE_PATH),\n this.config(KEY_COOKIE_DOMAIN),\n this.config(KEY_COOKIE_SECURE)\n );\n\n this.dirtyCookie = true;\n }\n\n /**\n * Binds some events to measure mouse and keyboard events\n */\n _bindEvents() {\n on(this, EVENT_CLICK, (e) => this.onClick(e));\n on(this, EVENT_DOWNLOAD, (url) => this.downloaded(url));\n on(this, EVENT_LINK_CLICK, (e, link) => this.onLink(e, link));\n on(this, EVENT_MOUSEMOVE, (e, l) => this.moved(e, l));\n on(this, EVENT_OUTGOING, (url) => this.outgoing(url));\n on(this, EVENT_SCROLL, (elem) => this.onScroll(elem));\n on(this, EVENT_STATECHANGE, (e) => this.onPageStateChange(e));\n on(this, KEY_AUTO_DECORATE, (elem) => this.autoDecorate(elem));\n }\n\n /**\n * Sets/gets values from dataStore depending on arguments passed\n *\n * @param dataStore Object The tracker property to read/write\n * @param key String/Object Returns property object if key and value is undefined,\n * acts as a getter if only `key` is defined and a string, and\n * acts as a setter if `key` and `value` are defined OR if `key` is an object.\n */\n _dataSetter(dataStore, key, value) {\n if (isUndefined(key)) {\n return dataStore;\n }\n\n if (isUndefined(value)) {\n if (isString(key)) {\n return dataStore[key];\n }\n if (isObject(key)) {\n for (let i in key) {\n if (key.hasOwnProperty(i)) {\n if (Woopra.startsWith(i, 'cookie_')) {\n this.dirtyCookie = true;\n }\n dataStore[i] = key[i];\n }\n }\n }\n } else {\n if (Woopra.startsWith(key, 'cookie_')) {\n this.dirtyCookie = true;\n }\n dataStore[key] = value;\n }\n\n return this;\n }\n\n getVisitorUrlData() {\n Woopra.getCustomData.call(this, this.identify, 'wv_');\n }\n\n /*\n * Returns the Woopra cookie string\n */\n getCookie() {\n return Woopra.docCookies.getItem(this.config(KEY_COOKIE_NAME));\n }\n\n getProtocol() {\n const protocol = this.config(KEY_PROTOCOL);\n return protocol && protocol !== '' ? `${protocol}:` : '';\n }\n\n /**\n * Generates a destination endpoint string to use depending on different\n * configuration options\n */\n getEndpoint(path = '') {\n const protocol = this.getProtocol();\n\n if (this.config(KEY_THIRD_PARTY) && !this.config(KEY_DOMAIN)) {\n throw new Error('Error: `domain` is not set.');\n }\n\n let thirdPartyPath = this.config(KEY_THIRD_PARTY)\n ? `tp/${this.config(KEY_DOMAIN)}`\n : '';\n\n if (path && !Woopra.endsWith(path, '/')) {\n path += '/';\n }\n\n if (thirdPartyPath && !Woopra.startsWith(path, '/')) {\n thirdPartyPath += '/';\n }\n\n const region = this.config(KEY_REGION);\n const endpoint = ENDPOINTS[region];\n\n if (!endpoint) throw new Error(`Error: Invalid region: ${region}`);\n\n return `${protocol}//${endpoint}${thirdPartyPath}${path}`;\n }\n\n /**\n * Sets configuration options\n */\n config(key, value) {\n const data = this._dataSetter(this.options, key, value);\n\n // dataSetter returns `this` when it is used as a setter\n if (data === this) {\n // clamp ping interval\n this.options[KEY_PING_INTERVAL] = Math.max(\n MIN_PING_INTERVAL,\n Math.min(this.options[KEY_PING_INTERVAL], MAX_PING_INTERVAL)\n );\n\n // set script wide variables for events that are bound on script load\n // since we shouldn't bind per tracker instance\n globals[KEY_OUTGOING_TRACKING] = this.options[KEY_OUTGOING_TRACKING];\n globals[KEY_DOWNLOAD_TRACKING] = this.options[KEY_DOWNLOAD_TRACKING];\n globals[KEY_AUTO_DECORATE] =\n isUndefined(globals[KEY_AUTO_DECORATE]) &&\n this.options[KEY_CROSS_DOMAIN]\n ? this.options[KEY_CROSS_DOMAIN]\n : globals[KEY_AUTO_DECORATE];\n globals[KEY_OUTGOING_IGNORE_SUBDOMAIN] =\n this.options[KEY_OUTGOING_IGNORE_SUBDOMAIN];\n\n if (this.dirtyCookie && this.loaded) {\n this._setupCookie();\n }\n }\n\n return data;\n }\n\n /**\n * Use to attach custom visit data that doesn't stick to visitor\n * ** Not in use yet\n */\n visit(key, value) {\n return this._dataSetter(this.sessionData, key, value);\n }\n\n /**\n * Attach custom visitor data\n */\n identify(...args) {\n let key = undefined;\n let value = undefined;\n let orgKey = undefined;\n let orgValue = undefined;\n\n // identify(props, orgProps)\n if (isObject(args[0]) && isObject(args[1])) {\n key = args[0];\n orgKey = args[1];\n }\n // identify(props, orgKey, orgValue)\n else if (isObject(args[0]) && isString(args[1])) {\n key = args[0];\n orgKey = args[1];\n orgValue = args[2];\n }\n // identify(key, value, orgProps)\n else if (isString(args[0]) && isString(args[1]) && isObject(args[2])) {\n key = args[0];\n value = args[1];\n orgKey = args[2];\n }\n // identify(key, value, orgKey, orgValue)\n else {\n key = args[0];\n value = args[1];\n orgKey = args[2];\n orgValue = args[3];\n }\n\n const visitorProperties = this._dataSetter(this.visitorData, key, value);\n\n if (orgKey) this._dataSetter(this.orgData, orgKey, orgValue);\n\n return visitorProperties;\n }\n\n /**\n * Attach custom org data\n */\n identifyOrg(key, value) {\n return this._dataSetter(this.orgData, key, value);\n }\n\n /**\n * Generic method to call any tracker method\n */\n call(funcName) {\n if (isFunction(this[funcName])) {\n this[funcName].apply(this, Array.prototype.slice.call(arguments, 1));\n }\n }\n\n /**\n * Builds the correct tracking Url and performs an HTTP request\n */\n _push(options = {}) {\n const types = [\n ['visitorData', VISITOR_PROPERTY_PREFIX],\n ['eventData', ACTION_PROPERTY_PREFIX],\n ['sessionData', VISIT_PROPERTY_PREFIX],\n ['orgData', ORG_PROPERTY_PREFIX]\n ];\n\n let data = {};\n\n const endpoint = this.getEndpoint(options.endpoint);\n const lifecycle = options.lifecycle || LIFECYCLE_ACTION;\n\n // Load custom visitor params from url\n this.getVisitorUrlData();\n\n if (this.config(KEY_HIDE_CAMPAIGN)) {\n Woopra.hideCampaignData();\n }\n\n // push tracker config values\n this._dataSetter(data, this.getOptionParams());\n\n // push eventName if it exists\n if (options.eventName) {\n data.event = options.eventName;\n }\n\n // push close if no personalization\n if (!this.config(KEY_PERSONALIZATION)) {\n data.close = true;\n }\n\n data.timeout = isUndefined(options.timeout)\n ? this.config(KEY_IDLE_TIMEOUT)\n : options.timeout;\n\n const rawData = {};\n\n for (const [original, alias] of ACTION_PROPERTY_ALIASES) {\n if (options.eventData && options.eventData[original]) {\n rawData[alias] = options.eventData[original];\n }\n }\n\n this._dataSetter(data, rawData);\n\n for (let i = 0; i < types.length; i++) {\n const [key, prefix] = types[i];\n\n let newData = jsonStringifyObjectValues(\n prefixObjectKeys(\n options[key],\n prefix,\n prefix === ACTION_PROPERTY_PREFIX ? ACTION_PROPERTY_ALIASES : []\n )\n );\n\n if (\n prefix === ORG_PROPERTY_PREFIX &&\n newData[`${ORG_PROPERTY_PREFIX}id`]\n ) {\n newData.org = newData[`${ORG_PROPERTY_PREFIX}id`];\n delete newData[`${ORG_PROPERTY_PREFIX}id`];\n }\n\n this._dataSetter(data, newData);\n }\n\n if (this.config(KEY_CONTEXT)) {\n try {\n var contextData = JSON.stringify(this.config(KEY_CONTEXT));\n data[KEY_CONTEXT] = encodeURIComponent(contextData);\n } catch (e) {}\n }\n\n if (options.fullEventData) data = options.fullEventData;\n\n const dirty = Boolean(options.useBeacon || this.isUnloading);\n\n const meta = {\n [META_DIRTY]: dirty,\n [META_DURATION]: 0,\n [META_RETRACK]: Boolean(options.retrack),\n [META_SENT]: !dirty,\n [META_TIMESTAMP]: Date.now()\n };\n\n const action = new WoopraAction(this, data[IDPTNC], data, meta);\n\n const callback = isFunction(options.callback)\n ? () => options.callback(action)\n : noop;\n const beforeCallback = isFunction(options.beforeCallback)\n ? () => options.beforeCallback(action)\n : noop;\n const errorCallback = options.errorCallback || noop;\n\n // cancel previous lifecycle page event if a new one is tracked\n if (lifecycle === LIFECYCLE_PAGE) {\n this.pending.forEach((item) => {\n if (item.lifecycle === LIFECYCLE_PAGE && item.args.eventData[IDPTNC]) {\n this.cancelAction(item.args.eventData[IDPTNC]);\n }\n });\n }\n\n if (lifecycle === LIFECYCLE_PAGE || options.useBeacon || this.isUnloading) {\n this.pending.push({\n lifecycle,\n endpoint: options.endpoint,\n params: data,\n args: options,\n meta,\n callback,\n errorCallback\n });\n }\n\n if (lifecycle !== LIFECYCLE_PAGE && options.endpoint === ENDPOINT_TRACK) {\n this.lastAction = action;\n }\n\n if (this.isUnloading || (options.useBeacon && !options.queue)) {\n this.sendBeacons();\n } else if (!options.queue) {\n const queryString = Woopra.buildUrlParams(data);\n const scriptUrl = `${endpoint}?${queryString}`;\n\n const onSuccess = () => callCallback(callback, data.event);\n const onError = () => callCallback(errorCallback, data.event);\n\n Woopra.loadScript(scriptUrl, onSuccess, onError);\n }\n\n setTimeout(() => callCallback(beforeCallback, data.event));\n }\n\n /**\n * Send an event to tracking servr\n */\n track(name, options) {\n let eventData = {};\n let eventName = '';\n let hash;\n let callback;\n let beforeCallback;\n let errorCallback;\n let lastArg = arguments[arguments.length - 1];\n let lifecycle = LIFECYCLE_ACTION;\n let queue = false;\n let useBeacon = false;\n let timeout;\n let retrack;\n\n if (isFunction(lastArg)) callback = lastArg;\n else if (isObject(lastArg)) {\n if (isFunction(lastArg.callback)) callback = lastArg.callback;\n else if (isFunction(lastArg.onSuccess)) callback = lastArg.onSuccess;\n if (isFunction(lastArg.onBeforeSend))\n beforeCallback = lastArg.onBeforeSend;\n if (isFunction(lastArg.onError)) errorCallback = lastArg.onError;\n\n if (!isUndefined(lastArg.lifecycle)) lifecycle = lastArg.lifecycle;\n if (!isUndefined(lastArg.timeout)) timeout = lastArg.timeout;\n if (!isUndefined(lastArg.retrack)) retrack = lastArg.retrack;\n\n if (this.config(KEY_BEACONS)) {\n if (!isUndefined(lastArg.queue)) queue = Boolean(lastArg.queue);\n\n if (!isUndefined(lastArg.useBeacon)) {\n useBeacon = Boolean(lastArg.useBeacon);\n } else if (queue) useBeacon = true;\n } else {\n useBeacon = false;\n }\n }\n\n // Load campaign params (load first to allow overrides)\n if (!this.config(KEY_CAMPAIGN_ONCE) || !this.sentCampaign) {\n eventData = { ...eventData, ...Woopra.getCampaignData() };\n this.sentCampaign = true;\n }\n\n // Load query params mapping into Woopra event\n eventData = {\n ...eventData,\n ...Woopra.mapQueryParams(this.config(KEY_MAP_QUERY_PARAMS))\n };\n\n // Track default: pageview\n if (isUndefined(name) || name === callback) {\n eventName = ACTION_PV;\n }\n // Track custom events\n else if (isUndefined(options) || options === callback) {\n if (isString(name)) {\n eventName = name;\n }\n if (isObject(name)) {\n if (name.name && name.name === ACTION_PV) {\n eventName = ACTION_PV;\n }\n\n this._dataSetter(eventData, name);\n }\n }\n // Track custom events in format of name,object\n else {\n this._dataSetter(eventData, options);\n eventName = name;\n }\n\n eventData[IDPTNC] = randomString();\n\n // Add some defaults for pageview\n if (eventName === ACTION_PV) {\n eventData.url = eventData.url || this.getPageUrl();\n eventData.title = eventData.title || this.getPageTitle();\n eventData.domain = eventData.domain || this.getDomainName();\n eventData.uri = eventData.uri || this.getURI();\n eventData[SCROLL_DEPTH] = getScrollDepth();\n eventData.returning = isUndefined(eventData.returning)\n ? false\n : eventData.returning;\n\n if (!lastArg || !lastArg.lifecycle) lifecycle = LIFECYCLE_PAGE;\n\n if (this.config(KEY_SAVE_URL_HASH)) {\n hash = eventData.hash || this.getPageHash();\n if (hash !== '' && hash !== '#') {\n eventData.hash = hash;\n }\n }\n }\n\n const augmentAction = this.config(KEY_AUGMENT_ACTION);\n\n if (isFunction(augmentAction)) {\n augmentAction.call(this, eventName, eventData);\n }\n\n this._push({\n endpoint: ENDPOINT_TRACK,\n visitorData: this.visitorData,\n sessionData: this.sessionData,\n orgData: this.orgData,\n eventName,\n eventData,\n lifecycle,\n callback,\n beforeCallback,\n errorCallback,\n queue,\n useBeacon,\n retrack,\n timeout\n });\n\n this.startPing();\n\n return this;\n }\n\n update(idptnc, options, lastArg) {\n let callback;\n let beforeCallback;\n let errorCallback;\n let queue = false;\n let useBeacon = true;\n\n if (isFunction(lastArg)) callback = lastArg;\n else if (isObject(lastArg)) {\n if (isFunction(lastArg.callback)) callback = lastArg.callback;\n else if (isFunction(lastArg.onSuccess)) callback = lastArg.onSuccess;\n if (isFunction(lastArg.onBeforeSend))\n beforeCallback = lastArg.onBeforeSend;\n if (isFunction(lastArg.onError)) errorCallback = lastArg.onError;\n\n if (this.config(KEY_BEACONS)) {\n if (!isUndefined(lastArg.queue)) queue = Boolean(lastArg.queue);\n\n if (!isUndefined(lastArg.useBeacon)) {\n useBeacon = Boolean(lastArg.useBeacon);\n } else if (queue) useBeacon = true;\n } else {\n useBeacon = false;\n }\n }\n\n const eventData = {\n [IDPTNC]: idptnc,\n project: this.config(KEY_DOMAIN) || Woopra.getHostnameNoWww()\n };\n\n const rawData = {};\n\n for (const [original, alias] of ACTION_PROPERTY_ALIASES) {\n if (options && options[original]) {\n rawData[alias] = options[original];\n }\n }\n\n if (this.config(KEY_USE_COOKIES)) {\n rawData.cookie = this.getCookie() || this.cookie;\n }\n\n this._dataSetter(eventData, rawData);\n\n this._dataSetter(\n eventData,\n jsonStringifyObjectValues(\n prefixObjectKeys(\n options,\n ACTION_PROPERTY_PREFIX,\n ACTION_PROPERTY_ALIASES\n )\n )\n );\n\n this._push({\n endpoint: ENDPOINT_UPDATE,\n fullEventData: eventData,\n callback,\n beforeCallback,\n errorCallback,\n queue,\n useBeacon\n });\n\n return this;\n }\n\n cancelAction(idptnc) {\n let hasCancelled = false;\n\n if (this.lastAction?.id === idptnc) {\n this.lastAction = null;\n }\n\n this.pending = this.pending.map((item) => {\n if (item.params[IDPTNC] === idptnc) {\n hasCancelled = true;\n\n return {\n ...item,\n meta: {\n ...item.meta,\n [META_CANCELLED]: true,\n [META_DIRTY]: true,\n [META_DURATION]:\n item.lifecycle === LIFECYCLE_PAGE\n ? item.meta[META_DURATION] +\n (Date.now() - item.meta[META_TIMESTAMP])\n : item.meta[META_DURATION],\n [META_RETRACK]: false\n }\n };\n }\n\n return item;\n });\n\n if (hasCancelled) {\n this.sendBeacons();\n }\n }\n\n /**\n * Tracks a single form and then resubmits it\n */\n trackForm(eventName = 'Tracked Form', selector, options) {\n let els;\n const _options = isString(selector) ? options || {} : selector || {};\n\n const bindEl = (el, ev, props, opts) => {\n addEventListener(el, 'submit', (e) => {\n this.trackFormHandler(e, el, ev, _options);\n });\n };\n\n if (_options.elements) {\n els = _options.elements;\n } else {\n els = getElement(selector, _options);\n }\n\n // attach event if form was found\n if (els && els.length > 0) {\n for (let i in els) {\n bindEl(els[i], eventName, _options);\n }\n }\n }\n\n trackFormHandler(e, el, eventName, options = {}) {\n let trackFinished = false;\n\n if (!el.getAttribute(DATA_TRACKED_ATTRIBUTE)) {\n const useBeacon = Boolean(this.config(KEY_BEACONS));\n\n const properties = Woopra.serializeForm(el, options);\n\n if (isFunction(options.identify)) {\n const personData = options.identify(properties) || {};\n\n if (personData) {\n this.identify(personData);\n }\n }\n\n const onBeforeSend = isFunction(options.onBeforeSend)\n ? options.onBeforeSend\n : undefined;\n const onSuccess = isFunction(options.callback)\n ? () => options.callback(properties)\n : undefined;\n const onError = isFunction(options.onError) ? options.onError : undefined;\n\n if (!options.noSubmit) el.setAttribute(DATA_TRACKED_ATTRIBUTE, 1);\n\n if (options.noSubmit || useBeacon) {\n this.track(eventName, properties, {\n onBeforeSend,\n onError,\n onSuccess,\n useBeacon\n });\n } else {\n e.preventDefault();\n e.stopPropagation();\n\n // set timeout to resubmit (default 250ms)\n // so even if woopra does not reply it will still\n // submit the form\n const timer = setTimeout(() => {\n if (!trackFinished) {\n el.submit();\n }\n }, this.config(KEY_FORM_PAUSE));\n\n this.track(eventName, properties, {\n onBeforeSend,\n onSuccess() {\n clearTimeout(timer);\n\n if (onSuccess) onSuccess();\n\n if (!trackFinished) el.submit();\n\n trackFinished = true;\n },\n onError\n });\n }\n }\n }\n\n /**\n * Tracks clicks\n *\n * @param {String} eventName The name of the event to track\n * @param {String} selector The id of element to track\n * @param {Object} properties Any event properties to track with\n * @param {Object} options (Optional) Options object\n * @param {Array} options.elements Supports an array of elements (jQuery object)\n * @param {Boolean} options.noNav (Default: false) If true, will only perform the track event and let the click event bubble up\n */\n trackClick(eventName = 'Item Clicked', selector, properties, options = {}) {\n let els = [];\n\n const bindEl = (el, ev, props, opts) => {\n addEventListener(el, EVENT_CLICK, (e) => {\n this.trackClickHandler(e, el, ev, props, opts);\n });\n };\n\n /**\n * Support an array of elements\n */\n if (options.elements) {\n els = options.elements;\n } else {\n els = getElement(selector, options);\n }\n\n if (els) {\n for (let i = 0; i < els.length; i++) {\n bindEl(els[i], eventName, properties, options);\n }\n }\n }\n\n trackClickHandler(e, el, eventName, properties, options) {\n let trackFinished = false;\n\n if (!el.getAttribute(DATA_TRACKED_ATTRIBUTE)) {\n const useBeacon = Boolean(this.config(KEY_BEACONS));\n\n const onBeforeSend = isFunction(options.onBeforeSend)\n ? options.onBeforeSend\n : undefined;\n const onSuccess = isFunction(options.callback)\n ? () => options.callback(properties)\n : undefined;\n const onError = isFunction(options.onError) ? options.onError : undefined;\n\n if (!options.noNav) el.setAttribute(DATA_TRACKED_ATTRIBUTE, 1);\n\n if (options.noNav || useBeacon) {\n this.track(eventName, properties, {\n onBeforeSend,\n onError,\n onSuccess,\n useBeacon\n });\n } else {\n e.preventDefault();\n\n // set timeout to resubmit (default 250ms)\n // so even if woopra does not reply it will still\n // click the link\n const timer = setTimeout(() => {\n if (!trackFinished) {\n el.click();\n }\n }, this.config(KEY_CLICK_PAUSE));\n\n this.track(eventName, properties, {\n onBeforeSend,\n onSuccess() {\n clearTimeout(timer);\n\n if (onSuccess) onSuccess();\n\n if (!trackFinished) el.click();\n\n trackFinished = true;\n },\n onError\n });\n }\n }\n }\n\n startPing() {\n if (isUndefined(this.pingInterval)) {\n this.pingInterval = setInterval(() => {\n this.ping();\n }, this.config(KEY_PING_INTERVAL));\n }\n }\n\n stopPing() {\n if (!isUndefined(this.pingInterval)) {\n clearInterval(this.pingInterval);\n delete this.pingInterval;\n }\n }\n\n /**\n * Pings tracker with visitor info\n */\n ping() {\n if (this.config(KEY_PING) && this.idle < this.config(KEY_IDLE_TIMEOUT)) {\n // this._push({\n // endpoint: 'ping'\n // });\n } else {\n this.stopPing();\n }\n\n const now = Date.now();\n if (now - this.last_activity > this.config(KEY_IDLE_THRESHOLD)) {\n this.idle = now - this.last_activity;\n }\n\n return this;\n }\n\n /**\n * Pushes visitor data to server without sending an event\n */\n push(callback) {\n this._push({\n endpoint: ENDPOINT_IDENTIFY,\n visitorData: this.visitorData,\n sessionData: this.sessionData,\n orgData: this.orgData,\n callback\n });\n\n this.sendBeacons();\n\n return this;\n }\n\n _updateDurations(oldState, newState) {\n const now = Date.now();\n\n function updateDuration(item) {\n switch (newState) {\n case PAGE_LIFECYCLE_STATE_ACTIVE:\n case PAGE_LIFECYCLE_STATE_PASSIVE:\n if (now - item.meta[META_LEAVE] > item.params.timeout) {\n return {\n [META_EXPIRED]: true\n };\n }\n\n if (\n (newState === PAGE_LIFECYCLE_STATE_ACTIVE &&\n oldState === PAGE_LIFECYCLE_STATE_PASSIVE) ||\n (newState === PAGE_LIFECYCLE_STATE_PASSIVE &&\n oldState === PAGE_LIFECYCLE_STATE_ACTIVE)\n ) {\n return {};\n }\n\n return {\n [META_TIMESTAMP]: now\n };\n\n case PAGE_LIFECYCLE_STATE_HIDDEN:\n return {\n [META_DIRTY]:\n item.meta[META_DIRTY] || now - item.meta[META_TIMESTAMP] > 100,\n [META_DURATION]:\n item.meta[META_DURATION] + (now - item.meta[META_TIMESTAMP]),\n [META_LEAVE]: now\n };\n\n case PAGE_LIFECYCLE_STATE_TERMINATED:\n return {\n [META_DIRTY]:\n item.meta[META_DIRTY] || now - item.meta[META_LEAVE] > 100\n };\n\n default:\n return {};\n }\n }\n\n this.pending = this.pending.map((item) => {\n if (item.lifecycle !== LIFECYCLE_PAGE) return item;\n\n return {\n ...item,\n meta: {\n ...item.meta,\n ...updateDuration(item)\n }\n };\n });\n\n if (this.lastAction) {\n this.lastAction = {\n ...this.lastAction,\n meta: {\n ...this.lastAction.meta,\n ...updateDuration(this.lastAction)\n }\n };\n }\n }\n\n _processLifecycle(lifecycle) {\n const toRetrack = [];\n\n this.pending.forEach((item) => {\n if (\n item.meta[META_EXPIRED] &&\n !item.meta[META_CANCELLED] &&\n item.meta[META_RETRACK]\n ) {\n toRetrack.push({\n ...item.args,\n eventData: {\n ...(item.args.eventData || {}),\n [IDPTNC]: randomString(),\n returning: true\n }\n });\n }\n });\n\n toRetrack.forEach((item) => this._push(item));\n\n this.pending = this.pending.filter((item) => {\n if (item.meta[META_EXPIRED]) return false;\n\n if (item.meta[META_DIRTY]) {\n this.beaconQueue.push({\n lifecycle: item.lifecycle,\n endpoint: item.endpoint,\n params: {\n ...item.params\n },\n meta: {\n ...item.meta\n },\n successCallback: item.callback,\n errorCallback: item.errorCallback\n });\n }\n\n if (item.meta[META_CANCELLED]) return false;\n\n if (item.lifecycle === LIFECYCLE_PAGE && lifecycle !== LIFECYCLE_PAGE) {\n return true;\n }\n\n return false;\n });\n\n this.pending = this.pending.map((item) => ({\n ...item,\n meta: {\n ...item.meta,\n [META_DIRTY]: false,\n [META_SENT]: true\n }\n }));\n\n if (lifecycle === LIFECYCLE_PAGE && this.lastAction) {\n this.beaconQueue.push({\n lifecycle: LIFECYCLE_PAGE,\n endpoint: ENDPOINT_TRACK,\n params: {\n ...this.lastAction.params\n },\n meta: {\n ...this.lastAction.meta,\n [META_SENT]: true\n }\n });\n }\n\n return toRetrack.length > 0;\n }\n\n _drainBeaconQueue() {\n const useCookies = this.config(KEY_USE_COOKIES);\n\n function isEmptyBeaconParams(params) {\n const { [IDPTNC]: id, cookie, project, event, ...rest } = params;\n\n return Object.keys(rest).length > 0;\n }\n\n const idMap = this.beaconQueue.reduce((idMap, item) => {\n idMap[item.params[IDPTNC]] = [];\n\n return idMap;\n }, {});\n\n this.beaconQueue.forEach((item) => {\n idMap[item.params[IDPTNC]].push(item);\n });\n\n this.beaconQueue = [];\n\n const toSend = Object.keys(idMap)\n .map((id) => {\n const items = idMap[id];\n\n const data = {\n endpoint: undefined,\n params: {},\n onSuccess: [],\n onError: []\n };\n\n items.forEach((item) => {\n if (!data.endpoint) {\n if (item.endpoint === ENDPOINT_TRACK && item.meta[META_SENT]) {\n data.endpoint = ENDPOINT_UPDATE;\n } else {\n data.endpoint = item.endpoint;\n }\n }\n\n data.params.project = item.params.project;\n data.params.event = item.params.event;\n data.params[IDPTNC] = item.params[IDPTNC];\n\n if (useCookies) {\n data.params.cookie = this.getCookie() || this.cookie;\n }\n\n if (\n (item.lifecycle === LIFECYCLE_PAGE ||\n item.params[IDPTNC] === this.lastAction?.id) &&\n item.meta[META_DURATION] > 0\n ) {\n data.params.duration = item.meta[META_DURATION];\n }\n\n if (item.meta[SCROLL_DEPTH]) {\n data.params[`${ACTION_PROPERTY_PREFIX}${SCROLL_DEPTH}`] =\n Math.round(item.meta[SCROLL_DEPTH] * 10_000) / 10_000;\n }\n\n if (!item.meta[META_SENT]) {\n data.params = { ...data.params, ...item.params };\n\n if (isFunction(item.successCallback)) {\n data.onSuccess.push(item.successCallback);\n }\n\n if (isFunction(item.errorCallback)) {\n data.onError.push(item.errorCallback);\n }\n }\n });\n\n if (!data.params.project) {\n data.params.project =\n this.config(KEY_DOMAIN) || Woopra.getHostnameNoWww();\n }\n\n return data;\n })\n .filter((item) => isEmptyBeaconParams(item.params));\n\n const sendBeacon =\n navigator.sendBeacon && navigator.sendBeacon.bind(navigator);\n const useBeacon =\n Boolean(this.config(KEY_BEACONS)) && isFunction(sendBeacon);\n\n // TODO: fallback to sending via loadScript if sendBeacon fails\n // this probably requires a more stream-like approach to processing the queue\n if (toSend.length > 0) {\n if (useBeacon) {\n const payloads = [''];\n\n const lines = toSend.map(({ endpoint, params }) =>\n JSON.stringify({ endpoint, params })\n );\n\n // chunk beacons into < 64 KiB chunks\n lines.forEach((line) => {\n if (\n new Blob([`${payloads[payloads.length - 1]}${line}`]).size >= 65_000\n ) {\n payloads.push('');\n }\n payloads[payloads.length - 1] += `${line}\\n`;\n });\n\n payloads.forEach((payload, index) => {\n const formData = new FormData();\n\n formData.append('payload', payload.slice(0, -1));\n\n try {\n sendBeacon(this.getEndpoint('push'), formData);\n } catch (e) {\n console.error('Woopra: sendBeacon failed:', e);\n }\n });\n\n toSend.forEach((item) => {\n item.onSuccess.forEach((callback) =>\n callCallback(callback, item.params.event)\n );\n });\n } else {\n toSend.forEach((item) => {\n const endpoint = this.getEndpoint(item.endpoint);\n\n const queryString = Woopra.buildUrlParams({\n close: true,\n ...item.params\n });\n const scriptUrl = `${endpoint}?${queryString}`;\n\n const onSuccess = () =>\n item.onSuccess.forEach((callback) =>\n callCallback(callback, item.params.event)\n );\n const onError = () =>\n item.onError.forEach((callback) =>\n callCallback(callback, item.params.event)\n );\n\n Woopra.loadScript(scriptUrl, onSuccess, onError);\n });\n }\n }\n }\n\n sendBeacons(lifecycle = LIFECYCLE_ACTION) {\n this._processLifecycle(lifecycle);\n this._drainBeaconQueue();\n }\n\n /**\n * synchronous sleep\n */\n sleep() {\n // Why does this exist?\n }\n\n _touch(last_activity = Date.now()) {\n this.last_activity = last_activity;\n this.idle = 0;\n }\n\n // User Action tracking and event handlers\n\n /**\n * Clicks\n */\n\n /**\n * Measure when the user last moved their mouse to update idle state\n */\n moved(e, last_activity) {\n this._touch(last_activity);\n }\n\n onClick(e) {\n if (!this.config(KEY_CLICK_TRACKING)) return;\n\n const useBeacon = Boolean(this.config(KEY_BEACONS));\n\n const { target } = e;\n\n const clickTarget = findParentElement(\n target,\n this.config(KEY_CLICK_TRACKING_MATCHER_SELECTORS)\n );\n\n if (clickTarget) {\n const tagName = clickTarget.tagName.toLowerCase();\n\n // get attributes starting with data-woopra-\n const customProperties = clickTarget\n .getAttributeNames()\n .reduce((result, name) => {\n if (Woopra.startsWith(name, 'data-woopra-')) {\n result[name.slice(12)] = clickTarget.getAttribute(name);\n }\n\n return result;\n }, {});\n\n const eventName =\n clickTarget.getAttribute('data-woopra') || 'button click';\n\n const properties = {\n 'page url': this.getPageUrl(),\n 'page title': this.getPageTitle(),\n text:\n clickTarget.innerText || clickTarget.value || clickTarget.textContent,\n title: clickTarget.textContent,\n type: tagName === 'a' ? 'link' : clickTarget.type,\n tagname: tagName,\n classname: clickTarget.className,\n 'dom path': getDOMPath(clickTarget),\n url: clickTarget.href,\n 'pointer type': e.pointerType,\n ...customProperties\n };\n\n if (this.config(KEY_SAVE_URL_HASH)) {\n const hash = this.getPageHash();\n\n if (hash !== '' && hash !== '#') {\n properties['page hash'] = hash;\n }\n }\n\n this.track(eventName, properties, {\n useBeacon\n });\n }\n }\n\n onLink(e, link) {\n const useBeacon = Boolean(this.config(KEY_BEACONS));\n const downloadTypes = this.config(KEY_DOWNLOAD_EXTENSIONS);\n\n const downloadFileTypeRegexp = new RegExp(\n `(?:${downloadTypes.join('|')})($|\\&)`,\n 'i'\n );\n\n const isDownloadFileType = downloadFileTypeRegexp.test(link.pathname);\n\n if (this.config(KEY_DOWNLOAD_TRACKING) && isDownloadFileType) {\n fire(EVENT_DOWNLOAD, link.href);\n\n if (link.target !== TARGET_BLANK && Woopra.leftClick(e)) {\n link.setAttribute(DATA_TRACKED_ATTRIBUTE, 1);\n\n if (!useBeacon) {\n e.preventDefault();\n e.stopPropagation();\n\n setTimeout(() => {\n link.click();\n }, this.config(KEY_DOWNLOAD_PAUSE));\n }\n }\n }\n\n // Make sure\n // * outgoing tracking is enabled\n // * this URL does not match a download URL (doesn't end\n // in a binary file extension)\n // * not ignoring subdomains OR link hostname is not a partial\n // match of current hostname (to check for subdomains),\n // * hostname is not empty\n if (\n this.config(KEY_OUTGOING_TRACKING) &&\n !isDownloadFileType &&\n Woopra.isOutgoingLink(link.hostname)\n ) {\n fire(EVENT_OUTGOING, link.href);\n\n if (link.target !== TARGET_BLANK && Woopra.leftClick(e)) {\n link.setAttribute(DATA_TRACKED_ATTRIBUTE, 1);\n\n if (!useBeacon) {\n e.preventDefault();\n e.stopPropagation();\n\n setTimeout(() => {\n link.click();\n }, this.config(KEY_OUTGOING_PAUSE));\n }\n }\n }\n }\n\n downloaded(url) {\n const useBeacon = Boolean(this.config(KEY_BEACONS));\n\n this.track(\n EVENT_DOWNLOAD,\n {\n url\n },\n { useBeacon }\n );\n }\n\n outgoing(url) {\n const useBeacon = Boolean(this.config(KEY_BEACONS));\n\n this.track(\n EVENT_OUTGOING,\n {\n url\n },\n { useBeacon }\n );\n }\n\n onUnload() {\n if (!this.isUnloading) {\n this.isUnloading = true;\n this._updateDurations(\n PAGE_LIFECYCLE_STATE_HIDDEN,\n PAGE_LIFECYCLE_STATE_TERMINATED\n );\n this.sendBeacons(LIFECYCLE_PAGE);\n }\n }\n\n onPageStateChange(e) {\n const { newState, oldState } = e;\n\n switch (newState) {\n case PAGE_LIFECYCLE_STATE_ACTIVE:\n this._updateDurations(oldState, newState);\n this.sendBeacons();\n this._touch();\n break;\n\n case PAGE_LIFECYCLE_STATE_PASSIVE:\n this._updateDurations(oldState, newState);\n this.sendBeacons();\n break;\n\n case PAGE_LIFECYCLE_STATE_HIDDEN:\n this._updateDurations(oldState, newState);\n this.sendBeacons();\n break;\n\n case PAGE_LIFECYCLE_STATE_TERMINATED:\n this.onUnload();\n break;\n }\n }\n\n onScroll(e) {\n this._touch();\n\n const scrollDepth = getScrollDepth();\n\n const pages = this.pending.filter(\n (item) => item.lifecycle === LIFECYCLE_PAGE\n );\n\n pages.forEach((pv) => {\n pv.meta[SCROLL_DEPTH] = Math.min(\n 1,\n Math.max(scrollDepth, pv.meta[SCROLL_DEPTH] || 0)\n );\n });\n }\n\n /**\n * Event handler for decorating an element with a URL (for now only\n * anchor tags)\n */\n autoDecorate(elem) {\n const xdm = this.config(KEY_CROSS_DOMAIN);\n\n if (!xdm) return;\n\n const domains = isString(xdm) ? [xdm] : isArray(xdm) ? xdm : [];\n\n let canDecorate;\n\n for (let i = 0; i < domains.length; i++) {\n if (\n elem.hostname.indexOf(domains[i]) !== -1 &&\n elem.hostname !== Woopra.location('hostname')\n ) {\n canDecorate = true;\n break;\n }\n }\n\n if (canDecorate) {\n const decorated = this.decorate(elem);\n\n if (decorated) {\n elem.href = decorated;\n // bind an event handler on mouseup to remove the url\n }\n }\n }\n\n /**\n * Resets cookie\n */\n reset() {\n Woopra.docCookies.removeItem(\n this.config(KEY_COOKIE_NAME),\n this.config(KEY_COOKIE_PATH),\n this.config(KEY_COOKIE_DOMAIN)\n );\n this.cookie = null;\n this._setupCookie();\n }\n\n /**\n * Decorates a given URL with a __woopraid query param with value of\n * the current cookie\n */\n decorate(url) {\n let el;\n let query;\n let pathname;\n let host;\n\n if (isString(url)) {\n el = document.createElement('a');\n el.href = url;\n query = el.search ? '&' : '?';\n } else if (url && url.href) {\n el = url;\n }\n\n if (el) {\n query = el.search ? '&' : '?';\n pathname =\n el.pathname && el.pathname.charAt(0) === '/'\n ? el.pathname\n : `/${el.pathname}`;\n\n host =\n el.hostname +\n (el.port && el.port !== '' && el.port !== '80' && el.port !== '0'\n ? `:${el.port}`\n : '');\n\n return `${el.protocol}//${host}${pathname}${el.search}${query}${XDM_PARAM_NAME}=${this.cookie}${el.hash}`;\n }\n }\n\n /**\n * Undecorates a URL with __woopraid query param\n */\n undecorate(url) {\n const regex = new RegExp(`[?&]+(?:${XDM_PARAM_NAME})=([^&#]*)`, 'gi');\n let _url = url;\n\n if (url && url.href) {\n _url = url.href;\n }\n\n if (_url) {\n return _url.replace(regex, '');\n }\n }\n\n getPageUrl() {\n if (this.config(KEY_IGNORE_QUERY_URL)) {\n return Woopra.location('pathname');\n }\n return `${Woopra.location('pathname')}${Woopra.location('search')}`;\n }\n\n getPageHash() {\n return Woopra.location('hash');\n }\n\n getPageTitle() {\n return document.getElementsByTagName('title').length === 0\n ? ''\n : document.getElementsByTagName('title')[0].innerHTML;\n }\n\n getDomainName() {\n return Woopra.location('hostname');\n }\n\n getURI() {\n return Woopra.location('href');\n }\n\n /**\n * Retrieves a Woopra unique id from a URL's query param (__woopraid)\n *\n * @param {String} href The full URL to extract from\n */\n getUrlId(href = Woopra.location('href')) {\n const matches = href.match(URL_ID_REGEX);\n\n if (matches && matches[1]) {\n return matches[1];\n }\n }\n\n getOptionParams() {\n // default params\n const o = {\n project: this.config(KEY_DOMAIN) || Woopra.getHostnameNoWww(),\n instance: this.instanceName,\n meta: Woopra.docCookies.getItem('wooMeta') || '',\n screen: `${window.screen.width}x${window.screen.height}`,\n language:\n window.navigator.browserLanguage || window.navigator.language || '',\n app: this.config(KEY_APP),\n referer: document.referrer\n };\n\n if (!this.config(KEY_DOMAIN)) {\n o._warn = 'no_domain';\n\n if (Woopra.getHostnameNoWww() !== Woopra.getDomain()) {\n o._warn += ',domain_mismatch';\n }\n }\n\n // set cookie if configured\n if (this.config(KEY_USE_COOKIES)) {\n o.cookie = this.getCookie() || this.cookie;\n }\n\n // set ip if configured\n if (this.config(KEY_IP)) {\n o.ip = this.config(KEY_IP);\n }\n\n return o;\n }\n\n /**\n * Stop ping timers and cleanup any globals. Shouldn't really\n * be needed by clients.\n */\n dispose() {\n this.stopPing();\n\n for (let id in this.__l) {\n if (this.__l.hasOwnProperty(id)) {\n removeHandler(id, this.instanceName);\n }\n }\n this.__l = null;\n\n // cleanup global\n if (!isUndefined(window[this.instanceName])) {\n try {\n delete window[this.instanceName];\n } catch (e) {\n window[this.instanceName] = undefined;\n }\n }\n }\n}\n","import { isFunction, isUndefined } from 'lodash-es';\nimport attachGlobalEvents from './lib/global-events';\nimport Tracker from './tracker';\nimport Woopra from './woopra';\n\nif (!window.WoopraTracker) attachGlobalEvents();\n\nwindow.WoopraTracker = Tracker;\nwindow.WoopraLoadScript = Woopra.loadScript;\n\nif (!isUndefined(window.exports)) {\n Woopra.Tracker = Tracker;\n window.exports.Woopra = Woopra;\n\n if (isFunction(window.woopraLoaded)) {\n window.woopraLoaded();\n window.woopraLoaded = null;\n }\n}\n\n// Initialize instances & preloaded settings/events\nvar _queue = window.__woo || window._w;\nif (!isUndefined(_queue)) {\n for (var name in _queue) {\n if (_queue.hasOwnProperty(name)) {\n var instance = new Tracker(name);\n instance.init();\n\n // DO NOT REMOVE\n // compatibility with old tracker and chat\n if (isUndefined(window.woopraTracker)) {\n window.woopraTracker = instance;\n }\n }\n }\n}\n"],"names":["isUndefined","value","undefined","freeGlobal","global","Object","freeSelf","self","root","Function","Symbol","objectProto","prototype","hasOwnProperty","nativeObjectToString","toString","symToStringTag","toStringTag","nullTag","undefinedTag","baseGetTag","isOwn","call","tag","unmasked","e","result","getRawTag","objectToString","isObject","type","asyncTag","funcTag","genTag","proxyTag","isFunction","now","Date","reWhitespace","reTrimStart","baseTrim","string","slice","index","length","test","charAt","trimmedEndIndex","replace","isObjectLike","symbolTag","isSymbol","NAN","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","parseInt","toNumber","other","valueOf","isBinary","FUNC_ERROR_TEXT","nativeMax","Math","max","nativeMin","min","debounce","func","wait","options","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","TypeError","invokeFunc","time","args","thisArg","apply","shouldInvoke","timeSinceLastCall","timerExpired","trailingEdge","setTimeout","timeWaiting","remainingWait","debounced","isInvoking","arguments","this","leadingEdge","clearTimeout","cancel","flush","ENDPOINTS","_ENDPOINTS","XDM_PARAM_NAME","CAMPAIGN_KEYS","SECOND_LEVEL_TLDS","RANDOM_STRING_CHARS","URL_ID_REGEX","RegExp","LIFECYCLE_ACTION","LIFECYCLE_PAGE","SCROLL_DEPTH","ACTION_PV","IDPTNC","TARGET_BLANK","DATA_TRACKED_ATTRIBUTE","ACTION_PROPERTY_PREFIX","ORG_PROPERTY_PREFIX","ENDPOINT_TRACK","ENDPOINT_UPDATE","PAGE_LIFECYCLE_STATE_ACTIVE","PAGE_LIFECYCLE_STATE_PASSIVE","PAGE_LIFECYCLE_STATE_HIDDEN","PAGE_LIFECYCLE_STATE_FROZEN","PAGE_LIFECYCLE_STATE_TERMINATED","EVENT_BEFOREUNLOAD","EVENT_BLUR","EVENT_CLICK","EVENT_DOWNLOAD","EVENT_FOCUS","EVENT_FREEZE","EVENT_LINK_CLICK","EVENT_MOUSEMOVE","EVENT_OUTGOING","EVENT_PAGEHIDE","EVENT_PAGESHOW","EVENT_RESUME","EVENT_SCROLL","EVENT_STATECHANGE","EVENT_UNLOAD","EVENT_VISIBILITYCHANGE","KEY_APP","KEY_APPIER_APP_ID","KEY_AUTO_DECORATE","KEY_BEACONS","KEY_CAMPAIGN_ONCE","KEY_CLICK_TRACKING_MATCHER_SELECTORS","KEY_CLICK_PAUSE","KEY_CONTEXT","KEY_COOKIE_DOMAIN","KEY_COOKIE_EXPIRE","KEY_COOKIE_NAME","KEY_COOKIE_PATH","KEY_COOKIE_SECURE","KEY_CROSS_DOMAIN","KEY_DOMAIN","KEY_DOWNLOAD_EXTENSIONS","KEY_DOWNLOAD_PAUSE","KEY_DOWNLOAD_TRACKING","KEY_FORM_PAUSE","KEY_HIDE_CAMPAIGN","KEY_HIDE_XDM_DATA","KEY_IDLE_THRESHOLD","KEY_IDLE_TIMEOUT","KEY_IGNORE_QUERY_URL","KEY_MAP_QUERY_PARAMS","KEY_OUTGOING_IGNORE_SUBDOMAIN","KEY_OUTGOING_PAUSE","KEY_OUTGOING_TRACKING","KEY_PERSONALIZATION","KEY_PING","KEY_PING_INTERVAL","KEY_PROTOCOL","KEY_REGION","KEY_SAVE_URL_HASH","KEY_THIRD_PARTY","KEY_USE_COOKIES","META_CANCELLED","META_DIRTY","META_DURATION","META_EXPIRED","META_LEAVE","META_RETRACK","META_SENT","META_TIMESTAMP","ACTION_PROPERTY_ALIASES","DEFAULT_DOWNLOAD_EXTENSIONS","ELEMENT_MATCHER_LINK","ELEMENT_MATCHER_CLICK","globals","_KEY_AUTO_DECORATE$KE","handlers","removeHandler","id","instance","addEventListener","element","callback","on","parent","event","instanceName","__l","push","fire","handler","_l","_event","i","Array","EventTargetShim","_registry","_proto","listener","opts","_getRegistry","removeEventListener","typeRegistry","handlerIndex","indexOf","splice","dispatchEvent","evt","target","freeze","forEach","StateChangeEvent","initDict","newState","oldState","originalEvent","IS_SAFARI","safari","pushNotification","SUPPORTS_PAGE_TRANSITION_EVENTS","EVENTS","onbeforeunload","preventDefault","returnValue","LEGAL_STATE_TRANSITIONS","map","arr","reduce","acc","val","idx","getCurrentState","document","visibilityState","hasFocus","PageLifecycle$1","_EventTargetShim","PageLifecycle","_this","state","_state","_unsavedChanges","_handleEvents","bind","_assertThisInitialized","_safariBeforeUnloadTimeout","defaultPrevented","_dispatchChangesIfNeeded","_proto2","addUnsavedChanges","removeUnsavedChanges","idIndex","path","order","oldIndex","newIndex","keys","getLegalStateTransitionPath","persisted","key","get","wasDiscarded","isArray","stringTag","isString","transform","getPrototype","getPrototypeOf","arg","objectTag","funcProto","funcToString","objectCtorString","isPlainObject","proto","Ctor","constructor","nativeIsFinite","isFinite","randomString","s","rnum","floor","random","substring","isLeftClick","window","_isUndefined","which","button","metaKey","altKey","ctrlKey","shiftKey","getElement","selector","_options","_isString","el","querySelectorAll","getElementById","substr","getElementsByClassName","prefixObjectKeys","object","prefix","blacklist","obj","isBlacklisted","jsonStringifyObjectValues","_isPlainObject","_isArray","JSON","stringify","_unused","getScrollDepth","scrollHeight","body","scrollDepth","scrollY","innerHeight","callCallback","action","console","error","stack","matchesElement","matcher","some","sel","matches","findParentElement","elem","tagName","parentNode","getDOMPath","count","childNodes","siblingElement","nodeName","toLowerCase","hasAttribute","unshift","join","onClick","srcElement","getAttribute","onMouseDown","onMouseMove","onScroll","_throttle","onPageStateChange","noop","WoopraAction","woopra","params","meta","update","lastArg","_extends","$action","cancelAction","baseClamp","number","lower","upper","INFINITY","symbolProto","symbolToString","baseToString","array","iteratee","arrayMap","MAX_INTEGER","toInteger","toFinite","remainder","hasItem","sKey","encodeURIComponent","cookie","decodeURIComponent","aKeys","split","nLen","nIdx","sPath","sDomain","sValue","vEnd","bSecure","sExpires","Number","Infinity","String","toUTCString","TYPE_BUTTON","TYPE_SUBMIT","TYPE_RESET","removeScript","script","removeChild","Woopra","getHostname","location","docCookies","property","historyReplaceState","history","replaceState","data","title","url","hideUrlParams","regex","href","getUrlParams","vars","m","buildUrlParams","p","getCustomData","method","getDomain","hostname","domain","lastIndexOf","getHostnameNoWww","isOutgoingLink","targetHostname","currentHostname","currentDomain","startsWith","hideCrossDomainId","mapQueryParams","mapping","redirect","link","getCampaignData","campaign","hideCampaignData","leftClick","loadScript","errorCallback","_noop","createElement","async","onreadystatechange","onload","onerror","readyState","src","appendChild","head","serializeForm","form","exclude","elements","name","checked","j","selected","_on","_fire","attachEvent","position","endsWith","end","Tracker","_this$options","visitorData","sessionData","orgData","_isFunction","navigator","sendBeacon","setDate","getDate","idle","last_activity","loaded","dirtyCookie","sentCampaign","version","pending","beaconQueue","lastAction","init","_processQueue","_setupCookie","_bindEvents","config","_wpt","__woo","_w","_e","events","url_id","getUrlId","getCookie","setItem","_this2","downloaded","onLink","l","moved","outgoing","autoDecorate","_dataSetter","dataStore","_isObject","getVisitorUrlData","identify","getItem","getProtocol","protocol","getEndpoint","Error","thirdPartyPath","region","endpoint","visit","orgKey","orgValue","visitorProperties","identifyOrg","funcName","_push","_meta","_this3","types","lifecycle","getOptionParams","eventName","close","timeout","_step","rawData","_iterator","_createForOfIteratorHelperLoose","done","_step$value","original","alias","eventData","_types$i","newData","org","contextData","fullEventData","dirty","Boolean","useBeacon","isUnloading","retrack","beforeCallback","item","queue","sendBeacons","scriptUrl","track","hash","onSuccess","onBeforeSend","onError","getPageUrl","getPageTitle","getDomainName","uri","getURI","returning","getPageHash","augmentAction","startPing","idptnc","_eventData","_step2","project","_iterator2","_step2$value","_this$lastAction","hasCancelled","_extends2","trackForm","els","_this4","bindEl","ev","props","trackFormHandler","trackFinished","properties","personData","noSubmit","setAttribute","stopPropagation","timer","submit","trackClick","_this5","trackClickHandler","noNav","click","_this6","pingInterval","setInterval","ping","stopPing","clearInterval","_updateDurations","updateDuration","_ref2","_ref3","_ref4","_ref","_processLifecycle","_extends5","_this7","toRetrack","_extends3","filter","successCallback","_extends4","_drainBeaconQueue","_this8","useCookies","isEmptyBeaconParams","rest","_objectWithoutPropertiesLoose","_toPropertyKey","idMap","toSend","items","_this8$lastAction","duration","round","payloads","_ref5","line","Blob","size","payload","formData","FormData","append","sleep","_touch","clickTarget","customProperties","getAttributeNames","text","innerText","textContent","tagname","classname","className","pointerType","downloadTypes","isDownloadFileType","pathname","onUnload","pv","xdm","canDecorate","domains","decorated","decorate","reset","removeItem","query","host","search","port","undecorate","_url","getElementsByTagName","innerHTML","match","o","screen","width","height","language","browserLanguage","app","referer","referrer","_warn","ip","dispose","WoopraTracker","WoopraLoadScript","exports","woopraLoaded","_queue","woopraTracker"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,21,22,23,24,25,26,29,31,32,33,34,35,36,41,42]} \ No newline at end of file diff --git a/dist/wpt.js b/dist/wpt.js index 78f7ff5..82fd3e0 100644 --- a/dist/wpt.js +++ b/dist/wpt.js @@ -30,37 +30,32 @@ /** Detect free variable `global` from Node.js. */ var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; - var freeGlobal$1 = freeGlobal; /** Detect free variable `self`. */ - var freeSelf = typeof self == 'object' && self && self.Object === Object && self; - /** Used as a reference to the global object. */ - var root = freeGlobal$1 || freeSelf || Function('return this')(); - var root$1 = root; + /** Used as a reference to the global object. */ + var root = freeGlobal || freeSelf || Function('return this')(); /** Built-in value references. */ - - var Symbol$1 = root$1.Symbol; - var Symbol$2 = Symbol$1; + var Symbol$1 = root.Symbol; /** Used for built-in method references. */ - var objectProto$2 = Object.prototype; - /** Used to check objects for own properties. */ + /** Used to check objects for own properties. */ var hasOwnProperty$1 = objectProto$2.hasOwnProperty; + /** * Used to resolve the * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) * of values. */ - var nativeObjectToString$1 = objectProto$2.toString; + /** Built-in value references. */ + var symToStringTag$1 = Symbol$1 ? Symbol$1.toStringTag : undefined; - var symToStringTag$1 = Symbol$2 ? Symbol$2.toStringTag : undefined; /** * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. * @@ -68,18 +63,14 @@ * @param {*} value The value to query. * @returns {string} Returns the raw `toStringTag`. */ - function getRawTag(value) { var isOwn = hasOwnProperty$1.call(value, symToStringTag$1), - tag = value[symToStringTag$1]; - + tag = value[symToStringTag$1]; try { value[symToStringTag$1] = undefined; var unmasked = true; } catch (e) {} - var result = nativeObjectToString$1.call(value); - if (unmasked) { if (isOwn) { value[symToStringTag$1] = tag; @@ -87,19 +78,19 @@ delete value[symToStringTag$1]; } } - return result; } /** Used for built-in method references. */ var objectProto$1 = Object.prototype; + /** * Used to resolve the * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) * of values. */ - var nativeObjectToString = objectProto$1.toString; + /** * Converts `value` to a string using `Object.prototype.toString`. * @@ -107,18 +98,17 @@ * @param {*} value The value to convert. * @returns {string} Returns the converted string. */ - function objectToString(value) { return nativeObjectToString.call(value); } /** `Object#toString` result references. */ - var nullTag = '[object Null]', - undefinedTag = '[object Undefined]'; + undefinedTag = '[object Undefined]'; + /** Built-in value references. */ + var symToStringTag = Symbol$1 ? Symbol$1.toStringTag : undefined; - var symToStringTag = Symbol$2 ? Symbol$2.toStringTag : undefined; /** * The base implementation of `getTag` without fallbacks for buggy environments. * @@ -126,12 +116,10 @@ * @param {*} value The value to query. * @returns {string} Returns the `toStringTag`. */ - function baseGetTag(value) { if (value == null) { return value === undefined ? undefinedTag : nullTag; } - return symToStringTag && symToStringTag in Object(value) ? getRawTag(value) : objectToString(value); } @@ -166,11 +154,11 @@ } /** `Object#toString` result references. */ - var asyncTag = '[object AsyncFunction]', - funcTag = '[object Function]', - genTag = '[object GeneratorFunction]', - proxyTag = '[object Proxy]'; + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + proxyTag = '[object Proxy]'; + /** * Checks if `value` is classified as a `Function` object. * @@ -188,14 +176,12 @@ * _.isFunction(/abc/); * // => false */ - function isFunction(value) { if (!isObject(value)) { return false; - } // The use of `Object#toString` avoids issues with the `typeof` operator + } + // The use of `Object#toString` avoids issues with the `typeof` operator // in Safari 9 which returns 'object' for typed arrays and other constructors. - - var tag = baseGetTag(value); return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; } @@ -216,15 +202,13 @@ * }, _.now()); * // => Logs the number of milliseconds it took for the deferred invocation. */ - var now = function now() { - return root$1.Date.now(); + return root.Date.now(); }; - var now$1 = now; - /** Used to match a single whitespace character. */ var reWhitespace = /\s/; + /** * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace * character of `string`. @@ -233,18 +217,15 @@ * @param {string} string The string to inspect. * @returns {number} Returns the index of the last non-whitespace character. */ - function trimmedEndIndex(string) { var index = string.length; - while (index-- && reWhitespace.test(string.charAt(index))) {} - return index; } /** Used to match leading whitespace. */ - var reTrimStart = /^\s+/; + /** * The base implementation of `_.trim`. * @@ -252,7 +233,6 @@ * @param {string} string The string to trim. * @returns {string} Returns the trimmed string. */ - function baseTrim(string) { return string ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '') : string; } @@ -286,8 +266,8 @@ } /** `Object#toString` result references. */ - var symbolTag = '[object Symbol]'; + /** * Checks if `value` is classified as a `Symbol` primitive or object. * @@ -305,26 +285,25 @@ * _.isSymbol('abc'); * // => false */ - function isSymbol(value) { return typeof value == 'symbol' || isObjectLike(value) && baseGetTag(value) == symbolTag; } /** Used as references for various `Number` constants. */ - var NAN = 0 / 0; - /** Used to detect bad signed hexadecimal string values. */ + /** Used to detect bad signed hexadecimal string values. */ var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; - /** Used to detect binary string values. */ + /** Used to detect binary string values. */ var reIsBinary = /^0b[01]+$/i; - /** Used to detect octal string values. */ + /** Used to detect octal string values. */ var reIsOctal = /^0o[0-7]+$/i; - /** Built-in method references without a dependency on `root`. */ + /** Built-in method references without a dependency on `root`. */ var freeParseInt = parseInt; + /** * Converts `value` to a number. * @@ -348,37 +327,32 @@ * _.toNumber('3.2'); * // => 3.2 */ - function toNumber(value) { if (typeof value == 'number') { return value; } - if (isSymbol(value)) { return NAN; } - if (isObject(value)) { var other = typeof value.valueOf == 'function' ? value.valueOf() : value; value = isObject(other) ? other + '' : other; } - if (typeof value != 'string') { return value === 0 ? value : +value; } - value = baseTrim(value); var isBinary = reIsBinary.test(value); return isBinary || reIsOctal.test(value) ? freeParseInt(value.slice(2), isBinary ? 2 : 8) : reIsBadHex.test(value) ? NAN : +value; } /** Error message constants. */ - var FUNC_ERROR_TEXT$1 = 'Expected a function'; - /* Built-in method references for those with the same name as other `lodash` methods. */ + /* Built-in method references for those with the same name as other `lodash` methods. */ var nativeMax = Math.max, - nativeMin = Math.min; + nativeMin = Math.min; + /** * Creates a debounced function that delays invoking `func` until after `wait` * milliseconds have elapsed since the last time the debounced function was @@ -433,114 +407,97 @@ * // Cancel the trailing debounced invocation. * jQuery(window).on('popstate', debounced.cancel); */ - function debounce(func, wait, options) { var lastArgs, - lastThis, - maxWait, - result, - timerId, - lastCallTime, - lastInvokeTime = 0, - leading = false, - maxing = false, - trailing = true; - + lastThis, + maxWait, + result, + timerId, + lastCallTime, + lastInvokeTime = 0, + leading = false, + maxing = false, + trailing = true; if (typeof func != 'function') { throw new TypeError(FUNC_ERROR_TEXT$1); } - wait = toNumber(wait) || 0; - if (isObject(options)) { leading = !!options.leading; maxing = 'maxWait' in options; maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait; trailing = 'trailing' in options ? !!options.trailing : trailing; } - function invokeFunc(time) { var args = lastArgs, - thisArg = lastThis; + thisArg = lastThis; lastArgs = lastThis = undefined; lastInvokeTime = time; result = func.apply(thisArg, args); return result; } - function leadingEdge(time) { // Reset any `maxWait` timer. - lastInvokeTime = time; // Start the timer for the trailing edge. - - timerId = setTimeout(timerExpired, wait); // Invoke the leading edge. - + lastInvokeTime = time; + // Start the timer for the trailing edge. + timerId = setTimeout(timerExpired, wait); + // Invoke the leading edge. return leading ? invokeFunc(time) : result; } - function remainingWait(time) { var timeSinceLastCall = time - lastCallTime, - timeSinceLastInvoke = time - lastInvokeTime, - timeWaiting = wait - timeSinceLastCall; + timeSinceLastInvoke = time - lastInvokeTime, + timeWaiting = wait - timeSinceLastCall; return maxing ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke) : timeWaiting; } - function shouldInvoke(time) { var timeSinceLastCall = time - lastCallTime, - timeSinceLastInvoke = time - lastInvokeTime; // Either this is the first call, activity has stopped and we're at the + timeSinceLastInvoke = time - lastInvokeTime; + + // Either this is the first call, activity has stopped and we're at the // trailing edge, the system time has gone backwards and we're treating // it as the trailing edge, or we've hit the `maxWait` limit. - return lastCallTime === undefined || timeSinceLastCall >= wait || timeSinceLastCall < 0 || maxing && timeSinceLastInvoke >= maxWait; } - function timerExpired() { - var time = now$1(); - + var time = now(); if (shouldInvoke(time)) { return trailingEdge(time); - } // Restart the timer. - - + } + // Restart the timer. timerId = setTimeout(timerExpired, remainingWait(time)); } - function trailingEdge(time) { - timerId = undefined; // Only invoke if we have `lastArgs` which means `func` has been - // debounced at least once. + timerId = undefined; + // Only invoke if we have `lastArgs` which means `func` has been + // debounced at least once. if (trailing && lastArgs) { return invokeFunc(time); } - lastArgs = lastThis = undefined; return result; } - function cancel() { if (timerId !== undefined) { clearTimeout(timerId); } - lastInvokeTime = 0; lastArgs = lastCallTime = lastThis = timerId = undefined; } - function flush() { - return timerId === undefined ? result : trailingEdge(now$1()); + return timerId === undefined ? result : trailingEdge(now()); } - function debounced() { - var time = now$1(), - isInvoking = shouldInvoke(time); + var time = now(), + isInvoking = shouldInvoke(time); lastArgs = arguments; lastThis = this; lastCallTime = time; - if (isInvoking) { if (timerId === undefined) { return leadingEdge(lastCallTime); } - if (maxing) { // Handle invocations in a tight loop. clearTimeout(timerId); @@ -548,22 +505,19 @@ return invokeFunc(lastCallTime); } } - if (timerId === undefined) { timerId = setTimeout(timerExpired, wait); } - return result; } - debounced.cancel = cancel; debounced.flush = flush; return debounced; } /** Error message constants. */ - var FUNC_ERROR_TEXT = 'Expected a function'; + /** * Creates a throttled function that only invokes `func` at most once per * every `wait` milliseconds. The throttled function comes with a `cancel` @@ -608,20 +562,16 @@ * // Cancel the trailing throttled invocation. * jQuery(window).on('popstate', throttled.cancel); */ - function throttle(func, wait, options) { var leading = true, - trailing = true; - + trailing = true; if (typeof func != 'function') { throw new TypeError(FUNC_ERROR_TEXT); } - if (isObject(options)) { leading = 'leading' in options ? !!options.leading : leading; trailing = 'trailing' in options ? !!options.trailing : trailing; } - return debounce(func, wait, { 'leading': leading, 'maxWait': wait, @@ -630,7 +580,6 @@ } var _ENDPOINTS; - var VERSION = 11; var REGION_EU = 'eu'; var REGION_KR = 'kr'; @@ -745,33 +694,26 @@ } function on(parent, event, callback) { var id = parent.instanceName; - if (!handlers[event]) { handlers[event] = {}; } - handlers[event][id] = parent; - if (parent.__l) { if (!parent.__l[event]) { parent.__l[event] = []; } - parent.__l[event].push(callback); } } function fire$1(event) { var handler; var _event = handlers[event]; - var _l; - if (_event) { for (var id in _event) { if (_event.hasOwnProperty(id)) { handler = _event[id]; _l = handler && handler.__l; - if (_l && _l[event]) { for (var i = 0; i < _l[event].length; i++) { _l[event][i].apply(this, Array.prototype.slice.call(arguments, 1)); @@ -782,79 +724,81 @@ } } + function _toPrimitive(t, r) { + if ("object" != typeof t || !t) return t; + var e = t[Symbol.toPrimitive]; + if (void 0 !== e) { + var i = e.call(t, r || "default"); + if ("object" != typeof i) return i; + throw new TypeError("@@toPrimitive must return a primitive value."); + } + return ("string" === r ? String : Number)(t); + } + function _toPropertyKey(t) { + var i = _toPrimitive(t, "string"); + return "symbol" == typeof i ? i : String(i); + } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; - Object.defineProperty(target, descriptor.key, descriptor); + Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } } - function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); + Object.defineProperty(Constructor, "prototype", { + writable: false + }); return Constructor; } - function _extends() { - _extends = Object.assign || function (target) { + _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; - for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } - return target; }; - return _extends.apply(this, arguments); } - function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; - _setPrototypeOf(subClass, superClass); } - function _setPrototypeOf(o, p) { - _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; - return _setPrototypeOf(o, p); } - function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; - for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } - return target; } - function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } - return self; } - function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); @@ -863,19 +807,14 @@ if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } - function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; - for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; - return arr2; } - function _createForOfIteratorHelperLoose(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (it) return (it = it.call(o)).next.bind(it); - if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; @@ -889,29 +828,9 @@ }; }; } - throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } - function _toPrimitive(input, hint) { - if (typeof input !== "object" || input === null) return input; - var prim = input[Symbol.toPrimitive]; - - if (prim !== undefined) { - var res = prim.call(input, hint || "default"); - if (typeof res !== "object") return res; - throw new TypeError("@@toPrimitive must return a primitive value."); - } - - return (hint === "string" ? String : Number)(input); - } - - function _toPropertyKey(arg) { - var key = _toPrimitive(arg, "string"); - - return typeof key === "symbol" ? key : String(key); - } - var EventTargetShim = /*#__PURE__*/function () { /** * Creates the event registry. @@ -919,6 +838,7 @@ function EventTargetShim() { this._registry = {}; } + /** * @param {string} type * @param {EventListener|function(!Event):(boolean|undefined)} listener @@ -926,117 +846,106 @@ * @return {undefined} * @see https://dom.spec.whatwg.org/#dom-eventtarget-addeventlistener */ - - var _proto = EventTargetShim.prototype; - _proto.addEventListener = function addEventListener(type, listener, opts) { - this._getRegistry(type).push(listener); } + /** * @param {string} type * @param {EventListener|function(!Event):(boolean|undefined)} listener * @param {(boolean|!EventListenerOptions)=} opts * @return {undefined} * @see https://dom.spec.whatwg.org/#dom-eventtarget-removeeventlistener - */ - ; - + */; _proto.removeEventListener = function removeEventListener(type, listener, opts) { - var typeRegistry = this._getRegistry(type); - var handlerIndex = typeRegistry.indexOf(listener); - if (handlerIndex > -1) { typeRegistry.splice(handlerIndex, 1); } } + /** * @param {!Event|!EventShim} evt * @return {boolean} * @see https://dom.spec.whatwg.org/#dom-eventtarget-dispatchevent - */ - ; - + */; _proto.dispatchEvent = function dispatchEvent(evt) { // Set the target then freeze the event object to prevent modification. evt.target = this; Object.freeze(evt); - this._getRegistry(evt.type).forEach(function (listener) { return listener(evt); }); - return true; } + /** * Returns an array of handlers associated with the passed event type. * If no handlers have been registered, an empty array is returned. * @private * @param {string} type The event type. * @return {!Array} An array of handler functions. - */ - ; - + */; _proto._getRegistry = function _getRegistry(type) { return this._registry[type] = this._registry[type] || []; }; - return EventTargetShim; }(); - var StateChangeEvent = function StateChangeEvent(type, initDict) { this.type = type; this.newState = initDict.newState; this.oldState = initDict.oldState; this.originalEvent = initDict.originalEvent; }; // Detect Safari to work around Safari-specific bugs. - - var IS_SAFARI = typeof safari === 'object' && safari.pushNotification; var SUPPORTS_PAGE_TRANSITION_EVENTS = ('onpageshow' in self); - var EVENTS = [EVENT_FOCUS, EVENT_BLUR, EVENT_VISIBILITYCHANGE, EVENT_FREEZE, EVENT_RESUME, EVENT_PAGESHOW, // IE9-10 do not support the pagehide event, so we fall back to unload + var EVENTS = [EVENT_FOCUS, EVENT_BLUR, EVENT_VISIBILITYCHANGE, EVENT_FREEZE, EVENT_RESUME, EVENT_PAGESHOW, + // IE9-10 do not support the pagehide event, so we fall back to unload // Note: unload *MUST ONLY* be added conditionally, otherwise it will // prevent page navigation caching (a.k.a bfcache). SUPPORTS_PAGE_TRANSITION_EVENTS ? EVENT_PAGEHIDE : EVENT_UNLOAD]; + /** * @param {!Event} evt * @return {string} */ - var onbeforeunload = function onbeforeunload(evt) { evt.preventDefault(); return evt.returnValue = 'Are you sure?'; }; + /** * Converts an array of states into an object where the state is the key * and the value is the index. * @param {!Array} arr * @return {!Object} */ - - var toIndexedObject = function toIndexedObject(arr) { return arr.reduce(function (acc, val, idx) { acc[val] = idx; return acc; }, {}); }; + /** * @type {!Array} */ - - - var LEGAL_STATE_TRANSITIONS = [// The normal unload process (bfcache process is addressed above). - [PAGE_LIFECYCLE_STATE_ACTIVE, PAGE_LIFECYCLE_STATE_PASSIVE, PAGE_LIFECYCLE_STATE_HIDDEN, PAGE_LIFECYCLE_STATE_TERMINATED], // An active page transitioning to frozen, + var LEGAL_STATE_TRANSITIONS = [ + // The normal unload process (bfcache process is addressed above). + [PAGE_LIFECYCLE_STATE_ACTIVE, PAGE_LIFECYCLE_STATE_PASSIVE, PAGE_LIFECYCLE_STATE_HIDDEN, PAGE_LIFECYCLE_STATE_TERMINATED], + // An active page transitioning to frozen, // or an unloading page going into the bfcache. - [PAGE_LIFECYCLE_STATE_ACTIVE, PAGE_LIFECYCLE_STATE_PASSIVE, PAGE_LIFECYCLE_STATE_HIDDEN, PAGE_LIFECYCLE_STATE_FROZEN], // A hidden page transitioning back to active. - [PAGE_LIFECYCLE_STATE_HIDDEN, PAGE_LIFECYCLE_STATE_PASSIVE, PAGE_LIFECYCLE_STATE_ACTIVE], // A frozen page being resumed - [PAGE_LIFECYCLE_STATE_FROZEN, PAGE_LIFECYCLE_STATE_HIDDEN], // A frozen (bfcached) page navigated back to + [PAGE_LIFECYCLE_STATE_ACTIVE, PAGE_LIFECYCLE_STATE_PASSIVE, PAGE_LIFECYCLE_STATE_HIDDEN, PAGE_LIFECYCLE_STATE_FROZEN], + // A hidden page transitioning back to active. + [PAGE_LIFECYCLE_STATE_HIDDEN, PAGE_LIFECYCLE_STATE_PASSIVE, PAGE_LIFECYCLE_STATE_ACTIVE], + // A frozen page being resumed + [PAGE_LIFECYCLE_STATE_FROZEN, PAGE_LIFECYCLE_STATE_HIDDEN], + // A frozen (bfcached) page navigated back to // Note: [FROZEN, HIDDEN] can happen here, but it's already covered above. [PAGE_LIFECYCLE_STATE_FROZEN, PAGE_LIFECYCLE_STATE_ACTIVE], [PAGE_LIFECYCLE_STATE_FROZEN, PAGE_LIFECYCLE_STATE_PASSIVE]].map(toIndexedObject); + /** * Accepts a current state and a future state and returns an array of legal * state transition paths. This is needed to normalize behavior across browsers @@ -1046,25 +955,24 @@ * @param {string} newState * @return {!Array} */ - var getLegalStateTransitionPath = function getLegalStateTransitionPath(oldState, newState) { // We're intentionally not using for...of here so when we transpile to ES5 // we don't need to include the Symbol polyfills. for (var order, i = 0; order = LEGAL_STATE_TRANSITIONS[i]; ++i) { var oldIndex = order[oldState]; var newIndex = order[newState]; - if (oldIndex >= 0 && newIndex >= 0 && newIndex > oldIndex) { // Differences greater than one should be reported // because it means a state was skipped. return Object.keys(order).slice(oldIndex, newIndex + 1); } } - - return []; // TODO(philipwalton): it shouldn't be possible to get here, but + return []; + // TODO(philipwalton): it shouldn't be possible to get here, but // consider some kind of warning or call to action if it happens. // console.warn(`Invalid state change detected: ${oldState} > ${newState}`); }; + /** * Returns the current state based on the document's visibility and * in input focus states. Note this method is only used to determine @@ -1072,51 +980,47 @@ * for events. * @return {string} */ - - var getCurrentState = function getCurrentState() { if (document.visibilityState === PAGE_LIFECYCLE_STATE_HIDDEN) { return PAGE_LIFECYCLE_STATE_HIDDEN; } - if (document.hasFocus()) { return PAGE_LIFECYCLE_STATE_ACTIVE; } - return PAGE_LIFECYCLE_STATE_PASSIVE; }; + /** * Class definition for the exported, singleton lifecycle instance. */ - - var PageLifecycle = /*#__PURE__*/function (_EventTargetShim) { _inheritsLoose(PageLifecycle, _EventTargetShim); - /** * Initializes state, state history, and adds event listeners to monitor * state changes. */ function PageLifecycle() { var _this; - _this = _EventTargetShim.call(this) || this; var state = getCurrentState(); _this._state = state; - _this._unsavedChanges = []; // Bind the callback and add event listeners. + _this._unsavedChanges = []; - _this._handleEvents = _this._handleEvents.bind(_assertThisInitialized(_this)); // Add capturing events on window so they run immediately. + // Bind the callback and add event listeners. + _this._handleEvents = _this._handleEvents.bind(_assertThisInitialized(_this)); + // Add capturing events on window so they run immediately. EVENTS.forEach(function (evt) { return addEventListener(evt, _this._handleEvents, true); - }); // Safari does not reliably fire the `pagehide` or `visibilitychange` + }); + + // Safari does not reliably fire the `pagehide` or `visibilitychange` // events when closing a tab, so we have to use `beforeunload` with a // timeout to check whether the default action was prevented. // - https://bugs.webkit.org/show_bug.cgi?id=151610 // - https://bugs.webkit.org/show_bug.cgi?id=151234 // NOTE: we only add this to Safari because adding it to Firefox would // prevent the page from being eligible for bfcache. - if (IS_SAFARI) { addEventListener(EVENT_BEFOREUNLOAD, function (evt) { _this._safariBeforeUnloadTimeout = setTimeout(function () { @@ -1126,16 +1030,13 @@ }, 0); }); } - return _this; } + /** * @return {string} */ - - var _proto2 = PageLifecycle.prototype; - /** * @param {Symbol|Object} id A unique symbol or object identifying the *. pending state. This ID is required when removing the state later. @@ -1149,40 +1050,35 @@ if (this._unsavedChanges.length === 0) { addEventListener(EVENT_BEFOREUNLOAD, onbeforeunload); } - this._unsavedChanges.push(id); } } + /** * @param {Symbol|Object} id A unique symbol or object identifying the *. pending state. This ID is required when removing the state later. - */ - ; - + */; _proto2.removeUnsavedChanges = function removeUnsavedChanges(id) { var idIndex = this._unsavedChanges.indexOf(id); - if (idIndex > -1) { - this._unsavedChanges.splice(idIndex, 1); // If there's no more pending state, remove the event listener. - + this._unsavedChanges.splice(idIndex, 1); + // If there's no more pending state, remove the event listener. if (this._unsavedChanges.length === 0) { removeEventListener(EVENT_BEFOREUNLOAD, onbeforeunload); } } } + /** * @private * @param {!Event} originalEvent * @param {string} newState - */ - ; - + */; _proto2._dispatchChangesIfNeeded = function _dispatchChangesIfNeeded(originalEvent, newState) { if (newState !== this._state) { var oldState = this._state; var path = getLegalStateTransitionPath(oldState, newState); - for (var i = 0; i < path.length - 1; ++i) { var _oldState = path[i]; var _newState = path[i + 1]; @@ -1195,44 +1091,34 @@ } } } + /** * @private * @param {!Event} evt - */ - ; - + */; _proto2._handleEvents = function _handleEvents(evt) { if (IS_SAFARI) { clearTimeout(this._safariBeforeUnloadTimeout); } - switch (evt.type) { case EVENT_PAGESHOW: case EVENT_RESUME: this._dispatchChangesIfNeeded(evt, getCurrentState()); - break; - case EVENT_FOCUS: this._dispatchChangesIfNeeded(evt, PAGE_LIFECYCLE_STATE_ACTIVE); - break; - case EVENT_BLUR: // The `blur` event can fire while the page is being unloaded, so we // only need to update the state if the current state is "active". if (this._state === PAGE_LIFECYCLE_STATE_ACTIVE) { this._dispatchChangesIfNeeded(evt, getCurrentState()); } - break; - case EVENT_PAGEHIDE: case EVENT_UNLOAD: this._dispatchChangesIfNeeded(evt, evt.persisted ? PAGE_LIFECYCLE_STATE_FROZEN : PAGE_LIFECYCLE_STATE_TERMINATED); - break; - case EVENT_VISIBILITYCHANGE: // The document's `visibilityState` will change to hidden as the page // is being unloaded, but in such cases the lifecycle state shouldn't @@ -1240,38 +1126,32 @@ if (this._state !== PAGE_LIFECYCLE_STATE_FROZEN && this._state !== PAGE_LIFECYCLE_STATE_TERMINATED) { this._dispatchChangesIfNeeded(evt, getCurrentState()); } - break; - case EVENT_FREEZE: this._dispatchChangesIfNeeded(evt, PAGE_LIFECYCLE_STATE_FROZEN); - break; } }; - _createClass(PageLifecycle, [{ key: "state", get: function get() { return this._state; } + /** * Returns the value of document.wasDiscarded. This is arguably unnecessary * but I think there's value in having the entire API in one place and * consistent across browsers. * @return {boolean} */ - }, { key: "pageWasDiscarded", get: function get() { return document.wasDiscarded || false; } }]); - return PageLifecycle; }(EventTargetShim); - var PageLifecycle$1 = new PageLifecycle(); /** @@ -1298,11 +1178,10 @@ * // => false */ var isArray = Array.isArray; - var _isArray = isArray; /** `Object#toString` result references. */ - var stringTag = '[object String]'; + /** * Checks if `value` is classified as a `String` primitive or object. * @@ -1320,9 +1199,8 @@ * _.isString(1); * // => false */ - function isString(value) { - return typeof value == 'string' || !_isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag; + return typeof value == 'string' || !isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag; } /** @@ -1340,26 +1218,24 @@ } /** Built-in value references. */ - var getPrototype = overArg(Object.getPrototypeOf, Object); - var getPrototype$1 = getPrototype; /** `Object#toString` result references. */ - var objectTag = '[object Object]'; - /** Used for built-in method references. */ + /** Used for built-in method references. */ var funcProto = Function.prototype, - objectProto = Object.prototype; - /** Used to resolve the decompiled source of functions. */ + objectProto = Object.prototype; + /** Used to resolve the decompiled source of functions. */ var funcToString = funcProto.toString; - /** Used to check objects for own properties. */ + /** Used to check objects for own properties. */ var hasOwnProperty = objectProto.hasOwnProperty; - /** Used to infer the `Object` constructor. */ + /** Used to infer the `Object` constructor. */ var objectCtorString = funcToString.call(Object); + /** * Checks if `value` is a plain object, that is, an object created by the * `Object` constructor or one with a `[[Prototype]]` of `null`. @@ -1388,25 +1264,21 @@ * _.isPlainObject(Object.create(null)); * // => true */ - function isPlainObject(value) { if (!isObjectLike(value) || baseGetTag(value) != objectTag) { return false; } - - var proto = getPrototype$1(value); - + var proto = getPrototype(value); if (proto === null) { return true; } - var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor; return typeof Ctor == 'function' && Ctor instanceof Ctor && funcToString.call(Ctor) == objectCtorString; } /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeIsFinite = root.isFinite; - var nativeIsFinite = root$1.isFinite; /** * Checks if `value` is a finite primitive number. * @@ -1433,7 +1305,6 @@ * _.isFinite('3'); * // => false */ - function isFinite(value) { return typeof value == 'number' && nativeIsFinite(value); } @@ -1443,35 +1314,30 @@ * * @return {String} Returns a random 12 character string */ - function randomString() { var s = ''; - for (var i = 0; i < 12; i++) { var rnum = Math.floor(Math.random() * RANDOM_STRING_CHARS.length); s += RANDOM_STRING_CHARS.substring(rnum, rnum + 1); } - return s; } function isLeftClick(evt) { if (evt === void 0) { evt = window.event; } - var button = !isUndefined(evt.which) && evt.which === 1 || !isUndefined(evt.button) && evt.button === 0; return button && !evt.metaKey && !evt.altKey && !evt.ctrlKey && !evt.shiftKey; } + /** * Helper to either query an element by id, or return element if passed * through options * * Supports searching by ids and classnames (or querySelector if browser supported) */ - function getElement(selector, options) { var _options = isString(selector) ? options || {} : selector || {}; - if (_options.el) { return _options.el; } else if (isString(selector)) { @@ -1487,34 +1353,29 @@ function prefixObjectKeys(object, prefix, blacklist) { var obj = {}; if (isUndefined(object)) return obj; - for (var key in object) { if (object.hasOwnProperty(key)) { var value = object[key]; var isBlacklisted = false; - for (var i = 0; i < blacklist.length; i++) { if (blacklist[i][0] === key) { isBlacklisted = true; break; } } - if (!isBlacklisted && value !== 'undefined' && value !== 'null' && !isUndefined(value)) { obj["" + prefix + key] = value; } } } - return obj; } function jsonStringifyObjectValues(object) { var obj = {}; if (isUndefined(object)) return obj; - for (var key in object) { if (object.hasOwnProperty(key)) { - if (isPlainObject(object[key]) || _isArray(object[key])) { + if (isPlainObject(object[key]) || isArray(object[key])) { try { obj[key] = JSON.stringify(object[key]); } catch (_unused) { @@ -1523,7 +1384,6 @@ } else obj[key] = object[key]; } } - return obj; } function getScrollDepth() { @@ -1536,25 +1396,20 @@ callback(); } catch (e) { console.error("Error in Woopra " + action + " callback"); // eslint-disable-line no-console - console.error(e.stack); // eslint-disable-line no-console } } - function matchesElement(element, matcher) { return matcher.some(function (sel) { return element.matches(sel); }); } - function findParentElement(element, matcher) { var elem = element; - while (!isUndefined(elem) && elem !== null) { if (elem.tagName && matchesElement(elem, matcher)) break; elem = elem.parentNode; } - return elem; } function hasBeaconSupport() { @@ -1563,22 +1418,17 @@ function getDOMPath(element) { var stack = []; var elem = element; - while (elem.parentNode) { var count = 0; var index = 0; - for (var i = 0; i < elem.parentNode.childNodes.length; i++) { var siblingElement = elem.parentNode.childNodes[i]; - if (siblingElement.nodeName === elem.nodeName) { if (siblingElement === elem) index = count; count++; } } - var nodeName = elem.nodeName.toLowerCase(); - if (elem.hasAttribute('id') && elem.id) { stack.unshift(nodeName + "#" + elem.id); } else if (count > 1) { @@ -1586,56 +1436,46 @@ } else { stack.unshift(nodeName); } - elem = elem.parentNode; } - return stack.slice(1).join(' > '); } function onClick(e) { var elem = e.srcElement || e.target; - if (isLeftClick(e)) { fire$1(EVENT_CLICK, e, elem); } - if (globals[KEY_DOWNLOAD_TRACKING] || globals[KEY_OUTGOING_TRACKING]) { elem = findParentElement(e.srcElement || e.target, ELEMENT_MATCHER_LINK); - if (!isUndefined(elem) && elem !== null && !elem.getAttribute(DATA_TRACKED_ATTRIBUTE)) { fire$1(EVENT_LINK_CLICK, e, elem); } } } - function onMouseDown(e) { var elem; fire$1(EVENT_MOUSEMOVE, e, Date.now()); - if (globals[KEY_AUTO_DECORATE]) { elem = findParentElement(e.srcElement || e.target, ELEMENT_MATCHER_LINK); - if (!isUndefined(elem) && elem !== null) { fire$1(KEY_AUTO_DECORATE, elem); } } } - function onMouseMove(e) { fire$1(EVENT_MOUSEMOVE, e, Date.now()); } - var onScroll = throttle(function onScroll(e) { fire$1(EVENT_SCROLL, e); }, 500); - function onPageStateChange(e) { fire$1(EVENT_STATECHANGE, e); } + + // attaches events // needs to be handled here, instead of in a tracking instance because // these events should only be fired once on a page - function attachGlobalEvents() { addEventListener$1(document, EVENT_CLICK, onClick); addEventListener$1(document, EVENT_MOUSEDOWN, onMouseDown); @@ -1656,7 +1496,8 @@ * _.times(2, _.noop); * // => [undefined, undefined] */ - function noop() {// No operation performed. + function noop() { + // No operation performed. } var WoopraAction = /*#__PURE__*/function () { @@ -1666,27 +1507,21 @@ this.params = params; this.meta = meta; } - var _proto = WoopraAction.prototype; - _proto.update = function update(options, lastArg) { if (options === void 0) { options = {}; } - if (options.event && options.event !== this.params.event) { this.params.event = options.event; } - this.woopra.update(this.id, _extends({}, options, { $action: this.params.event }), lastArg); }; - _proto.cancel = function cancel() { this.woopra.cancelAction(this.id); }; - return WoopraAction; }(); @@ -1704,12 +1539,10 @@ if (upper !== undefined) { number = number <= upper ? number : upper; } - if (lower !== undefined) { number = number >= lower ? number : lower; } } - return number; } @@ -1724,23 +1557,21 @@ */ function arrayMap(array, iteratee) { var index = -1, - length = array == null ? 0 : array.length, - result = Array(length); - + length = array == null ? 0 : array.length, + result = Array(length); while (++index < length) { result[index] = iteratee(array[index], index, array); } - return result; } /** Used as references for various `Number` constants. */ - var INFINITY$1 = 1 / 0; + /** Used to convert symbols to primitives and strings. */ + var symbolProto = Symbol$1 ? Symbol$1.prototype : undefined, + symbolToString = symbolProto ? symbolProto.toString : undefined; - var symbolProto = Symbol$2 ? Symbol$2.prototype : undefined, - symbolToString = symbolProto ? symbolProto.toString : undefined; /** * The base implementation of `_.toString` which doesn't convert nullish * values to empty strings. @@ -1749,30 +1580,26 @@ * @param {*} value The value to process. * @returns {string} Returns the string. */ - function baseToString(value) { // Exit early for strings to avoid a performance hit in some environments. if (typeof value == 'string') { return value; } - - if (_isArray(value)) { + if (isArray(value)) { // Recursively convert values (susceptible to call stack limits). return arrayMap(value, baseToString) + ''; } - if (isSymbol(value)) { return symbolToString ? symbolToString.call(value) : ''; } - var result = value + ''; return result == '0' && 1 / value == -INFINITY$1 ? '-0' : result; } /** Used as references for various `Number` constants. */ - var INFINITY = 1 / 0, - MAX_INTEGER = 1.7976931348623157e+308; + MAX_INTEGER = 1.7976931348623157e+308; + /** * Converts `value` to a finite number. * @@ -1796,19 +1623,15 @@ * _.toFinite('3.2'); * // => 3.2 */ - function toFinite(value) { if (!value) { return value === 0 ? value : 0; } - value = toNumber(value); - if (value === INFINITY || value === -INFINITY) { var sign = value < 0 ? -1 : 1; return sign * MAX_INTEGER; } - return value === value ? value : 0; } @@ -1838,10 +1661,9 @@ * _.toInteger('3.2'); * // => 3 */ - function toInteger(value) { var result = toFinite(value), - remainder = result % 1; + remainder = result % 1; return result === result ? remainder ? result - remainder : result : 0; } @@ -1866,7 +1688,6 @@ * _.toString([1, 2, 3]); * // => '1,2,3' */ - function toString(value) { return value == null ? '' : baseToString(value); } @@ -1894,7 +1715,6 @@ * _.startsWith('abc', 'b', 1); * // => true */ - function startsWith(string, target, position) { string = toString(string); position = position == null ? 0 : baseClamp(toInteger(position), 0, string.length); @@ -1925,7 +1745,6 @@ * _.endsWith('abc', 'b', 2); * // => true */ - function endsWith(string, target, position) { string = toString(string); target = baseToString(target); @@ -1959,36 +1778,31 @@ |*| * docCookies.keys() |*| \*/ + function getItem(sKey) { if (!sKey) { return null; } - return decodeURIComponent(document.cookie.replace(new RegExp('(?:(?:^|.*;)\\s*' + encodeURIComponent(sKey).replace(/[\-\.\+\*]/g, '\\$&') + '\\s*\\=\\s*([^;]*).*$)|^.*$'), '$1')) || null; } function setItem(sKey, sValue, vEnd, sPath, sDomain, bSecure) { if (!sKey || /^(?:expires|max\-age|path|domain|secure)$/i.test(sKey)) { return false; } - var sExpires = ''; - if (vEnd) { switch (vEnd.constructor) { case Number: sExpires = vEnd === Infinity ? '; expires=Fri, 31 Dec 9999 23:59:59 GMT' : '; max-age=' + vEnd; break; - case String: sExpires = '; expires=' + vEnd; break; - case Date: sExpires = '; expires=' + vEnd.toUTCString(); break; } } - document.cookie = encodeURIComponent(sKey) + '=' + encodeURIComponent(sValue) + sExpires + (sDomain ? '; domain=' + sDomain : '') + (sPath ? '; path=' + sPath : '') + (bSecure ? '; secure' : ''); return true; } @@ -1996,7 +1810,6 @@ if (!hasItem(sKey)) { return false; } - document.cookie = encodeURIComponent(sKey) + '=; expires=Thu, 01 Jan 1970 00:00:00 GMT' + (sDomain ? '; domain=' + sDomain : '') + (sPath ? '; path=' + sPath : ''); return true; } @@ -2004,50 +1817,44 @@ if (!sKey) { return false; } - return new RegExp('(?:^|;\\s*)' + encodeURIComponent(sKey).replace(/[\-\.\+\*]/g, '\\$&') + '\\s*\\=').test(document.cookie); } function keys() { var aKeys = document.cookie.replace(/((?:^|\s*;)[^\=]+)(?=;|$)|^\s*|\s*(?:\=[^;]*)?(?:\1|$)/g, '').split(/\s*(?:\=[^;]*)?;\s*/); - for (var nLen = aKeys.length, nIdx = 0; nIdx < nLen; nIdx++) { aKeys[nIdx] = decodeURIComponent(aKeys[nIdx]); } - return aKeys; } var docCookies = /*#__PURE__*/Object.freeze({ __proto__: null, getItem: getItem, - setItem: setItem, - removeItem: removeItem, hasItem: hasItem, - keys: keys + keys: keys, + removeItem: removeItem, + setItem: setItem }); var TYPE_BUTTON = 'button'; var TYPE_SUBMIT = 'submit'; - var TYPE_RESET = 'reset'; // https://code.google.com/p/form-serialize/ - // modified to return an object + var TYPE_RESET = 'reset'; + // https://code.google.com/p/form-serialize/ + // modified to return an object function serializeForm(form, options) { if (options === void 0) { options = {}; } - if (!form || form.nodeName !== 'FORM') { return; } - var exclude = options.exclude || []; var data = {}; - for (var i = form.elements.length - 1; i >= 0; i = i - 1) { if (form.elements[i].name === '' || exclude.indexOf(form.elements[i].name) > -1) { continue; } - switch (form.elements[i].nodeName) { case 'INPUT': switch (form.elements[i].type) { @@ -2058,40 +1865,31 @@ case TYPE_SUBMIT: data[form.elements[i].name] = form.elements[i].value; break; - case 'checkbox': case 'radio': if (form.elements[i].checked) { data[form.elements[i].name] = form.elements[i].value; } - break; } - break; - case 'TEXTAREA': data[form.elements[i].name] = form.elements[i].value; break; - case 'SELECT': switch (form.elements[i].type) { case 'select-one': data[form.elements[i].name] = form.elements[i].value; break; - case 'select-multiple': for (var j = form.elements[i].options.length - 1; j >= 0; j = j - 1) { if (form.elements[i].options[j].selected) { data[form.elements[i].name] = form.elements[i].options[j].value; } } - break; } - break; - case 'BUTTON': switch (form.elements[i].type) { case TYPE_RESET: @@ -2100,11 +1898,9 @@ data[form.elements[i].name] = form.elements[i].value; break; } - break; } } - return data; } @@ -2113,24 +1909,19 @@ script.parentNode.removeChild(script); } } - var statusIsSuccessful = function statusIsSuccessful(readyState) { return readyState === 4 || readyState === 'complete' || readyState === 'loaded'; }; - function loadScript(url, callback, errorCallback) { if (callback === void 0) { callback = noop; } - if (errorCallback === void 0) { errorCallback = noop; } - var script = document.createElement('script'); script.type = 'text/javascript'; script.async = true; - if (!isUndefined(script.onreadystatechange)) { script.onreadystatechange = function onreadystatechange() { if (statusIsSuccessful(this.readyState)) { @@ -2143,23 +1934,21 @@ callback(); removeScript(script); }; - script.onerror = function (e) { errorCallback(e); removeScript(script); }; } - script.src = url; if (document.body) document.body.appendChild(script);else document.head.appendChild(script); } var Woopra = {}; Woopra.docCookies = docCookies; + /** * Wrapper for window.location to allow stubs in testing */ - Woopra.location = function location(property, value) { // make sure property is valid if (!isUndefined(window.location[property])) { @@ -2170,62 +1959,53 @@ } } }; - function getHostname() { return Woopra.location('hostname'); } + /** * This exists to please the Safari gods. Sinon can't stub window in Safari. */ - - Woopra.historyReplaceState = window.history && window.history.replaceState ? function historyReplaceState(data, title, url) { return window.history.replaceState(data, title, url); } : function () {}; + /** * Hides any URL parameters by calling window.history.replaceState * * @param {Array} params A list of parameter prefixes that will be hidden * @return {String} Returns the new URL that will be used */ - Woopra.hideUrlParams = function hideUrlParams(params) { var regex = new RegExp("[?&]+((?:" + params.join('|') + ")[^=&]*)=([^&#]*)", 'gi'); var href = Woopra.location('href').replace(regex, ''); Woopra.historyReplaceState(null, null, href); return href; }; + /** * Retrieves the current URL parameters as an object * * @return {Object} An object for all of the URL parameters */ - - Woopra.getUrlParams = function getUrlParams() { var vars = {}; var href = Woopra.location('href'); - if (href) { href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function (m, key, value) { vars[key] = decodeURIComponent(value.split('+').join(' ')); }); } - return vars; }; - Woopra.buildUrlParams = function buildUrlParams(params, prefix) { if (prefix === void 0) { prefix = ''; } - var p = []; - if (isUndefined(params)) { return params; } - for (var key in params) { if (params.hasOwnProperty(key)) { if (params[key] !== 'undefined' && params[key] !== 'null' && !isUndefined(params[key])) { @@ -2233,28 +2013,23 @@ } } } - return p.join('&'); }; + /** * Parses the URL parameters for data beginning with a certain prefix * * @param {Function} method The callback method for each key found matching `prefix` * @param {string} prefix The prefix that the parameter should start with */ - - Woopra.getCustomData = function getCustomData(method, prefix) { if (prefix === void 0) { prefix = 'wv_'; } - var vars = Woopra.getUrlParams(); - for (var i in vars) { if (vars.hasOwnProperty(i)) { var value = vars[i]; - if (i.substring(0, prefix.length) === prefix) { var key = i.substring(prefix.length); method.call(this, key, value); @@ -2262,107 +2037,89 @@ } } }; + /** * Retrieves the current client domain name using the hostname * and returning the last two tokens with a `.` separator (domain + tld). * * This can be an issue if there is a second level domain */ - - Woopra.getDomain = function getDomain(hostname) { if (hostname === void 0) { hostname = getHostname(); } + var domain = hostname.substring(hostname.lastIndexOf('.', hostname.lastIndexOf('.') - 1) + 1); - var domain = hostname.substring(hostname.lastIndexOf('.', hostname.lastIndexOf('.') - 1) + 1); // check if domain is in list of second level domains, ignore if so - + // check if domain is in list of second level domains, ignore if so if (SECOND_LEVEL_TLDS.indexOf(domain) !== -1) { return hostname.substring(hostname.lastIndexOf('.', hostname.indexOf(domain) - 2) + 1); } - return domain; }; + /** * Returns the current hostname with 'www' stripped out */ - - Woopra.getHostnameNoWww = function getHostnameNoWww() { var hostname = getHostname(); - if (hostname.indexOf('www.') === 0) { return hostname.replace('www.', ''); } - return hostname; }; + /** * Determines if the current URL should be considered an outgoing URL */ - - Woopra.isOutgoingLink = function isOutgoingLink(targetHostname) { var currentHostname = getHostname(); var currentDomain = Woopra.getDomain(currentHostname); return targetHostname !== currentHostname && targetHostname.replace(/^www\./, '') !== currentHostname.replace(/^www\./, '') && (!globals[KEY_OUTGOING_IGNORE_SUBDOMAIN] || currentDomain !== Woopra.getDomain(targetHostname)) && !Woopra.startsWith(targetHostname, 'javascript') && targetHostname !== '' && targetHostname !== '#'; }; - Woopra.hideCrossDomainId = function hideCrossDomainId() { return Woopra.hideUrlParams([XDM_PARAM_NAME]); }; - Woopra.mapQueryParams = function mapQueryParams(mapping) { var vars = Woopra.getUrlParams(); var params = {}; - for (var key in mapping) { var value = vars[key]; - if (!isUndefined(value)) { params[mapping[key]] = value; } } - return params; }; - Woopra.redirect = function redirect(link) { Woopra.location('href', link); }; + /** * Parses current URL for parameters that start with either `utm_` or `woo_` * and have the keys `source`, `medium`, `content`, `campaign`, `term` * * @return {Object} Returns an object with campaign keys as keys */ - - Woopra.getCampaignData = function getCampaignData() { var vars = Woopra.getUrlParams(); var campaign = {}; - for (var i = 0; i < CAMPAIGN_KEYS.length; i++) { var key = CAMPAIGN_KEYS[i]; var value = vars["utm_" + key] || vars["woo_" + key]; - if (!isUndefined(value)) { campaign["campaign_" + (key === 'campaign' ? 'name' : key)] = value; } } - return campaign; }; + /** * Hides any campaign data (query params: wv_, woo_, utm_) from the URL * by using replaceState (if available) */ - - Woopra.hideCampaignData = function hideCampaignData() { return Woopra.hideUrlParams(['wv_', 'woo_', 'utm_']); }; - Woopra.leftClick = isLeftClick; Woopra.randomString = randomString; Woopra.getElement = getElement; @@ -2376,11 +2133,9 @@ Woopra.endsWith = endsWith; var fire = Woopra._fire; - var Tracker = /*#__PURE__*/function () { function Tracker(instanceName) { var _this$options; - this.visitorData = {}; this.sessionData = {}; this.orgData = {}; @@ -2396,96 +2151,83 @@ this.pending = []; this.beaconQueue = []; this.lastAction = null; - if (instanceName && instanceName !== '') { window[instanceName] = this; } } - var _proto = Tracker.prototype; - _proto.init = function init() { var _this = this; - this.__l = {}; - this._processQueue('config'); - this._setupCookie(); + this._bindEvents(); - this._bindEvents(); // Otherwise loading indicator gets stuck until the every response + // Otherwise loading indicator gets stuck until the every response // in the queue has been received - - setTimeout(function () { return _this._processQueue(); }, 1); this.loaded = true; var callback = this.config('initialized'); - if (isFunction(callback)) { callback(this.instanceName); - } // Safe to remove cross domain url parameter after setupCookie is called - // Should only need to be called once on load - + } + // Safe to remove cross domain url parameter after setupCookie is called + // Should only need to be called once on load if (this.config(KEY_HIDE_XDM_DATA)) { Woopra.hideCrossDomainId(); } } + /** * Processes the tracker queue in case user tries to push events * before tracker is ready. - */ - ; - + */; _proto._processQueue = function _processQueue(type) { var _wpt = window.__woo ? window.__woo[this.instanceName] : _wpt; + _wpt = window._w ? window._w[this.instanceName] : _wpt; - _wpt = window._w ? window._w[this.instanceName] : _wpt; // if _wpt is undefined, means script was loaded asynchronously and + // if _wpt is undefined, means script was loaded asynchronously and // there is no queue if (_wpt && _wpt._e) { var events = _wpt._e; - for (var i = 0; i < events.length; i++) { var action = events[i]; - if (!isUndefined(action) && this[action[0]] && (isUndefined(type) || type === action[0])) { this[action[0]].apply(this, Array.prototype.slice.call(action, 1)); } } } } + /** * Sets up the tracking cookie - */ - ; - + */; _proto._setupCookie = function _setupCookie() { var url_id = this.getUrlId(); - this.cookie = this.getCookie(); // overwrite saved cookie if id is in url + this.cookie = this.getCookie(); + // overwrite saved cookie if id is in url if (url_id) { this.cookie = url_id; - } // Setup cookie - + } + // Setup cookie if (!this.cookie || this.cookie.length < 1) { this.cookie = randomString(); } - Woopra.docCookies.setItem(this.config(KEY_COOKIE_NAME), this.cookie, this.config(KEY_COOKIE_EXPIRE), this.config(KEY_COOKIE_PATH), this.config(KEY_COOKIE_DOMAIN), this.config(KEY_COOKIE_SECURE)); this.dirtyCookie = true; } + /** * Binds some events to measure mouse and keyboard events - */ - ; - + */; _proto._bindEvents = function _bindEvents() { var _this2 = this; - on(this, EVENT_CLICK, function (e) { return _this2.onClick(e); }); @@ -2511,6 +2253,7 @@ return _this2.autoDecorate(elem); }); } + /** * Sets/gets values from dataStore depending on arguments passed * @@ -2518,26 +2261,21 @@ * @param key String/Object Returns property object if key and value is undefined, * acts as a getter if only `key` is defined and a string, and * acts as a setter if `key` and `value` are defined OR if `key` is an object. - */ - ; - + */; _proto._dataSetter = function _dataSetter(dataStore, key, value) { if (isUndefined(key)) { return dataStore; } - if (isUndefined(value)) { if (isString(key)) { return dataStore[key]; } - if (isObject(key)) { for (var i in key) { if (key.hasOwnProperty(i)) { if (Woopra.startsWith(i, 'cookie_')) { this.dirtyCookie = true; } - dataStore[i] = key[i]; } } @@ -2546,224 +2284,196 @@ if (Woopra.startsWith(key, 'cookie_')) { this.dirtyCookie = true; } - dataStore[key] = value; } - return this; }; - _proto.getVisitorUrlData = function getVisitorUrlData() { Woopra.getCustomData.call(this, this.identify, 'wv_'); } + /* * Returns the Woopra cookie string - */ - ; - + */; _proto.getCookie = function getCookie() { return Woopra.docCookies.getItem(this.config(KEY_COOKIE_NAME)); }; - _proto.getProtocol = function getProtocol() { var protocol = this.config(KEY_PROTOCOL); return protocol && protocol !== '' ? protocol + ":" : ''; } + /** * Generates a destination endpoint string to use depending on different * configuration options - */ - ; - + */; _proto.getEndpoint = function getEndpoint(path) { if (path === void 0) { path = ''; } - var protocol = this.getProtocol(); - if (this.config(KEY_THIRD_PARTY) && !this.config(KEY_DOMAIN)) { throw new Error('Error: `domain` is not set.'); } - var thirdPartyPath = this.config(KEY_THIRD_PARTY) ? "tp/" + this.config(KEY_DOMAIN) : ''; - if (path && !Woopra.endsWith(path, '/')) { path += '/'; } - if (thirdPartyPath && !Woopra.startsWith(path, '/')) { thirdPartyPath += '/'; } - var region = this.config(KEY_REGION); var endpoint = ENDPOINTS[region]; if (!endpoint) throw new Error("Error: Invalid region: " + region); return protocol + "//" + endpoint + thirdPartyPath + path; } + /** * Sets configuration options - */ - ; - + */; _proto.config = function config(key, value) { - var data = this._dataSetter(this.options, key, value); // dataSetter returns `this` when it is used as a setter - + var data = this._dataSetter(this.options, key, value); + // dataSetter returns `this` when it is used as a setter if (data === this) { // clamp ping interval - this.options[KEY_PING_INTERVAL] = Math.max(MIN_PING_INTERVAL, Math.min(this.options[KEY_PING_INTERVAL], MAX_PING_INTERVAL)); // set script wide variables for events that are bound on script load - // since we shouldn't bind per tracker instance + this.options[KEY_PING_INTERVAL] = Math.max(MIN_PING_INTERVAL, Math.min(this.options[KEY_PING_INTERVAL], MAX_PING_INTERVAL)); + // set script wide variables for events that are bound on script load + // since we shouldn't bind per tracker instance globals[KEY_OUTGOING_TRACKING] = this.options[KEY_OUTGOING_TRACKING]; globals[KEY_DOWNLOAD_TRACKING] = this.options[KEY_DOWNLOAD_TRACKING]; globals[KEY_AUTO_DECORATE] = isUndefined(globals[KEY_AUTO_DECORATE]) && this.options[KEY_CROSS_DOMAIN] ? this.options[KEY_CROSS_DOMAIN] : globals[KEY_AUTO_DECORATE]; globals[KEY_OUTGOING_IGNORE_SUBDOMAIN] = this.options[KEY_OUTGOING_IGNORE_SUBDOMAIN]; - if (this.dirtyCookie && this.loaded) { this._setupCookie(); } } - return data; } + /** * Use to attach custom visit data that doesn't stick to visitor * ** Not in use yet - */ - ; - + */; _proto.visit = function visit(key, value) { return this._dataSetter(this.sessionData, key, value); } + /** * Attach custom visitor data - */ - ; - + */; _proto.identify = function identify() { var key = undefined; var value = undefined; var orgKey = undefined; - var orgValue = undefined; // identify(props, orgProps) + var orgValue = undefined; + // identify(props, orgProps) if (isObject(arguments.length <= 0 ? undefined : arguments[0]) && isObject(arguments.length <= 1 ? undefined : arguments[1])) { key = arguments.length <= 0 ? undefined : arguments[0]; orgKey = arguments.length <= 1 ? undefined : arguments[1]; - } // identify(props, orgKey, orgValue) + } + // identify(props, orgKey, orgValue) else if (isObject(arguments.length <= 0 ? undefined : arguments[0]) && isString(arguments.length <= 1 ? undefined : arguments[1])) { key = arguments.length <= 0 ? undefined : arguments[0]; orgKey = arguments.length <= 1 ? undefined : arguments[1]; orgValue = arguments.length <= 2 ? undefined : arguments[2]; - } // identify(key, value, orgProps) + } + // identify(key, value, orgProps) else if (isString(arguments.length <= 0 ? undefined : arguments[0]) && isString(arguments.length <= 1 ? undefined : arguments[1]) && isObject(arguments.length <= 2 ? undefined : arguments[2])) { key = arguments.length <= 0 ? undefined : arguments[0]; value = arguments.length <= 1 ? undefined : arguments[1]; orgKey = arguments.length <= 2 ? undefined : arguments[2]; - } // identify(key, value, orgKey, orgValue) + } + // identify(key, value, orgKey, orgValue) else { key = arguments.length <= 0 ? undefined : arguments[0]; value = arguments.length <= 1 ? undefined : arguments[1]; orgKey = arguments.length <= 2 ? undefined : arguments[2]; orgValue = arguments.length <= 3 ? undefined : arguments[3]; } - var visitorProperties = this._dataSetter(this.visitorData, key, value); - if (orgKey) this._dataSetter(this.orgData, orgKey, orgValue); return visitorProperties; } + /** * Attach custom org data - */ - ; - + */; _proto.identifyOrg = function identifyOrg(key, value) { return this._dataSetter(this.orgData, key, value); } + /** * Generic method to call any tracker method - */ - ; - + */; _proto.call = function call(funcName) { if (isFunction(this[funcName])) { this[funcName].apply(this, Array.prototype.slice.call(arguments, 1)); } } + /** * Builds the correct tracking Url and performs an HTTP request - */ - ; - + */; _proto._push = function _push(options) { var _meta, - _this3 = this; - + _this3 = this; if (options === void 0) { options = {}; } - var types = [['visitorData', VISITOR_PROPERTY_PREFIX], ['eventData', ACTION_PROPERTY_PREFIX], ['sessionData', VISIT_PROPERTY_PREFIX], ['orgData', ORG_PROPERTY_PREFIX]]; var data = {}; var endpoint = this.getEndpoint(options.endpoint); - var lifecycle = options.lifecycle || LIFECYCLE_ACTION; // Load custom visitor params from url + var lifecycle = options.lifecycle || LIFECYCLE_ACTION; + // Load custom visitor params from url this.getVisitorUrlData(); - if (this.config(KEY_HIDE_CAMPAIGN)) { Woopra.hideCampaignData(); - } // push tracker config values - - - this._dataSetter(data, this.getOptionParams()); // push eventName if it exists + } + // push tracker config values + this._dataSetter(data, this.getOptionParams()); + // push eventName if it exists if (options.eventName) { data.event = options.eventName; - } // push close if no personalization - + } + // push close if no personalization if (!this.config(KEY_PERSONALIZATION)) { data.close = true; } - data.timeout = isUndefined(options.timeout) ? this.config(KEY_IDLE_TIMEOUT) : options.timeout; var rawData = {}; - for (var _iterator = _createForOfIteratorHelperLoose(ACTION_PROPERTY_ALIASES), _step; !(_step = _iterator()).done;) { var _step$value = _step.value, - original = _step$value[0], - alias = _step$value[1]; - + original = _step$value[0], + alias = _step$value[1]; if (options.eventData && options.eventData[original]) { rawData[alias] = options.eventData[original]; } } - this._dataSetter(data, rawData); - for (var i = 0; i < types.length; i++) { var _types$i = types[i], - key = _types$i[0], - prefix = _types$i[1]; + key = _types$i[0], + prefix = _types$i[1]; var newData = jsonStringifyObjectValues(prefixObjectKeys(options[key], prefix, prefix === ACTION_PROPERTY_PREFIX ? ACTION_PROPERTY_ALIASES : [])); - if (prefix === ORG_PROPERTY_PREFIX && newData[ORG_PROPERTY_PREFIX + "id"]) { newData.org = newData[ORG_PROPERTY_PREFIX + "id"]; delete newData[ORG_PROPERTY_PREFIX + "id"]; } - this._dataSetter(data, newData); } - if (this.config(KEY_CONTEXT)) { try { var contextData = JSON.stringify(this.config(KEY_CONTEXT)); data[KEY_CONTEXT] = encodeURIComponent(contextData); } catch (e) {} } - if (options.fullEventData) data = options.fullEventData; var dirty = Boolean(options.useBeacon || this.isUnloading); var meta = (_meta = {}, _meta[META_DIRTY] = dirty, _meta[META_DURATION] = 0, _meta[META_RETRACK] = Boolean(options.retrack), _meta[META_SENT] = !dirty, _meta[META_TIMESTAMP] = Date.now(), _meta); @@ -2774,8 +2484,9 @@ var beforeCallback = isFunction(options.beforeCallback) ? function () { return options.beforeCallback(action); } : noop; - var errorCallback = options.errorCallback || noop; // cancel previous lifecycle page event if a new one is tracked + var errorCallback = options.errorCallback || noop; + // cancel previous lifecycle page event if a new one is tracked if (lifecycle === LIFECYCLE_PAGE) { this.pending.forEach(function (item) { if (item.lifecycle === LIFECYCLE_PAGE && item.args.eventData[IDPTNC]) { @@ -2783,7 +2494,6 @@ } }); } - if (lifecycle === LIFECYCLE_PAGE || options.useBeacon || this.isUnloading) { this.pending.push({ lifecycle: lifecycle, @@ -2795,37 +2505,30 @@ errorCallback: errorCallback }); } - if (lifecycle !== LIFECYCLE_PAGE && options.endpoint === ENDPOINT_TRACK) { this.lastAction = action; } - if (this.isUnloading || options.useBeacon && !options.queue) { this.sendBeacons(); } else if (!options.queue) { var queryString = Woopra.buildUrlParams(data); var scriptUrl = endpoint + "?" + queryString; - var onSuccess = function onSuccess() { return callCallback(callback, data.event); }; - var onError = function onError() { return callCallback(errorCallback, data.event); }; - Woopra.loadScript(scriptUrl, onSuccess, onError); } - setTimeout(function () { return callCallback(beforeCallback, data.event); }); } + /** * Send an event to tracking servr - */ - ; - + */; _proto.track = function track(name, options) { var eventData = {}; var eventName = ''; @@ -2846,50 +2549,49 @@ if (!isUndefined(lastArg.lifecycle)) lifecycle = lastArg.lifecycle; if (!isUndefined(lastArg.timeout)) timeout = lastArg.timeout; if (!isUndefined(lastArg.retrack)) retrack = lastArg.retrack; - if (this.config(KEY_BEACONS)) { if (!isUndefined(lastArg.queue)) queue = Boolean(lastArg.queue); - if (!isUndefined(lastArg.useBeacon)) { useBeacon = Boolean(lastArg.useBeacon); } else if (queue) useBeacon = true; } else { useBeacon = false; } - } // Load campaign params (load first to allow overrides) + } + // Load campaign params (load first to allow overrides) if (!this.config(KEY_CAMPAIGN_ONCE) || !this.sentCampaign) { eventData = _extends({}, eventData, Woopra.getCampaignData()); this.sentCampaign = true; - } // Load query params mapping into Woopra event - + } - eventData = _extends({}, eventData, Woopra.mapQueryParams(this.config(KEY_MAP_QUERY_PARAMS))); // Track default: pageview + // Load query params mapping into Woopra event + eventData = _extends({}, eventData, Woopra.mapQueryParams(this.config(KEY_MAP_QUERY_PARAMS))); + // Track default: pageview if (isUndefined(name) || name === callback) { eventName = ACTION_PV; - } // Track custom events + } + // Track custom events else if (isUndefined(options) || options === callback) { if (isString(name)) { eventName = name; } - if (isObject(name)) { if (name.name && name.name === ACTION_PV) { eventName = ACTION_PV; } - this._dataSetter(eventData, name); } - } // Track custom events in format of name,object + } + // Track custom events in format of name,object else { this._dataSetter(eventData, options); - eventName = name; } + eventData[IDPTNC] = randomString(); - eventData[IDPTNC] = randomString(); // Add some defaults for pageview - + // Add some defaults for pageview if (eventName === ACTION_PV) { eventData.url = eventData.url || this.getPageUrl(); eventData.title = eventData.title || this.getPageTitle(); @@ -2898,22 +2600,17 @@ eventData[SCROLL_DEPTH] = getScrollDepth(); eventData.returning = isUndefined(eventData.returning) ? false : eventData.returning; if (!lastArg || !lastArg.lifecycle) lifecycle = LIFECYCLE_PAGE; - if (this.config(KEY_SAVE_URL_HASH)) { hash = eventData.hash || this.getPageHash(); - if (hash !== '' && hash !== '#') { eventData.hash = hash; } } } - var augmentAction = this.config(KEY_AUGMENT_ACTION); - if (isFunction(augmentAction)) { augmentAction.call(this, eventName, eventData); } - this._push({ endpoint: ENDPOINT_TRACK, visitorData: this.visitorData, @@ -2930,14 +2627,11 @@ retrack: retrack, timeout: timeout }); - this.startPing(); return this; }; - _proto.update = function update(idptnc, options, lastArg) { var _eventData; - var callback; var beforeCallback; var errorCallback; @@ -2947,10 +2641,8 @@ if (isFunction(lastArg.callback)) callback = lastArg.callback;else if (isFunction(lastArg.onSuccess)) callback = lastArg.onSuccess; if (isFunction(lastArg.onBeforeSend)) beforeCallback = lastArg.onBeforeSend; if (isFunction(lastArg.onError)) errorCallback = lastArg.onError; - if (this.config(KEY_BEACONS)) { if (!isUndefined(lastArg.queue)) queue = Boolean(lastArg.queue); - if (!isUndefined(lastArg.useBeacon)) { useBeacon = Boolean(lastArg.useBeacon); } else if (queue) useBeacon = true; @@ -2960,25 +2652,19 @@ } var eventData = (_eventData = {}, _eventData[IDPTNC] = idptnc, _eventData.project = this.config(KEY_DOMAIN) || Woopra.getHostnameNoWww(), _eventData); var rawData = {}; - for (var _iterator2 = _createForOfIteratorHelperLoose(ACTION_PROPERTY_ALIASES), _step2; !(_step2 = _iterator2()).done;) { var _step2$value = _step2.value, - original = _step2$value[0], - alias = _step2$value[1]; - + original = _step2$value[0], + alias = _step2$value[1]; if (options && options[original]) { rawData[alias] = options[original]; } } - if (this.config(KEY_USE_COOKIES)) { rawData.cookie = this.getCookie() || this.cookie; } - this._dataSetter(eventData, rawData); - this._dataSetter(eventData, jsonStringifyObjectValues(prefixObjectKeys(options, ACTION_PROPERTY_PREFIX, ACTION_PROPERTY_ALIASES))); - this._push({ endpoint: ENDPOINT_UPDATE, fullEventData: eventData, @@ -2988,100 +2674,77 @@ queue: queue, useBeacon: useBeacon }); - return this; }; - _proto.cancelAction = function cancelAction(idptnc) { var _this$lastAction; - var hasCancelled = false; - if (((_this$lastAction = this.lastAction) == null ? void 0 : _this$lastAction.id) === idptnc) { this.lastAction = null; } - this.pending = this.pending.map(function (item) { if (item.params[IDPTNC] === idptnc) { var _extends2; - hasCancelled = true; return _extends({}, item, { meta: _extends({}, item.meta, (_extends2 = {}, _extends2[META_CANCELLED] = true, _extends2[META_DIRTY] = true, _extends2[META_DURATION] = item.lifecycle === LIFECYCLE_PAGE ? item.meta[META_DURATION] + (Date.now() - item.meta[META_TIMESTAMP]) : item.meta[META_DURATION], _extends2[META_RETRACK] = false, _extends2)) }); } - return item; }); - if (hasCancelled) { this.sendBeacons(); } } + /** * Tracks a single form and then resubmits it - */ - ; - + */; _proto.trackForm = function trackForm(eventName, selector, options) { var _this4 = this; - if (eventName === void 0) { eventName = 'Tracked Form'; } - var els; - var _options = isString(selector) ? options || {} : selector || {}; - var bindEl = function bindEl(el, ev, props, opts) { addEventListener$1(el, 'submit', function (e) { _this4.trackFormHandler(e, el, ev, _options); }); }; - if (_options.elements) { els = _options.elements; } else { els = getElement(selector, _options); - } // attach event if form was found - + } + // attach event if form was found if (els && els.length > 0) { for (var i in els) { bindEl(els[i], eventName); } } }; - _proto.trackFormHandler = function trackFormHandler(e, el, eventName, options) { if (options === void 0) { options = {}; } - var trackFinished = false; - if (!el.getAttribute(DATA_TRACKED_ATTRIBUTE)) { var useBeacon = Boolean(this.config(KEY_BEACONS)); var properties = Woopra.serializeForm(el, options); - if (isFunction(options.identify)) { var personData = options.identify(properties) || {}; - if (personData) { this.identify(personData); } } - var onBeforeSend = isFunction(options.onBeforeSend) ? options.onBeforeSend : undefined; - var _onSuccess = isFunction(options.callback) ? function () { return options.callback(properties); } : undefined; - var onError = isFunction(options.onError) ? options.onError : undefined; if (!options.noSubmit) el.setAttribute(DATA_TRACKED_ATTRIBUTE, 1); - if (options.noSubmit || useBeacon) { this.track(eventName, properties, { onBeforeSend: onBeforeSend, @@ -3091,10 +2754,11 @@ }); } else { e.preventDefault(); - e.stopPropagation(); // set timeout to resubmit (default 250ms) + e.stopPropagation(); + + // set timeout to resubmit (default 250ms) // so even if woopra does not reply it will still // submit the form - var timer = setTimeout(function () { if (!trackFinished) { el.submit(); @@ -3113,6 +2777,7 @@ } } } + /** * Tracks clicks * @@ -3122,59 +2787,46 @@ * @param {Object} options (Optional) Options object * @param {Array} options.elements Supports an array of elements (jQuery object) * @param {Boolean} options.noNav (Default: false) If true, will only perform the track event and let the click event bubble up - */ - ; - + */; _proto.trackClick = function trackClick(eventName, selector, properties, options) { var _this5 = this; - if (eventName === void 0) { eventName = 'Item Clicked'; } - if (options === void 0) { options = {}; } - var els = []; - var bindEl = function bindEl(el, ev, props, opts) { addEventListener$1(el, EVENT_CLICK, function (e) { _this5.trackClickHandler(e, el, ev, props, opts); }); }; + /** * Support an array of elements */ - - if (options.elements) { els = options.elements; } else { els = getElement(selector, options); } - if (els) { for (var i = 0; i < els.length; i++) { bindEl(els[i], eventName, properties, options); } } }; - _proto.trackClickHandler = function trackClickHandler(e, el, eventName, properties, options) { var trackFinished = false; - if (!el.getAttribute(DATA_TRACKED_ATTRIBUTE)) { var useBeacon = Boolean(this.config(KEY_BEACONS)); var onBeforeSend = isFunction(options.onBeforeSend) ? options.onBeforeSend : undefined; - var _onSuccess2 = isFunction(options.callback) ? function () { return options.callback(properties); } : undefined; - var onError = isFunction(options.onError) ? options.onError : undefined; if (!options.noNav) el.setAttribute(DATA_TRACKED_ATTRIBUTE, 1); - if (options.noNav || useBeacon) { this.track(eventName, properties, { onBeforeSend: onBeforeSend, @@ -3183,10 +2835,11 @@ useBeacon: useBeacon }); } else { - e.preventDefault(); // set timeout to resubmit (default 250ms) + e.preventDefault(); + + // set timeout to resubmit (default 250ms) // so even if woopra does not reply it will still // click the link - var timer = setTimeout(function () { if (!trackFinished) { el.click(); @@ -3205,46 +2858,38 @@ } } }; - _proto.startPing = function startPing() { var _this6 = this; - if (isUndefined(this.pingInterval)) { this.pingInterval = setInterval(function () { _this6.ping(); }, this.config(KEY_PING_INTERVAL)); } }; - _proto.stopPing = function stopPing() { if (!isUndefined(this.pingInterval)) { clearInterval(this.pingInterval); delete this.pingInterval; } } + /** * Pings tracker with visitor info - */ - ; - + */; _proto.ping = function ping() { if (this.config(KEY_PING) && this.idle < this.config(KEY_IDLE_TIMEOUT)) ; else { this.stopPing(); } - var now = Date.now(); - if (now - this.last_activity > this.config(KEY_IDLE_THRESHOLD)) { this.idle = now - this.last_activity; } - return this; } + /** * Pushes visitor data to server without sending an event - */ - ; - + */; _proto.push = function push(callback) { this._push({ endpoint: ENDPOINT_IDENTIFY, @@ -3253,65 +2898,50 @@ orgData: this.orgData, callback: callback }); - this.sendBeacons(); return this; }; - _proto._updateDurations = function _updateDurations(oldState, newState) { var now = Date.now(); - function updateDuration(item) { var _ref2, _ref3, _ref4; - switch (newState) { case PAGE_LIFECYCLE_STATE_ACTIVE: case PAGE_LIFECYCLE_STATE_PASSIVE: if (now - item.meta[META_LEAVE] > item.params.timeout) { var _ref; - return _ref = {}, _ref[META_EXPIRED] = true, _ref; } - if (newState === PAGE_LIFECYCLE_STATE_ACTIVE && oldState === PAGE_LIFECYCLE_STATE_PASSIVE || newState === PAGE_LIFECYCLE_STATE_PASSIVE && oldState === PAGE_LIFECYCLE_STATE_ACTIVE) { return {}; } - return _ref2 = {}, _ref2[META_TIMESTAMP] = now, _ref2; - case PAGE_LIFECYCLE_STATE_HIDDEN: return _ref3 = {}, _ref3[META_DIRTY] = item.meta[META_DIRTY] || now - item.meta[META_TIMESTAMP] > 100, _ref3[META_DURATION] = item.meta[META_DURATION] + (now - item.meta[META_TIMESTAMP]), _ref3[META_LEAVE] = now, _ref3; - case PAGE_LIFECYCLE_STATE_TERMINATED: return _ref4 = {}, _ref4[META_DIRTY] = item.meta[META_DIRTY] || now - item.meta[META_LEAVE] > 100, _ref4; - default: return {}; } } - this.pending = this.pending.map(function (item) { if (item.lifecycle !== LIFECYCLE_PAGE) return item; return _extends({}, item, { meta: _extends({}, item.meta, updateDuration(item)) }); }); - if (this.lastAction) { this.lastAction = _extends({}, this.lastAction, { meta: _extends({}, this.lastAction.meta, updateDuration(this.lastAction)) }); } }; - _proto._processLifecycle = function _processLifecycle(lifecycle) { var _this7 = this; - var toRetrack = []; this.pending.forEach(function (item) { if (item.meta[META_EXPIRED] && !item.meta[META_CANCELLED] && item.meta[META_RETRACK]) { var _extends3; - toRetrack.push(_extends({}, item.args, { eventData: _extends({}, item.args.eventData || {}, (_extends3 = {}, _extends3[IDPTNC] = randomString(), _extends3.returning = true, _extends3)) })); @@ -3322,7 +2952,6 @@ }); this.pending = this.pending.filter(function (item) { if (item.meta[META_EXPIRED]) return false; - if (item.meta[META_DIRTY]) { _this7.beaconQueue.push({ lifecycle: item.lifecycle, @@ -3333,26 +2962,20 @@ errorCallback: item.errorCallback }); } - if (item.meta[META_CANCELLED]) return false; - if (item.lifecycle === LIFECYCLE_PAGE && lifecycle !== LIFECYCLE_PAGE) { return true; } - return false; }); this.pending = this.pending.map(function (item) { var _extends4; - return _extends({}, item, { meta: _extends({}, item.meta, (_extends4 = {}, _extends4[META_DIRTY] = false, _extends4[META_SENT] = true, _extends4)) }); }); - if (lifecycle === LIFECYCLE_PAGE && this.lastAction) { var _extends5; - this.beaconQueue.push({ lifecycle: LIFECYCLE_PAGE, endpoint: ENDPOINT_TRACK, @@ -3360,25 +2983,19 @@ meta: _extends({}, this.lastAction.meta, (_extends5 = {}, _extends5[META_SENT] = true, _extends5)) }); } - return toRetrack.length > 0; }; - _proto._drainBeaconQueue = function _drainBeaconQueue() { var _this8 = this; - var useCookies = this.config(KEY_USE_COOKIES); - function isEmptyBeaconParams(params) { params[IDPTNC]; - params.cookie; - params.project; - params.event; - var rest = _objectWithoutPropertiesLoose(params, [IDPTNC, "cookie", "project", "event"].map(_toPropertyKey)); - + params.cookie; + params.project; + params.event; + var rest = _objectWithoutPropertiesLoose(params, [IDPTNC, "cookie", "project", "event"].map(_toPropertyKey)); return Object.keys(rest).length > 0; } - var idMap = this.beaconQueue.reduce(function (idMap, item) { idMap[item.params[IDPTNC]] = []; return idMap; @@ -3397,7 +3014,6 @@ }; items.forEach(function (item) { var _this8$lastAction; - if (!data.endpoint) { if (item.endpoint === ENDPOINT_TRACK && item.meta[META_SENT]) { data.endpoint = ENDPOINT_UPDATE; @@ -3405,73 +3021,62 @@ data.endpoint = item.endpoint; } } - data.params.project = item.params.project; data.params.event = item.params.event; data.params[IDPTNC] = item.params[IDPTNC]; - if (useCookies) { data.params.cookie = _this8.getCookie() || _this8.cookie; } - if ((item.lifecycle === LIFECYCLE_PAGE || item.params[IDPTNC] === ((_this8$lastAction = _this8.lastAction) == null ? void 0 : _this8$lastAction.id)) && item.meta[META_DURATION] > 0) { data.params.duration = item.meta[META_DURATION]; } - if (item.meta[SCROLL_DEPTH]) { data.params["" + ACTION_PROPERTY_PREFIX + SCROLL_DEPTH] = Math.round(item.meta[SCROLL_DEPTH] * 10000) / 10000; } - if (!item.meta[META_SENT]) { data.params = _extends({}, data.params, item.params); - if (isFunction(item.successCallback)) { data.onSuccess.push(item.successCallback); } - if (isFunction(item.errorCallback)) { data.onError.push(item.errorCallback); } } }); - if (!data.params.project) { data.params.project = _this8.config(KEY_DOMAIN) || Woopra.getHostnameNoWww(); } - return data; }).filter(function (item) { return isEmptyBeaconParams(item.params); }); var sendBeacon = navigator.sendBeacon && navigator.sendBeacon.bind(navigator); + var useBeacon = Boolean(this.config(KEY_BEACONS)) && isFunction(sendBeacon); - var useBeacon = Boolean(this.config(KEY_BEACONS)) && isFunction(sendBeacon); // TODO: fallback to sending via loadScript if sendBeacon fails + // TODO: fallback to sending via loadScript if sendBeacon fails // this probably requires a more stream-like approach to processing the queue - - if (toSend.length > 0) { if (useBeacon) { var payloads = ['']; var lines = toSend.map(function (_ref5) { var endpoint = _ref5.endpoint, - params = _ref5.params; + params = _ref5.params; return JSON.stringify({ endpoint: endpoint, params: params }); - }); // chunk beacons into < 64 KiB chunks + }); + // chunk beacons into < 64 KiB chunks lines.forEach(function (line) { if (new Blob(["" + payloads[payloads.length - 1] + line]).size >= 65000) { payloads.push(''); } - payloads[payloads.length - 1] += line + "\n"; }); payloads.forEach(function (payload, index) { var formData = new FormData(); formData.append('payload', payload.slice(0, -1)); - try { sendBeacon(_this8.getEndpoint('push'), formData); } catch (e) { @@ -3486,55 +3091,48 @@ } else { toSend.forEach(function (item) { var endpoint = _this8.getEndpoint(item.endpoint); - var queryString = Woopra.buildUrlParams(_extends({ close: true }, item.params)); var scriptUrl = endpoint + "?" + queryString; - var onSuccess = function onSuccess() { return item.onSuccess.forEach(function (callback) { return callCallback(callback, item.params.event); }); }; - var onError = function onError() { return item.onError.forEach(function (callback) { return callCallback(callback, item.params.event); }); }; - Woopra.loadScript(scriptUrl, onSuccess, onError); }); } } }; - _proto.sendBeacons = function sendBeacons(lifecycle) { if (lifecycle === void 0) { lifecycle = LIFECYCLE_ACTION; } - this._processLifecycle(lifecycle); - this._drainBeaconQueue(); } + /** * synchronous sleep - */ - ; - - _proto.sleep = function sleep() {// Why does this exist? + */; + _proto.sleep = function sleep() { + // Why does this exist? }; - _proto._touch = function _touch(last_activity) { if (last_activity === void 0) { last_activity = Date.now(); } - this.last_activity = last_activity; this.idle = 0; - } // User Action tracking and event handlers + } + + // User Action tracking and event handlers /** * Clicks @@ -3542,31 +3140,26 @@ /** * Measure when the user last moved their mouse to update idle state - */ - ; - + */; _proto.moved = function moved(e, last_activity) { this._touch(last_activity); }; - _proto.onClick = function onClick(e) { if (!this.config(KEY_CLICK_TRACKING)) return; var useBeacon = Boolean(this.config(KEY_BEACONS)); var target = e.target; var clickTarget = findParentElement(target, this.config(KEY_CLICK_TRACKING_MATCHER_SELECTORS)); - if (clickTarget) { - var tagName = clickTarget.tagName.toLowerCase(); // get attributes starting with data-woopra- + var tagName = clickTarget.tagName.toLowerCase(); + // get attributes starting with data-woopra- var customProperties = clickTarget.getAttributeNames().reduce(function (result, name) { if (Woopra.startsWith(name, 'data-woopra-')) { result[name.slice(12)] = clickTarget.getAttribute(name); } - return result; }, {}); var eventName = clickTarget.getAttribute('data-woopra') || 'button click'; - var properties = _extends({ 'page url': this.getPageUrl(), 'page title': this.getPageTitle(), @@ -3579,33 +3172,26 @@ url: clickTarget.href, 'pointer type': e.pointerType }, customProperties); - if (this.config(KEY_SAVE_URL_HASH)) { var hash = this.getPageHash(); - if (hash !== '' && hash !== '#') { properties['page hash'] = hash; } } - this.track(eventName, properties, { useBeacon: useBeacon }); } }; - _proto.onLink = function onLink(e, link) { var useBeacon = Boolean(this.config(KEY_BEACONS)); var downloadTypes = this.config(KEY_DOWNLOAD_EXTENSIONS); var downloadFileTypeRegexp = new RegExp("(?:" + downloadTypes.join('|') + ")($|&)", 'i'); var isDownloadFileType = downloadFileTypeRegexp.test(link.pathname); - if (this.config(KEY_DOWNLOAD_TRACKING) && isDownloadFileType) { fire(EVENT_DOWNLOAD, link.href); - if (link.target !== TARGET_BLANK && Woopra.leftClick(e)) { link.setAttribute(DATA_TRACKED_ATTRIBUTE, 1); - if (!useBeacon) { e.preventDefault(); e.stopPropagation(); @@ -3614,21 +3200,19 @@ }, this.config(KEY_DOWNLOAD_PAUSE)); } } - } // Make sure + } + + // Make sure // * outgoing tracking is enabled // * this URL does not match a download URL (doesn't end // in a binary file extension) // * not ignoring subdomains OR link hostname is not a partial // match of current hostname (to check for subdomains), // * hostname is not empty - - if (this.config(KEY_OUTGOING_TRACKING) && !isDownloadFileType && Woopra.isOutgoingLink(link.hostname)) { fire(EVENT_OUTGOING, link.href); - if (link.target !== TARGET_BLANK && Woopra.leftClick(e)) { link.setAttribute(DATA_TRACKED_ATTRIBUTE, 1); - if (!useBeacon) { e.preventDefault(); e.stopPropagation(); @@ -3639,7 +3223,6 @@ } } }; - _proto.downloaded = function downloaded(url) { var useBeacon = Boolean(this.config(KEY_BEACONS)); this.track(EVENT_DOWNLOAD, { @@ -3648,7 +3231,6 @@ useBeacon: useBeacon }); }; - _proto.outgoing = function outgoing(url) { var useBeacon = Boolean(this.config(KEY_BEACONS)); this.track(EVENT_OUTGOING, { @@ -3657,52 +3239,37 @@ useBeacon: useBeacon }); }; - _proto.onUnload = function onUnload() { if (!this.isUnloading) { this.isUnloading = true; - this._updateDurations(PAGE_LIFECYCLE_STATE_HIDDEN, PAGE_LIFECYCLE_STATE_TERMINATED); - this.sendBeacons(LIFECYCLE_PAGE); } }; - _proto.onPageStateChange = function onPageStateChange(e) { var newState = e.newState, - oldState = e.oldState; - + oldState = e.oldState; switch (newState) { case PAGE_LIFECYCLE_STATE_ACTIVE: this._updateDurations(oldState, newState); - this.sendBeacons(); - this._touch(); - break; - case PAGE_LIFECYCLE_STATE_PASSIVE: this._updateDurations(oldState, newState); - this.sendBeacons(); break; - case PAGE_LIFECYCLE_STATE_HIDDEN: this._updateDurations(oldState, newState); - this.sendBeacons(); break; - case PAGE_LIFECYCLE_STATE_TERMINATED: this.onUnload(); break; } }; - _proto.onScroll = function onScroll(e) { this._touch(); - var scrollDepth = getScrollDepth(); var pages = this.pending.filter(function (item) { return item.lifecycle === LIFECYCLE_PAGE; @@ -3711,56 +3278,49 @@ pv.meta[SCROLL_DEPTH] = Math.min(1, Math.max(scrollDepth, pv.meta[SCROLL_DEPTH] || 0)); }); } + /** * Event handler for decorating an element with a URL (for now only * anchor tags) - */ - ; - + */; _proto.autoDecorate = function autoDecorate(elem) { var xdm = this.config(KEY_CROSS_DOMAIN); if (!xdm) return; - var domains = isString(xdm) ? [xdm] : _isArray(xdm) ? xdm : []; + var domains = isString(xdm) ? [xdm] : isArray(xdm) ? xdm : []; var canDecorate; - for (var i = 0; i < domains.length; i++) { if (elem.hostname.indexOf(domains[i]) !== -1 && elem.hostname !== Woopra.location('hostname')) { canDecorate = true; break; } } - if (canDecorate) { var decorated = this.decorate(elem); - if (decorated) { - elem.href = decorated; // bind an event handler on mouseup to remove the url + elem.href = decorated; + // bind an event handler on mouseup to remove the url } } } + /** * Resets cookie - */ - ; - + */; _proto.reset = function reset() { Woopra.docCookies.removeItem(this.config(KEY_COOKIE_NAME), this.config(KEY_COOKIE_PATH), this.config(KEY_COOKIE_DOMAIN)); this.cookie = null; - this._setupCookie(); } + /** * Decorates a given URL with a __woopraid query param with value of * the current cookie - */ - ; - + */; _proto.decorate = function decorate(url) { var el; var query; var pathname; var host; - if (isString(url)) { el = document.createElement('a'); el.href = url; @@ -3768,7 +3328,6 @@ } else if (url && url.href) { el = url; } - if (el) { query = el.search ? '&' : '?'; pathname = el.pathname && el.pathname.charAt(0) === '/' ? el.pathname : "/" + el.pathname; @@ -3776,66 +3335,53 @@ return el.protocol + "//" + host + pathname + el.search + query + XDM_PARAM_NAME + "=" + this.cookie + el.hash; } } + /** * Undecorates a URL with __woopraid query param - */ - ; - + */; _proto.undecorate = function undecorate(url) { var regex = new RegExp("[?&]+(?:" + XDM_PARAM_NAME + ")=([^&#]*)", 'gi'); var _url = url; - if (url && url.href) { _url = url.href; } - if (_url) { return _url.replace(regex, ''); } }; - _proto.getPageUrl = function getPageUrl() { if (this.config(KEY_IGNORE_QUERY_URL)) { return Woopra.location('pathname'); } - return "" + Woopra.location('pathname') + Woopra.location('search'); }; - _proto.getPageHash = function getPageHash() { return Woopra.location('hash'); }; - _proto.getPageTitle = function getPageTitle() { return document.getElementsByTagName('title').length === 0 ? '' : document.getElementsByTagName('title')[0].innerHTML; }; - _proto.getDomainName = function getDomainName() { return Woopra.location('hostname'); }; - _proto.getURI = function getURI() { return Woopra.location('href'); } + /** * Retrieves a Woopra unique id from a URL's query param (__woopraid) * * @param {String} href The full URL to extract from - */ - ; - + */; _proto.getUrlId = function getUrlId(href) { if (href === void 0) { href = Woopra.location('href'); } - var matches = href.match(URL_ID_REGEX); - if (matches && matches[1]) { return matches[1]; } }; - _proto.getOptionParams = function getOptionParams() { // default params var o = { @@ -3847,44 +3393,39 @@ app: this.config(KEY_APP), referer: document.referrer }; - if (!this.config(KEY_DOMAIN)) { o._warn = 'no_domain'; - if (Woopra.getHostnameNoWww() !== Woopra.getDomain()) { o._warn += ',domain_mismatch'; } - } // set cookie if configured - + } + // set cookie if configured if (this.config(KEY_USE_COOKIES)) { o.cookie = this.getCookie() || this.cookie; - } // set ip if configured - + } + // set ip if configured if (this.config(KEY_IP)) { o.ip = this.config(KEY_IP); } - return o; } + /** * Stop ping timers and cleanup any globals. Shouldn't really * be needed by clients. - */ - ; - + */; _proto.dispose = function dispose() { this.stopPing(); - for (var id in this.__l) { if (this.__l.hasOwnProperty(id)) { removeHandler(id, this.instanceName); } } + this.__l = null; - this.__l = null; // cleanup global - + // cleanup global if (!isUndefined(window[this.instanceName])) { try { delete window[this.instanceName]; @@ -3893,34 +3434,31 @@ } } }; - return Tracker; }(); if (!window.WoopraTracker) attachGlobalEvents(); window.WoopraTracker = Tracker; window.WoopraLoadScript = Woopra.loadScript; - if (!isUndefined(window.exports)) { Woopra.Tracker = Tracker; window.exports.Woopra = Woopra; - if (isFunction(window.woopraLoaded)) { window.woopraLoaded(); window.woopraLoaded = null; } - } // Initialize instances & preloaded settings/events - + } + // Initialize instances & preloaded settings/events var _queue = window.__woo || window._w; - if (!isUndefined(_queue)) { for (var name in _queue) { if (_queue.hasOwnProperty(name)) { var instance = new Tracker(name); - instance.init(); // DO NOT REMOVE - // compatibility with old tracker and chat + instance.init(); + // DO NOT REMOVE + // compatibility with old tracker and chat if (isUndefined(window.woopraTracker)) { window.woopraTracker = instance; } @@ -3928,4 +3466,4 @@ } } -}()); +})(); diff --git a/package.json b/package.json index 1efeb5b..90f3224 100644 --- a/package.json +++ b/package.json @@ -22,36 +22,43 @@ ], "license": "MIT", "scripts": { - "build": "rollup -c rollup.config.js", - "build:watch": "rollup -c rollup.config.watch.js -w", - "build:snippet": "rollup -c rollup.config.snippet.js", + "build": "rollup -c rollup.config.mjs", + "build:watch": "rollup -c rollup.config.watch.mjs -w", + "build:snippet": "rollup -c rollup.config.snippet.mjs", "test": "browserstack-runner" }, + "engines": { + "yarn": "^1.9.4", + "node": "^18.0.0" + }, "devDependencies": { - "@babel/core": "^7.15.5", - "@babel/eslint-parser": "^7.15.4", - "@babel/preset-env": "^7.15.6", - "@optimize-lodash/rollup-plugin": "^1.0.0", - "@rollup/plugin-babel": "^5.3.0", - "@rollup/plugin-node-resolve": "^13.0.4", - "babel-plugin-lodash": "^3.3.4", + "@babel/core": "^7.23.7", + "@babel/eslint-parser": "^7.23.3", + "@babel/preset-env": "^7.23.8", + "@optimize-lodash/rollup-plugin": "^4.0.4", + "@rollup/plugin-babel": "^6.0.4", + "@rollup/plugin-node-resolve": "^15.2.3", + "@rollup/plugin-terser": "^0.4.4", + "@sigmacomputing/babel-plugin-lodash": "^3.3.5", "browserstack-runner": "^0.9.4", - "eslint": "^7.32.0", - "eslint-plugin-import": "^2.24.2", + "eslint": "^8.56.0", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-prettier": "^5.1.3", + "eslint-plugin-simple-import-sort": "^10.0.0", + "eslint-plugin-unused-imports": "^3.0.0", "husky": "^7.0.2", - "prettier": "^2.4.0", - "pretty-quick": "^3.1.1", - "rollup": "^2.56.3", - "rollup-plugin-license": "^2.7.0", - "rollup-plugin-serve": "^1.1.0", - "rollup-plugin-terser": "^7.0.2" + "lint-staged": "^15.2.0", + "prettier": "^3.1.1", + "rollup": "^4.9.4", + "rollup-plugin-license": "^3.2.0", + "rollup-plugin-serve": "^1.1.1" }, "dependencies": { "lodash-es": "^4.17.21" }, "husky": { "hooks": { - "pre-commit": "pretty-quick --staged" + "pre-commit": "lint-staged" } } } diff --git a/rollup.config.js b/rollup.config.mjs similarity index 78% rename from rollup.config.js rename to rollup.config.mjs index 193edf7..bf7bcd4 100644 --- a/rollup.config.js +++ b/rollup.config.mjs @@ -1,13 +1,17 @@ import { optimizeLodashImports } from '@optimize-lodash/rollup-plugin'; import babel from '@rollup/plugin-babel'; import { nodeResolve } from '@rollup/plugin-node-resolve'; -import fs from 'fs'; +import terser from '@rollup/plugin-terser'; +import fs from 'fs/promises'; import path from 'path'; import license from 'rollup-plugin-license'; -import { terser } from 'rollup-plugin-terser'; +import { fileURLToPath } from 'url'; -const licenseFile = fs.readFileSync(path.join(__dirname, 'LICENSE'), 'utf8'); -const pageLifecyclelicenseFile = fs.readFileSync( +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); + +const licenseFile = await fs.readFile(path.join(__dirname, 'LICENSE'), 'utf8'); +const pageLifecyclelicenseFile = await fs.readFile( path.join(__dirname, 'page-lifecycle.LICENSE.txt'), 'utf8' ); diff --git a/rollup.config.snippet.js b/rollup.config.snippet.mjs similarity index 100% rename from rollup.config.snippet.js rename to rollup.config.snippet.mjs diff --git a/rollup.config.watch.js b/rollup.config.watch.js deleted file mode 100644 index 18e956e..0000000 --- a/rollup.config.watch.js +++ /dev/null @@ -1,29 +0,0 @@ -import { optimizeLodashImports } from '@optimize-lodash/rollup-plugin'; -import babel from '@rollup/plugin-babel'; -import { nodeResolve } from '@rollup/plugin-node-resolve'; -import serve from 'rollup-plugin-serve'; -import { terser } from 'rollup-plugin-terser'; - -export default { - input: 'src/index.js', - output: [ - { - file: 'dist/wpt.js', - format: 'iife', - name: 'Woopra' - }, - { - file: 'dist/w.js', - format: 'iife', - sourcemap: true, - name: 'Woopra', - plugins: [terser({ ecma: 5 })] - } - ], - plugins: [ - nodeResolve(), - babel({ babelHelpers: 'bundled' }), - optimizeLodashImports(), - serve('.') - ] -}; diff --git a/rollup.config.watch.mjs b/rollup.config.watch.mjs new file mode 100644 index 0000000..5c68ab9 --- /dev/null +++ b/rollup.config.watch.mjs @@ -0,0 +1,8 @@ +import serve from 'rollup-plugin-serve'; + +import config from './rollup.config.mjs'; + +export default { + ...config, + plugins: [...config.plugins, serve('.')] +}; diff --git a/yarn.lock b/yarn.lock index f37cc58..3143c83 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,412 +2,303 @@ # yarn lockfile v1 -"@babel/code-frame@7.12.11": - version "7.12.11" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" - integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== - dependencies: - "@babel/highlight" "^7.10.4" - -"@babel/code-frame@^7.10.4", "@babel/code-frame@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.14.5.tgz#23b08d740e83f49c5e59945fbf1b43e80bbf4edb" - integrity sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw== - dependencies: - "@babel/highlight" "^7.14.5" - -"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.15.0": - version "7.15.0" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.15.0.tgz#2dbaf8b85334796cafbb0f5793a90a2fc010b176" - integrity sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA== - -"@babel/core@^7.15.5": - version "7.15.5" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.15.5.tgz#f8ed9ace730722544609f90c9bb49162dc3bf5b9" - integrity sha512-pYgXxiwAgQpgM1bNkZsDEq85f0ggXMA5L7c+o3tskGMh2BunCI9QUwB9Z4jpvXUOuMdyGKiGKQiRe11VS6Jzvg== - dependencies: - "@babel/code-frame" "^7.14.5" - "@babel/generator" "^7.15.4" - "@babel/helper-compilation-targets" "^7.15.4" - "@babel/helper-module-transforms" "^7.15.4" - "@babel/helpers" "^7.15.4" - "@babel/parser" "^7.15.5" - "@babel/template" "^7.15.4" - "@babel/traverse" "^7.15.4" - "@babel/types" "^7.15.4" - convert-source-map "^1.7.0" +"@aashutoshrathi/word-wrap@^1.2.3": + version "1.2.6" + resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" + integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== + +"@ampproject/remapping@^2.2.0": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" + integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== + dependencies: + "@jridgewell/gen-mapping" "^0.3.0" + "@jridgewell/trace-mapping" "^0.3.9" + +"@babel/code-frame@^7.22.13", "@babel/code-frame@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.23.5.tgz#9009b69a8c602293476ad598ff53e4562e15c244" + integrity sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA== + dependencies: + "@babel/highlight" "^7.23.4" + chalk "^2.4.2" + +"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.23.3", "@babel/compat-data@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.5.tgz#ffb878728bb6bdcb6f4510aa51b1be9afb8cfd98" + integrity sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw== + +"@babel/core@^7.23.7": + version "7.23.7" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.7.tgz#4d8016e06a14b5f92530a13ed0561730b5c6483f" + integrity sha512-+UpDgowcmqe36d4NwqvKsyPMlOLNGMsfMmQ5WGCu+siCe3t3dfe9njrzGfdN4qq+bcNUt0+Vw6haRxBOycs4dw== + dependencies: + "@ampproject/remapping" "^2.2.0" + "@babel/code-frame" "^7.23.5" + "@babel/generator" "^7.23.6" + "@babel/helper-compilation-targets" "^7.23.6" + "@babel/helper-module-transforms" "^7.23.3" + "@babel/helpers" "^7.23.7" + "@babel/parser" "^7.23.6" + "@babel/template" "^7.22.15" + "@babel/traverse" "^7.23.7" + "@babel/types" "^7.23.6" + convert-source-map "^2.0.0" debug "^4.1.0" gensync "^1.0.0-beta.2" - json5 "^2.1.2" - semver "^6.3.0" - source-map "^0.5.0" + json5 "^2.2.3" + semver "^6.3.1" -"@babel/eslint-parser@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.15.4.tgz#46385943726291fb3e8db99522c8099b15684387" - integrity sha512-hPMIAmGNbmQzXJIo2P43Zj9UhRmGev5f9nqdBFOWNGDGh6XKmjby79woBvg6y0Jur6yRfQBneDbUQ8ZVc1krFw== +"@babel/eslint-parser@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.23.3.tgz#7bf0db1c53b54da0c8a12627373554a0828479ca" + integrity sha512-9bTuNlyx7oSstodm1cR1bECj4fkiknsDa1YniISkJemMY3DGhJNYBECbe6QD/q54mp2J8VO66jW3/7uP//iFCw== dependencies: - eslint-scope "^5.1.1" + "@nicolo-ribaudo/eslint-scope-5-internals" "5.1.1-v1" eslint-visitor-keys "^2.1.0" - semver "^6.3.0" + semver "^6.3.1" -"@babel/generator@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.15.4.tgz#85acb159a267ca6324f9793986991ee2022a05b0" - integrity sha512-d3itta0tu+UayjEORPNz6e1T3FtvWlP5N4V5M+lhp/CxT4oAA7/NcScnpRyspUMLK6tu9MNHmQHxRykuN2R7hw== +"@babel/generator@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.6.tgz#9e1fca4811c77a10580d17d26b57b036133f3c2e" + integrity sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw== dependencies: - "@babel/types" "^7.15.4" + "@babel/types" "^7.23.6" + "@jridgewell/gen-mapping" "^0.3.2" + "@jridgewell/trace-mapping" "^0.3.17" jsesc "^2.5.1" - source-map "^0.5.0" - -"@babel/helper-annotate-as-pure@^7.14.5", "@babel/helper-annotate-as-pure@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.15.4.tgz#3d0e43b00c5e49fdb6c57e421601a7a658d5f835" - integrity sha512-QwrtdNvUNsPCj2lfNQacsGSQvGX8ee1ttrBrcozUP2Sv/jylewBP/8QFe6ZkBsC8T/GYWonNAWJV4aRR9AL2DA== - dependencies: - "@babel/types" "^7.15.4" - -"@babel/helper-builder-binary-assignment-operator-visitor@^7.14.5": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.15.4.tgz#21ad815f609b84ee0e3058676c33cf6d1670525f" - integrity sha512-P8o7JP2Mzi0SdC6eWr1zF+AEYvrsZa7GSY1lTayjF5XJhVH0kjLYUZPvTMflP7tBgZoe9gIhTa60QwFpqh/E0Q== - dependencies: - "@babel/helper-explode-assignable-expression" "^7.15.4" - "@babel/types" "^7.15.4" - -"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.4.tgz#cf6d94f30fbefc139123e27dd6b02f65aeedb7b9" - integrity sha512-rMWPCirulnPSe4d+gwdWXLfAXTTBj8M3guAf5xFQJ0nvFY7tfNAFnWdqaHegHlgDZOCT4qvhF3BYlSJag8yhqQ== - dependencies: - "@babel/compat-data" "^7.15.0" - "@babel/helper-validator-option" "^7.14.5" - browserslist "^4.16.6" - semver "^6.3.0" - -"@babel/helper-create-class-features-plugin@^7.14.5", "@babel/helper-create-class-features-plugin@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.15.4.tgz#7f977c17bd12a5fba363cb19bea090394bf37d2e" - integrity sha512-7ZmzFi+DwJx6A7mHRwbuucEYpyBwmh2Ca0RvI6z2+WLZYCqV0JOaLb+u0zbtmDicebgKBZgqbYfLaKNqSgv5Pw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.15.4" - "@babel/helper-function-name" "^7.15.4" - "@babel/helper-member-expression-to-functions" "^7.15.4" - "@babel/helper-optimise-call-expression" "^7.15.4" - "@babel/helper-replace-supers" "^7.15.4" - "@babel/helper-split-export-declaration" "^7.15.4" - -"@babel/helper-create-regexp-features-plugin@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.5.tgz#c7d5ac5e9cf621c26057722fb7a8a4c5889358c4" - integrity sha512-TLawwqpOErY2HhWbGJ2nZT5wSkR192QpN+nBg1THfBfftrlvOh+WbhrxXCH4q4xJ9Gl16BGPR/48JA+Ryiho/A== - dependencies: - "@babel/helper-annotate-as-pure" "^7.14.5" - regexpu-core "^4.7.1" -"@babel/helper-define-polyfill-provider@^0.2.2": - version "0.2.3" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.3.tgz#0525edec5094653a282688d34d846e4c75e9c0b6" - integrity sha512-RH3QDAfRMzj7+0Nqu5oqgO5q9mFtQEVvCRsi8qCEfzLR9p2BHfn5FzhSB2oj1fF7I2+DcTORkYaQ6aTR9Cofew== - dependencies: - "@babel/helper-compilation-targets" "^7.13.0" - "@babel/helper-module-imports" "^7.12.13" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/traverse" "^7.13.0" +"@babel/helper-annotate-as-pure@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz#e7f06737b197d580a01edf75d97e2c8be99d3882" + integrity sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-builder-binary-assignment-operator-visitor@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz#5426b109cf3ad47b91120f8328d8ab1be8b0b956" + integrity sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw== + dependencies: + "@babel/types" "^7.22.15" + +"@babel/helper-compilation-targets@^7.22.15", "@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz#4d79069b16cbcf1461289eccfbbd81501ae39991" + integrity sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ== + dependencies: + "@babel/compat-data" "^7.23.5" + "@babel/helper-validator-option" "^7.23.5" + browserslist "^4.22.2" + lru-cache "^5.1.1" + semver "^6.3.1" + +"@babel/helper-create-class-features-plugin@^7.22.15": + version "7.23.7" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.7.tgz#b2e6826e0e20d337143655198b79d58fdc9bd43d" + integrity sha512-xCoqR/8+BoNnXOY7RVSgv6X+o7pmT5q1d+gGcRlXYkI+9B31glE4jeejhKVpA04O1AtzOt7OSQ6VYKP5FcRl9g== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-function-name" "^7.23.0" + "@babel/helper-member-expression-to-functions" "^7.23.0" + "@babel/helper-optimise-call-expression" "^7.22.5" + "@babel/helper-replace-supers" "^7.22.20" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + semver "^6.3.1" + +"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.15", "@babel/helper-create-regexp-features-plugin@^7.22.5": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz#5ee90093914ea09639b01c711db0d6775e558be1" + integrity sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + regexpu-core "^5.3.1" + semver "^6.3.1" + +"@babel/helper-define-polyfill-provider@^0.4.4": + version "0.4.4" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.4.tgz#64df615451cb30e94b59a9696022cffac9a10088" + integrity sha512-QcJMILQCu2jm5TFPGA3lCpJJTeEP+mqeXooG/NZbg/h5FTFi6V0+99ahlRsW8/kRLyb24LZVCCiclDedhLKcBA== + dependencies: + "@babel/helper-compilation-targets" "^7.22.6" + "@babel/helper-plugin-utils" "^7.22.5" debug "^4.1.1" lodash.debounce "^4.0.8" resolve "^1.14.2" - semver "^6.1.2" - -"@babel/helper-explode-assignable-expression@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.15.4.tgz#f9aec9d219f271eaf92b9f561598ca6b2682600c" - integrity sha512-J14f/vq8+hdC2KoWLIQSsGrC9EFBKE4NFts8pfMpymfApds+fPqR30AOUWc4tyr56h9l/GA1Sxv2q3dLZWbQ/g== - dependencies: - "@babel/types" "^7.15.4" - -"@babel/helper-function-name@^7.14.5", "@babel/helper-function-name@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.15.4.tgz#845744dafc4381a4a5fb6afa6c3d36f98a787ebc" - integrity sha512-Z91cOMM4DseLIGOnog+Z8OI6YseR9bua+HpvLAQ2XayUGU+neTtX+97caALaLdyu53I/fjhbeCnWnRH1O3jFOw== - dependencies: - "@babel/helper-get-function-arity" "^7.15.4" - "@babel/template" "^7.15.4" - "@babel/types" "^7.15.4" - -"@babel/helper-get-function-arity@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.15.4.tgz#098818934a137fce78b536a3e015864be1e2879b" - integrity sha512-1/AlxSF92CmGZzHnC515hm4SirTxtpDnLEJ0UyEMgTMZN+6bxXKg04dKhiRx5Enel+SUA1G1t5Ed/yQia0efrA== - dependencies: - "@babel/types" "^7.15.4" -"@babel/helper-hoist-variables@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.15.4.tgz#09993a3259c0e918f99d104261dfdfc033f178df" - integrity sha512-VTy085egb3jUGVK9ycIxQiPbquesq0HUQ+tPO0uv5mPEBZipk+5FkRKiWq5apuyTE9FUrjENB0rCf8y+n+UuhA== - dependencies: - "@babel/types" "^7.15.4" - -"@babel/helper-member-expression-to-functions@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.4.tgz#bfd34dc9bba9824a4658b0317ec2fd571a51e6ef" - integrity sha512-cokOMkxC/BTyNP1AlY25HuBWM32iCEsLPI4BHDpJCHHm1FU2E7dKWWIXJgQgSFiu4lp8q3bL1BIKwqkSUviqtA== - dependencies: - "@babel/types" "^7.15.4" - -"@babel/helper-module-imports@^7.0.0-beta.49", "@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.14.5", "@babel/helper-module-imports@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.15.4.tgz#e18007d230632dea19b47853b984476e7b4e103f" - integrity sha512-jeAHZbzUwdW/xHgHQ3QmWR4Jg6j15q4w/gCfwZvtqOxoo5DKtLHk8Bsf4c5RZRC7NmLEs+ohkdq8jFefuvIxAA== - dependencies: - "@babel/types" "^7.15.4" - -"@babel/helper-module-transforms@^7.14.5", "@babel/helper-module-transforms@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.15.4.tgz#962cc629a7f7f9a082dd62d0307fa75fe8788d7c" - integrity sha512-9fHHSGE9zTC++KuXLZcB5FKgvlV83Ox+NLUmQTawovwlJ85+QMhk1CnVk406CQVj97LaWod6KVjl2Sfgw9Aktw== - dependencies: - "@babel/helper-module-imports" "^7.15.4" - "@babel/helper-replace-supers" "^7.15.4" - "@babel/helper-simple-access" "^7.15.4" - "@babel/helper-split-export-declaration" "^7.15.4" - "@babel/helper-validator-identifier" "^7.14.9" - "@babel/template" "^7.15.4" - "@babel/traverse" "^7.15.4" - "@babel/types" "^7.15.4" - -"@babel/helper-optimise-call-expression@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.15.4.tgz#f310a5121a3b9cc52d9ab19122bd729822dee171" - integrity sha512-E/z9rfbAOt1vDW1DR7k4SzhzotVV5+qMciWV6LaG1g4jeFrkDlJedjtV4h0i4Q/ITnUu+Pk08M7fczsB9GXBDw== - dependencies: - "@babel/types" "^7.15.4" +"@babel/helper-environment-visitor@^7.22.20": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167" + integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz#5ac822ce97eec46741ab70a517971e443a70c5a9" - integrity sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ== - -"@babel/helper-remap-async-to-generator@^7.14.5", "@babel/helper-remap-async-to-generator@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.15.4.tgz#2637c0731e4c90fbf58ac58b50b2b5a192fc970f" - integrity sha512-v53MxgvMK/HCwckJ1bZrq6dNKlmwlyRNYM6ypaRTdXWGOE2c1/SCa6dL/HimhPulGhZKw9W0QhREM583F/t0vQ== +"@babel/helper-function-name@^7.22.5", "@babel/helper-function-name@^7.23.0": + version "7.23.0" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759" + integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw== dependencies: - "@babel/helper-annotate-as-pure" "^7.15.4" - "@babel/helper-wrap-function" "^7.15.4" - "@babel/types" "^7.15.4" + "@babel/template" "^7.22.15" + "@babel/types" "^7.23.0" -"@babel/helper-replace-supers@^7.14.5", "@babel/helper-replace-supers@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.15.4.tgz#52a8ab26ba918c7f6dee28628b07071ac7b7347a" - integrity sha512-/ztT6khaXF37MS47fufrKvIsiQkx1LBRvSJNzRqmbyeZnTwU9qBxXYLaaT/6KaxfKhjs2Wy8kG8ZdsFUuWBjzw== +"@babel/helper-hoist-variables@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb" + integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== dependencies: - "@babel/helper-member-expression-to-functions" "^7.15.4" - "@babel/helper-optimise-call-expression" "^7.15.4" - "@babel/traverse" "^7.15.4" - "@babel/types" "^7.15.4" + "@babel/types" "^7.22.5" -"@babel/helper-simple-access@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.15.4.tgz#ac368905abf1de8e9781434b635d8f8674bcc13b" - integrity sha512-UzazrDoIVOZZcTeHHEPYrr1MvTR/K+wgLg6MY6e1CJyaRhbibftF6fR2KU2sFRtI/nERUZR9fBd6aKgBlIBaPg== +"@babel/helper-member-expression-to-functions@^7.22.15", "@babel/helper-member-expression-to-functions@^7.23.0": + version "7.23.0" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz#9263e88cc5e41d39ec18c9a3e0eced59a3e7d366" + integrity sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA== dependencies: - "@babel/types" "^7.15.4" + "@babel/types" "^7.23.0" + +"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.18.6", "@babel/helper-module-imports@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz#16146307acdc40cc00c3b2c647713076464bdbf0" + integrity sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w== + dependencies: + "@babel/types" "^7.22.15" -"@babel/helper-skip-transparent-expression-wrappers@^7.14.5", "@babel/helper-skip-transparent-expression-wrappers@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.15.4.tgz#707dbdba1f4ad0fa34f9114fc8197aec7d5da2eb" - integrity sha512-BMRLsdh+D1/aap19TycS4eD1qELGrCBJwzaY9IE8LrpJtJb+H7rQkPIdsfgnMtLBA6DJls7X9z93Z4U8h7xw0A== - dependencies: - "@babel/types" "^7.15.4" - -"@babel/helper-split-export-declaration@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.15.4.tgz#aecab92dcdbef6a10aa3b62ab204b085f776e257" - integrity sha512-HsFqhLDZ08DxCpBdEVtKmywj6PQbwnF6HHybur0MAnkAKnlS6uHkwnmRIkElB2Owpfb4xL4NwDmDLFubueDXsw== - dependencies: - "@babel/types" "^7.15.4" - -"@babel/helper-validator-identifier@^7.14.5", "@babel/helper-validator-identifier@^7.14.9": - version "7.14.9" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz#6654d171b2024f6d8ee151bf2509699919131d48" - integrity sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g== - -"@babel/helper-validator-option@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz#6e72a1fff18d5dfcb878e1e62f1a021c4b72d5a3" - integrity sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow== - -"@babel/helper-wrap-function@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.15.4.tgz#6f754b2446cfaf3d612523e6ab8d79c27c3a3de7" - integrity sha512-Y2o+H/hRV5W8QhIfTpRIBwl57y8PrZt6JM3V8FOo5qarjshHItyH5lXlpMfBfmBefOqSCpKZs/6Dxqp0E/U+uw== - dependencies: - "@babel/helper-function-name" "^7.15.4" - "@babel/template" "^7.15.4" - "@babel/traverse" "^7.15.4" - "@babel/types" "^7.15.4" - -"@babel/helpers@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.15.4.tgz#5f40f02050a3027121a3cf48d497c05c555eaf43" - integrity sha512-V45u6dqEJ3w2rlryYYXf6i9rQ5YMNu4FLS6ngs8ikblhu2VdR1AqAd6aJjBzmf2Qzh6KOLqKHxEN9+TFbAkAVQ== - dependencies: - "@babel/template" "^7.15.4" - "@babel/traverse" "^7.15.4" - "@babel/types" "^7.15.4" - -"@babel/highlight@^7.10.4", "@babel/highlight@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.14.5.tgz#6861a52f03966405001f6aa534a01a24d99e8cd9" - integrity sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg== - dependencies: - "@babel/helper-validator-identifier" "^7.14.5" - chalk "^2.0.0" +"@babel/helper-module-transforms@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz#d7d12c3c5d30af5b3c0fcab2a6d5217773e2d0f1" + integrity sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ== + dependencies: + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-module-imports" "^7.22.15" + "@babel/helper-simple-access" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + "@babel/helper-validator-identifier" "^7.22.20" + +"@babel/helper-optimise-call-expression@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz#f21531a9ccbff644fdd156b4077c16ff0c3f609e" + integrity sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295" + integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== + +"@babel/helper-remap-async-to-generator@^7.22.20": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz#7b68e1cb4fa964d2996fd063723fb48eca8498e0" + integrity sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-wrap-function" "^7.22.20" + +"@babel/helper-replace-supers@^7.22.20": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz#e37d367123ca98fe455a9887734ed2e16eb7a793" + integrity sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw== + dependencies: + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-member-expression-to-functions" "^7.22.15" + "@babel/helper-optimise-call-expression" "^7.22.5" + +"@babel/helper-simple-access@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de" + integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-skip-transparent-expression-wrappers@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz#007f15240b5751c537c40e77abb4e89eeaaa8847" + integrity sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-split-export-declaration@^7.22.6": + version "7.22.6" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c" + integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-string-parser@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz#9478c707febcbbe1ddb38a3d91a2e054ae622d83" + integrity sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ== + +"@babel/helper-validator-identifier@^7.22.20": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" + integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== + +"@babel/helper-validator-option@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz#907a3fbd4523426285365d1206c423c4c5520307" + integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw== + +"@babel/helper-wrap-function@^7.22.20": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz#15352b0b9bfb10fc9c76f79f6342c00e3411a569" + integrity sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw== + dependencies: + "@babel/helper-function-name" "^7.22.5" + "@babel/template" "^7.22.15" + "@babel/types" "^7.22.19" + +"@babel/helpers@^7.23.7": + version "7.23.8" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.8.tgz#fc6b2d65b16847fd50adddbd4232c76378959e34" + integrity sha512-KDqYz4PiOWvDFrdHLPhKtCThtIcKVy6avWD2oG4GEvyQ+XDZwHD4YQd+H2vNMnq2rkdxsDkU82T+Vk8U/WXHRQ== + dependencies: + "@babel/template" "^7.22.15" + "@babel/traverse" "^7.23.7" + "@babel/types" "^7.23.6" + +"@babel/highlight@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.23.4.tgz#edaadf4d8232e1a961432db785091207ead0621b" + integrity sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A== + dependencies: + "@babel/helper-validator-identifier" "^7.22.20" + chalk "^2.4.2" js-tokens "^4.0.0" -"@babel/parser@^7.15.4", "@babel/parser@^7.15.5": - version "7.15.6" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.15.6.tgz#043b9aa3c303c0722e5377fef9197f4cf1796549" - integrity sha512-S/TSCcsRuCkmpUuoWijua0Snt+f3ewU/8spLo+4AXJCZfT0bVCzLD5MuOKdrx0mlAptbKzn5AdgEIIKXxXkz9Q== - -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.15.4.tgz#dbdeabb1e80f622d9f0b583efb2999605e0a567e" - integrity sha512-eBnpsl9tlhPhpI10kU06JHnrYXwg3+V6CaP2idsCXNef0aeslpqyITXQ74Vfk5uHgY7IG7XP0yIH8b42KSzHog== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.15.4" - "@babel/plugin-proposal-optional-chaining" "^7.14.5" - -"@babel/plugin-proposal-async-generator-functions@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.15.4.tgz#f82aabe96c135d2ceaa917feb9f5fca31635277e" - integrity sha512-2zt2g5vTXpMC3OmK6uyjvdXptbhBXfA77XGrd3gh93zwG8lZYBLOBImiGBEG0RANu3JqKEACCz5CGk73OJROBw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-remap-async-to-generator" "^7.15.4" - "@babel/plugin-syntax-async-generators" "^7.8.4" - -"@babel/plugin-proposal-class-properties@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.14.5.tgz#40d1ee140c5b1e31a350f4f5eed945096559b42e" - integrity sha512-q/PLpv5Ko4dVc1LYMpCY7RVAAO4uk55qPwrIuJ5QJ8c6cVuAmhu7I/49JOppXL6gXf7ZHzpRVEUZdYoPLM04Gg== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" +"@babel/parser@^7.22.15", "@babel/parser@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.6.tgz#ba1c9e512bda72a47e285ae42aff9d2a635a9e3b" + integrity sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ== -"@babel/plugin-proposal-class-static-block@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.15.4.tgz#3e7ca6128453c089e8b477a99f970c63fc1cb8d7" - integrity sha512-M682XWrrLNk3chXCjoPUQWOyYsB93B9z3mRyjtqqYJWDf2mfCdIYgDrA11cgNVhAQieaq6F2fn2f3wI0U4aTjA== +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.23.3.tgz#5cd1c87ba9380d0afb78469292c954fee5d2411a" + integrity sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ== dependencies: - "@babel/helper-create-class-features-plugin" "^7.15.4" - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - -"@babel/plugin-proposal-dynamic-import@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.5.tgz#0c6617df461c0c1f8fff3b47cd59772360101d2c" - integrity sha512-ExjiNYc3HDN5PXJx+bwC50GIx/KKanX2HiggnIUAYedbARdImiCU4RhhHfdf0Kd7JNXGpsBBBCOm+bBVy3Gb0g== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - -"@babel/plugin-proposal-export-namespace-from@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.5.tgz#dbad244310ce6ccd083072167d8cea83a52faf76" - integrity sha512-g5POA32bXPMmSBu5Dx/iZGLGnKmKPc5AiY7qfZgurzrCYgIztDlHFbznSNCoQuv57YQLnQfaDi7dxCtLDIdXdA== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - -"@babel/plugin-proposal-json-strings@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.5.tgz#38de60db362e83a3d8c944ac858ddf9f0c2239eb" - integrity sha512-NSq2fczJYKVRIsUJyNxrVUMhB27zb7N7pOFGQOhBKJrChbGcgEAqyZrmZswkPk18VMurEeJAaICbfm57vUeTbQ== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-syntax-json-strings" "^7.8.3" - -"@babel/plugin-proposal-logical-assignment-operators@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.5.tgz#6e6229c2a99b02ab2915f82571e0cc646a40c738" - integrity sha512-YGn2AvZAo9TwyhlLvCCWxD90Xq8xJ4aSgaX3G5D/8DW94L8aaT+dS5cSP+Z06+rCJERGSr9GxMBZ601xoc2taw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - -"@babel/plugin-proposal-nullish-coalescing-operator@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.5.tgz#ee38589ce00e2cc59b299ec3ea406fcd3a0fdaf6" - integrity sha512-gun/SOnMqjSb98Nkaq2rTKMwervfdAoz6NphdY0vTfuzMfryj+tDGb2n6UkDKwez+Y8PZDhE3D143v6Gepp4Hg== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - -"@babel/plugin-proposal-numeric-separator@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.5.tgz#83631bf33d9a51df184c2102a069ac0c58c05f18" - integrity sha512-yiclALKe0vyZRZE0pS6RXgjUOt87GWv6FYa5zqj15PvhOGFO69R5DusPlgK/1K5dVnCtegTiWu9UaBSrLLJJBg== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - -"@babel/plugin-proposal-object-rest-spread@^7.15.6": - version "7.15.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.15.6.tgz#ef68050c8703d07b25af402cb96cf7f34a68ed11" - integrity sha512-qtOHo7A1Vt+O23qEAX+GdBpqaIuD3i9VRrWgCJeq7WO6H2d14EK3q11urj5Te2MAeK97nMiIdRpwd/ST4JFbNg== - dependencies: - "@babel/compat-data" "^7.15.0" - "@babel/helper-compilation-targets" "^7.15.4" - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.15.4" - -"@babel/plugin-proposal-optional-catch-binding@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.5.tgz#939dd6eddeff3a67fdf7b3f044b5347262598c3c" - integrity sha512-3Oyiixm0ur7bzO5ybNcZFlmVsygSIQgdOa7cTfOYCMY+wEPAYhZAJxi3mixKFCTCKUhQXuCTtQ1MzrpL3WT8ZQ== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - -"@babel/plugin-proposal-optional-chaining@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.5.tgz#fa83651e60a360e3f13797eef00b8d519695b603" - integrity sha512-ycz+VOzo2UbWNI1rQXxIuMOzrDdHGrI23fRiz/Si2R4kv2XZQ1BK8ccdHwehMKBlcH/joGW/tzrUmo67gbJHlQ== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.14.5" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-proposal-private-methods@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.14.5.tgz#37446495996b2945f30f5be5b60d5e2aa4f5792d" - integrity sha512-838DkdUA1u+QTCplatfq4B7+1lnDa/+QMI89x5WZHBcnNv+47N8QEj2k9I2MUU9xIv8XJ4XvPCviM/Dj7Uwt9g== +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.23.3.tgz#f6652bb16b94f8f9c20c50941e16e9756898dc5d" + integrity sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ== dependencies: - "@babel/helper-create-class-features-plugin" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/plugin-transform-optional-chaining" "^7.23.3" -"@babel/plugin-proposal-private-property-in-object@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.15.4.tgz#55c5e3b4d0261fd44fe637e3f624cfb0f484e3e5" - integrity sha512-X0UTixkLf0PCCffxgu5/1RQyGGbgZuKoI+vXP4iSbJSYwPb7hu06omsFGBvQ9lJEvwgrxHdS8B5nbfcd8GyUNA== +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.23.7": + version "7.23.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.7.tgz#516462a95d10a9618f197d39ad291a9b47ae1d7b" + integrity sha512-LlRT7HgaifEpQA1ZgLVOIJZZFVPWN5iReq/7/JixwBtwcoeVGDBD53ZV28rrsLYOZs1Y/EHhA8N/Z6aazHR8cw== dependencies: - "@babel/helper-annotate-as-pure" "^7.15.4" - "@babel/helper-create-class-features-plugin" "^7.15.4" - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-proposal-unicode-property-regex@^7.14.5", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.14.5.tgz#0f95ee0e757a5d647f378daa0eca7e93faa8bbe8" - integrity sha512-6axIeOU5LnY471KenAB9vI8I5j7NQ2d652hIYwVyRfgaZT5UpiqFKCuVXCDMSrU+3VFafnu2c5m3lrWIlr6A5Q== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": + version "7.21.0-placeholder-for-preset-env.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz#7844f9289546efa9febac2de4cfe358a050bd703" + integrity sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w== "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" @@ -444,6 +335,27 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" +"@babel/plugin-syntax-import-assertions@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.23.3.tgz#9c05a7f592982aff1a2768260ad84bcd3f0c77fc" + integrity sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-syntax-import-attributes@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.23.3.tgz#992aee922cf04512461d7dae3ff6951b90a2dc06" + integrity sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-syntax-import-meta@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" + integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-json-strings@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" @@ -507,284 +419,423 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-arrow-functions@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.14.5.tgz#f7187d9588a768dd080bf4c9ffe117ea62f7862a" - integrity sha512-KOnO0l4+tD5IfOdi4x8C1XmEIRWUjNRV8wc6K2vz/3e8yAOoZZvsRXRRIF/yo/MAOFb4QjtAw9xSxMXbSMRy8A== +"@babel/plugin-syntax-unicode-sets-regex@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz#d49a3b3e6b52e5be6740022317580234a6a47357" + integrity sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-async-to-generator@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.14.5.tgz#72c789084d8f2094acb945633943ef8443d39e67" - integrity sha512-szkbzQ0mNk0rpu76fzDdqSyPu0MuvpXgC+6rz5rpMb5OIRxdmHfQxrktL8CYolL2d8luMCZTR0DpIMIdL27IjA== +"@babel/plugin-transform-arrow-functions@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.23.3.tgz#94c6dcfd731af90f27a79509f9ab7fb2120fc38b" + integrity sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ== dependencies: - "@babel/helper-module-imports" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-remap-async-to-generator" "^7.14.5" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-block-scoped-functions@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.14.5.tgz#e48641d999d4bc157a67ef336aeb54bc44fd3ad4" - integrity sha512-dtqWqdWZ5NqBX3KzsVCWfQI3A53Ft5pWFCT2eCVUftWZgjc5DpDponbIF1+c+7cSGk2wN0YK7HGL/ezfRbpKBQ== +"@babel/plugin-transform-async-generator-functions@^7.23.7": + version "7.23.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.7.tgz#3aa0b4f2fa3788b5226ef9346cf6d16ec61f99cd" + integrity sha512-PdxEpL71bJp1byMG0va5gwQcXHxuEYC/BgI/e88mGTtohbZN28O5Yit0Plkkm/dBzCF/BxmbNcses1RH1T+urA== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-remap-async-to-generator" "^7.22.20" + "@babel/plugin-syntax-async-generators" "^7.8.4" -"@babel/plugin-transform-block-scoping@^7.15.3": - version "7.15.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.15.3.tgz#94c81a6e2fc230bcce6ef537ac96a1e4d2b3afaf" - integrity sha512-nBAzfZwZb4DkaGtOes1Up1nOAp9TDRRFw4XBzBBSG9QK7KVFmYzgj9o9sbPv7TX5ofL4Auq4wZnxCoPnI/lz2Q== +"@babel/plugin-transform-async-to-generator@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.23.3.tgz#d1f513c7a8a506d43f47df2bf25f9254b0b051fa" + integrity sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-module-imports" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-remap-async-to-generator" "^7.22.20" -"@babel/plugin-transform-classes@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.15.4.tgz#50aee17aaf7f332ae44e3bce4c2e10534d5d3bf1" - integrity sha512-Yjvhex8GzBmmPQUvpXRPWQ9WnxXgAFuZSrqOK/eJlOGIXwvv8H3UEdUigl1gb/bnjTrln+e8bkZUYCBt/xYlBg== +"@babel/plugin-transform-block-scoped-functions@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.23.3.tgz#fe1177d715fb569663095e04f3598525d98e8c77" + integrity sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A== dependencies: - "@babel/helper-annotate-as-pure" "^7.15.4" - "@babel/helper-function-name" "^7.15.4" - "@babel/helper-optimise-call-expression" "^7.15.4" - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-replace-supers" "^7.15.4" - "@babel/helper-split-export-declaration" "^7.15.4" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-block-scoping@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.4.tgz#b2d38589531c6c80fbe25e6b58e763622d2d3cf5" + integrity sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-class-properties@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.23.3.tgz#35c377db11ca92a785a718b6aa4e3ed1eb65dc48" + integrity sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-class-static-block@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.23.4.tgz#2a202c8787a8964dd11dfcedf994d36bfc844ab5" + integrity sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + +"@babel/plugin-transform-classes@^7.23.8": + version "7.23.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.8.tgz#d08ae096c240347badd68cdf1b6d1624a6435d92" + integrity sha512-yAYslGsY1bX6Knmg46RjiCiNSwJKv2IUC8qOdYKqMMr0491SXFhcHqOdRDeCRohOOIzwN/90C6mQ9qAKgrP7dg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-compilation-targets" "^7.23.6" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-function-name" "^7.23.0" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-replace-supers" "^7.22.20" + "@babel/helper-split-export-declaration" "^7.22.6" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.14.5.tgz#1b9d78987420d11223d41195461cc43b974b204f" - integrity sha512-pWM+E4283UxaVzLb8UBXv4EIxMovU4zxT1OPnpHJcmnvyY9QbPPTKZfEj31EUvG3/EQRbYAGaYEUZ4yWOBC2xg== +"@babel/plugin-transform-computed-properties@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.23.3.tgz#652e69561fcc9d2b50ba4f7ac7f60dcf65e86474" + integrity sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/template" "^7.22.15" -"@babel/plugin-transform-destructuring@^7.14.7": - version "7.14.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.7.tgz#0ad58ed37e23e22084d109f185260835e5557576" - integrity sha512-0mDE99nK+kVh3xlc5vKwB6wnP9ecuSj+zQCa/n0voENtP/zymdT4HH6QEb65wjjcbqr1Jb/7z9Qp7TF5FtwYGw== +"@babel/plugin-transform-destructuring@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.3.tgz#8c9ee68228b12ae3dff986e56ed1ba4f3c446311" + integrity sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-dotall-regex@^7.14.5", "@babel/plugin-transform-dotall-regex@^7.4.4": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.14.5.tgz#2f6bf76e46bdf8043b4e7e16cf24532629ba0c7a" - integrity sha512-loGlnBdj02MDsFaHhAIJzh7euK89lBrGIdM9EAtHFo6xKygCUGuuWe07o1oZVk287amtW1n0808sQM99aZt3gw== +"@babel/plugin-transform-dotall-regex@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.23.3.tgz#3f7af6054882ede89c378d0cf889b854a993da50" + integrity sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-create-regexp-features-plugin" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-duplicate-keys@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.14.5.tgz#365a4844881bdf1501e3a9f0270e7f0f91177954" - integrity sha512-iJjbI53huKbPDAsJ8EmVmvCKeeq21bAze4fu9GBQtSLqfvzj2oRuHVx4ZkDwEhg1htQ+5OBZh/Ab0XDf5iBZ7A== +"@babel/plugin-transform-duplicate-keys@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.23.3.tgz#664706ca0a5dfe8d066537f99032fc1dc8b720ce" + integrity sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-exponentiation-operator@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.14.5.tgz#5154b8dd6a3dfe6d90923d61724bd3deeb90b493" - integrity sha512-jFazJhMBc9D27o9jDnIE5ZErI0R0m7PbKXVq77FFvqFbzvTMuv8jaAwLZ5PviOLSFttqKIW0/wxNSDbjLk0tYA== +"@babel/plugin-transform-dynamic-import@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.23.4.tgz#c7629e7254011ac3630d47d7f34ddd40ca535143" + integrity sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ== dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" -"@babel/plugin-transform-for-of@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.15.4.tgz#25c62cce2718cfb29715f416e75d5263fb36a8c2" - integrity sha512-DRTY9fA751AFBDh2oxydvVm4SYevs5ILTWLs6xKXps4Re/KG5nfUkr+TdHCrRWB8C69TlzVgA9b3RmGWmgN9LA== +"@babel/plugin-transform-exponentiation-operator@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.23.3.tgz#ea0d978f6b9232ba4722f3dbecdd18f450babd18" + integrity sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-function-name@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.14.5.tgz#e81c65ecb900746d7f31802f6bed1f52d915d6f2" - integrity sha512-vbO6kv0fIzZ1GpmGQuvbwwm+O4Cbm2NrPzwlup9+/3fdkuzo1YqOZcXw26+YUJB84Ja7j9yURWposEHLYwxUfQ== +"@babel/plugin-transform-export-namespace-from@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.23.4.tgz#084c7b25e9a5c8271e987a08cf85807b80283191" + integrity sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ== dependencies: - "@babel/helper-function-name" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" -"@babel/plugin-transform-literals@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.14.5.tgz#41d06c7ff5d4d09e3cf4587bd3ecf3930c730f78" - integrity sha512-ql33+epql2F49bi8aHXxvLURHkxJbSmMKl9J5yHqg4PLtdE6Uc48CH1GS6TQvZ86eoB/ApZXwm7jlA+B3kra7A== +"@babel/plugin-transform-for-of@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.6.tgz#81c37e24171b37b370ba6aaffa7ac86bcb46f94e" + integrity sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" -"@babel/plugin-transform-member-expression-literals@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.14.5.tgz#b39cd5212a2bf235a617d320ec2b48bcc091b8a7" - integrity sha512-WkNXxH1VXVTKarWFqmso83xl+2V3Eo28YY5utIkbsmXoItO8Q3aZxN4BTS2k0hz9dGUloHK26mJMyQEYfkn/+Q== +"@babel/plugin-transform-function-name@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.23.3.tgz#8f424fcd862bf84cb9a1a6b42bc2f47ed630f8dc" + integrity sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-compilation-targets" "^7.22.15" + "@babel/helper-function-name" "^7.23.0" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-modules-amd@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.5.tgz#4fd9ce7e3411cb8b83848480b7041d83004858f7" - integrity sha512-3lpOU8Vxmp3roC4vzFpSdEpGUWSMsHFreTWOMMLzel2gNGfHE5UWIh/LN6ghHs2xurUp4jRFYMUIZhuFbody1g== +"@babel/plugin-transform-json-strings@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.23.4.tgz#a871d9b6bd171976efad2e43e694c961ffa3714d" + integrity sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg== dependencies: - "@babel/helper-module-transforms" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - babel-plugin-dynamic-import-node "^2.3.3" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-json-strings" "^7.8.3" -"@babel/plugin-transform-modules-commonjs@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.15.4.tgz#8201101240eabb5a76c08ef61b2954f767b6b4c1" - integrity sha512-qg4DPhwG8hKp4BbVDvX1s8cohM8a6Bvptu4l6Iingq5rW+yRUAhe/YRup/YcW2zCOlrysEWVhftIcKzrEZv3sA== +"@babel/plugin-transform-literals@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.23.3.tgz#8214665f00506ead73de157eba233e7381f3beb4" + integrity sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ== dependencies: - "@babel/helper-module-transforms" "^7.15.4" - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-simple-access" "^7.15.4" - babel-plugin-dynamic-import-node "^2.3.3" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-modules-systemjs@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.15.4.tgz#b42890c7349a78c827719f1d2d0cd38c7d268132" - integrity sha512-fJUnlQrl/mezMneR72CKCgtOoahqGJNVKpompKwzv3BrEXdlPspTcyxrZ1XmDTIr9PpULrgEQo3qNKp6dW7ssw== +"@babel/plugin-transform-logical-assignment-operators@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.23.4.tgz#e599f82c51d55fac725f62ce55d3a0886279ecb5" + integrity sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg== dependencies: - "@babel/helper-hoist-variables" "^7.15.4" - "@babel/helper-module-transforms" "^7.15.4" - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-validator-identifier" "^7.14.9" - babel-plugin-dynamic-import-node "^2.3.3" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" -"@babel/plugin-transform-modules-umd@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.5.tgz#fb662dfee697cce274a7cda525190a79096aa6e0" - integrity sha512-RfPGoagSngC06LsGUYyM9QWSXZ8MysEjDJTAea1lqRjNECE3y0qIJF/qbvJxc4oA4s99HumIMdXOrd+TdKaAAA== +"@babel/plugin-transform-member-expression-literals@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.23.3.tgz#e37b3f0502289f477ac0e776b05a833d853cabcc" + integrity sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag== dependencies: - "@babel/helper-module-transforms" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-named-capturing-groups-regex@^7.14.9": - version "7.14.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.14.9.tgz#c68f5c5d12d2ebaba3762e57c2c4f6347a46e7b2" - integrity sha512-l666wCVYO75mlAtGFfyFwnWmIXQm3kSH0C3IRnJqWcZbWkoihyAdDhFm2ZWaxWTqvBvhVFfJjMRQ0ez4oN1yYA== +"@babel/plugin-transform-modules-amd@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.3.tgz#e19b55436a1416829df0a1afc495deedfae17f7d" + integrity sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.14.5" + "@babel/helper-module-transforms" "^7.23.3" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-new-target@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.14.5.tgz#31bdae8b925dc84076ebfcd2a9940143aed7dbf8" - integrity sha512-Nx054zovz6IIRWEB49RDRuXGI4Gy0GMgqG0cII9L3MxqgXz/+rgII+RU58qpo4g7tNEx1jG7rRVH4ihZoP4esQ== +"@babel/plugin-transform-modules-commonjs@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz#661ae831b9577e52be57dd8356b734f9700b53b4" + integrity sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-module-transforms" "^7.23.3" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-simple-access" "^7.22.5" -"@babel/plugin-transform-object-super@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.14.5.tgz#d0b5faeac9e98597a161a9cf78c527ed934cdc45" - integrity sha512-MKfOBWzK0pZIrav9z/hkRqIk/2bTv9qvxHzPQc12RcVkMOzpIKnFCNYJip00ssKWYkd8Sf5g0Wr7pqJ+cmtuFg== +"@babel/plugin-transform-modules-systemjs@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.3.tgz#fa7e62248931cb15b9404f8052581c302dd9de81" + integrity sha512-ZxyKGTkF9xT9YJuKQRo19ewf3pXpopuYQd8cDXqNzc3mUNbOME0RKMoZxviQk74hwzfQsEe66dE92MaZbdHKNQ== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-replace-supers" "^7.14.5" + "@babel/helper-hoist-variables" "^7.22.5" + "@babel/helper-module-transforms" "^7.23.3" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-validator-identifier" "^7.22.20" -"@babel/plugin-transform-parameters@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.15.4.tgz#5f2285cc3160bf48c8502432716b48504d29ed62" - integrity sha512-9WB/GUTO6lvJU3XQsSr6J/WKvBC2hcs4Pew8YxZagi6GkTdniyqp8On5kqdK8MN0LMeu0mGbhPN+O049NV/9FQ== +"@babel/plugin-transform-modules-umd@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.23.3.tgz#5d4395fccd071dfefe6585a4411aa7d6b7d769e9" + integrity sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-module-transforms" "^7.23.3" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-property-literals@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.14.5.tgz#0ddbaa1f83db3606f1cdf4846fa1dfb473458b34" - integrity sha512-r1uilDthkgXW8Z1vJz2dKYLV1tuw2xsbrp3MrZmD99Wh9vsfKoob+JTgri5VUb/JqyKRXotlOtwgu4stIYCmnw== +"@babel/plugin-transform-named-capturing-groups-regex@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz#67fe18ee8ce02d57c855185e27e3dc959b2e991f" + integrity sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-regenerator@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.14.5.tgz#9676fd5707ed28f522727c5b3c0aa8544440b04f" - integrity sha512-NVIY1W3ITDP5xQl50NgTKlZ0GrotKtLna08/uGY6ErQt6VEQZXla86x/CTddm5gZdcr+5GSsvMeTmWA5Ii6pkg== +"@babel/plugin-transform-new-target@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.23.3.tgz#5491bb78ed6ac87e990957cea367eab781c4d980" + integrity sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ== dependencies: - regenerator-transform "^0.14.2" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-reserved-words@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.14.5.tgz#c44589b661cfdbef8d4300dcc7469dffa92f8304" - integrity sha512-cv4F2rv1nD4qdexOGsRQXJrOcyb5CrgjUH9PKrrtyhSDBNWGxd0UIitjyJiWagS+EbUGjG++22mGH1Pub8D6Vg== +"@babel/plugin-transform-nullish-coalescing-operator@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.23.4.tgz#45556aad123fc6e52189ea749e33ce090637346e" + integrity sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" -"@babel/plugin-transform-shorthand-properties@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.14.5.tgz#97f13855f1409338d8cadcbaca670ad79e091a58" - integrity sha512-xLucks6T1VmGsTB+GWK5Pl9Jl5+nRXD1uoFdA5TSO6xtiNjtXTjKkmPdFXVLGlK5A2/or/wQMKfmQ2Y0XJfn5g== +"@babel/plugin-transform-numeric-separator@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.23.4.tgz#03d08e3691e405804ecdd19dd278a40cca531f29" + integrity sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-transform-spread@^7.14.6": - version "7.14.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.14.6.tgz#6bd40e57fe7de94aa904851963b5616652f73144" - integrity sha512-Zr0x0YroFJku7n7+/HH3A2eIrGMjbmAIbJSVv0IZ+t3U2WUQUA64S/oeied2e+MaGSjmt4alzBCsK9E8gh+fag== +"@babel/plugin-transform-object-rest-spread@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.23.4.tgz#2b9c2d26bf62710460bdc0d1730d4f1048361b83" + integrity sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.14.5" + "@babel/compat-data" "^7.23.3" + "@babel/helper-compilation-targets" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.23.3" -"@babel/plugin-transform-sticky-regex@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.14.5.tgz#5b617542675e8b7761294381f3c28c633f40aeb9" - integrity sha512-Z7F7GyvEMzIIbwnziAZmnSNpdijdr4dWt+FJNBnBLz5mwDFkqIXU9wmBcWWad3QeJF5hMTkRe4dAq2sUZiG+8A== +"@babel/plugin-transform-object-super@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.23.3.tgz#81fdb636dcb306dd2e4e8fd80db5b2362ed2ebcd" + integrity sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-replace-supers" "^7.22.20" -"@babel/plugin-transform-template-literals@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.14.5.tgz#a5f2bc233937d8453885dc736bdd8d9ffabf3d93" - integrity sha512-22btZeURqiepOfuy/VkFr+zStqlujWaarpMErvay7goJS6BWwdd6BY9zQyDLDa4x2S3VugxFb162IZ4m/S/+Gg== +"@babel/plugin-transform-optional-catch-binding@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.23.4.tgz#318066de6dacce7d92fa244ae475aa8d91778017" + integrity sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" -"@babel/plugin-transform-typeof-symbol@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.14.5.tgz#39af2739e989a2bd291bf6b53f16981423d457d4" - integrity sha512-lXzLD30ffCWseTbMQzrvDWqljvZlHkXU+CnseMhkMNqU1sASnCsz3tSzAaH3vCUXb9PHeUb90ZT1BdFTm1xxJw== +"@babel/plugin-transform-optional-chaining@^7.23.3", "@babel/plugin-transform-optional-chaining@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.4.tgz#6acf61203bdfc4de9d4e52e64490aeb3e52bd017" + integrity sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" -"@babel/plugin-transform-unicode-escapes@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.14.5.tgz#9d4bd2a681e3c5d7acf4f57fa9e51175d91d0c6b" - integrity sha512-crTo4jATEOjxj7bt9lbYXcBAM3LZaUrbP2uUdxb6WIorLmjNKSpHfIybgY4B8SRpbf8tEVIWH3Vtm7ayCrKocA== +"@babel/plugin-transform-parameters@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.23.3.tgz#83ef5d1baf4b1072fa6e54b2b0999a7b2527e2af" + integrity sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-unicode-regex@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.14.5.tgz#4cd09b6c8425dd81255c7ceb3fb1836e7414382e" - integrity sha512-UygduJpC5kHeCiRw/xDVzC+wj8VaYSoKl5JNVmbP7MadpNinAm3SvZCxZ42H37KZBKztz46YC73i9yV34d0Tzw== +"@babel/plugin-transform-private-methods@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.23.3.tgz#b2d7a3c97e278bfe59137a978d53b2c2e038c0e4" + integrity sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-create-class-features-plugin" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/preset-env@^7.15.6": - version "7.15.6" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.15.6.tgz#0f3898db9d63d320f21b17380d8462779de57659" - integrity sha512-L+6jcGn7EWu7zqaO2uoTDjjMBW+88FXzV8KvrBl2z6MtRNxlsmUNRlZPaNNPUTgqhyC5DHNFk/2Jmra+ublZWw== +"@babel/plugin-transform-private-property-in-object@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.23.4.tgz#3ec711d05d6608fd173d9b8de39872d8dbf68bf5" + integrity sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A== dependencies: - "@babel/compat-data" "^7.15.0" - "@babel/helper-compilation-targets" "^7.15.4" - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-validator-option" "^7.14.5" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.15.4" - "@babel/plugin-proposal-async-generator-functions" "^7.15.4" - "@babel/plugin-proposal-class-properties" "^7.14.5" - "@babel/plugin-proposal-class-static-block" "^7.15.4" - "@babel/plugin-proposal-dynamic-import" "^7.14.5" - "@babel/plugin-proposal-export-namespace-from" "^7.14.5" - "@babel/plugin-proposal-json-strings" "^7.14.5" - "@babel/plugin-proposal-logical-assignment-operators" "^7.14.5" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.14.5" - "@babel/plugin-proposal-numeric-separator" "^7.14.5" - "@babel/plugin-proposal-object-rest-spread" "^7.15.6" - "@babel/plugin-proposal-optional-catch-binding" "^7.14.5" - "@babel/plugin-proposal-optional-chaining" "^7.14.5" - "@babel/plugin-proposal-private-methods" "^7.14.5" - "@babel/plugin-proposal-private-property-in-object" "^7.15.4" - "@babel/plugin-proposal-unicode-property-regex" "^7.14.5" + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + +"@babel/plugin-transform-property-literals@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.23.3.tgz#54518f14ac4755d22b92162e4a852d308a560875" + integrity sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-regenerator@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.23.3.tgz#141afd4a2057298602069fce7f2dc5173e6c561c" + integrity sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + regenerator-transform "^0.15.2" + +"@babel/plugin-transform-reserved-words@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.23.3.tgz#4130dcee12bd3dd5705c587947eb715da12efac8" + integrity sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-shorthand-properties@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.23.3.tgz#97d82a39b0e0c24f8a981568a8ed851745f59210" + integrity sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-spread@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.23.3.tgz#41d17aacb12bde55168403c6f2d6bdca563d362c" + integrity sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + +"@babel/plugin-transform-sticky-regex@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.23.3.tgz#dec45588ab4a723cb579c609b294a3d1bd22ff04" + integrity sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-template-literals@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.23.3.tgz#5f0f028eb14e50b5d0f76be57f90045757539d07" + integrity sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-typeof-symbol@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.23.3.tgz#9dfab97acc87495c0c449014eb9c547d8966bca4" + integrity sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-unicode-escapes@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.23.3.tgz#1f66d16cab01fab98d784867d24f70c1ca65b925" + integrity sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-unicode-property-regex@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.23.3.tgz#19e234129e5ffa7205010feec0d94c251083d7ad" + integrity sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-unicode-regex@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.23.3.tgz#26897708d8f42654ca4ce1b73e96140fbad879dc" + integrity sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-unicode-sets-regex@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.23.3.tgz#4fb6f0a719c2c5859d11f6b55a050cc987f3799e" + integrity sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/preset-env@^7.23.8": + version "7.23.8" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.23.8.tgz#7d6f8171ea7c221ecd28059e65ad37c20e441e3e" + integrity sha512-lFlpmkApLkEP6woIKprO6DO60RImpatTQKtz4sUcDjVcK8M8mQ4sZsuxaTMNOZf0sqAq/ReYW1ZBHnOQwKpLWA== + dependencies: + "@babel/compat-data" "^7.23.5" + "@babel/helper-compilation-targets" "^7.23.6" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-validator-option" "^7.23.5" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.23.3" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.23.3" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.23.7" + "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-class-properties" "^7.12.13" "@babel/plugin-syntax-class-static-block" "^7.14.5" "@babel/plugin-syntax-dynamic-import" "^7.8.3" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-syntax-import-assertions" "^7.23.3" + "@babel/plugin-syntax-import-attributes" "^7.23.3" + "@babel/plugin-syntax-import-meta" "^7.10.4" "@babel/plugin-syntax-json-strings" "^7.8.3" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" @@ -794,216 +845,406 @@ "@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" "@babel/plugin-syntax-top-level-await" "^7.14.5" - "@babel/plugin-transform-arrow-functions" "^7.14.5" - "@babel/plugin-transform-async-to-generator" "^7.14.5" - "@babel/plugin-transform-block-scoped-functions" "^7.14.5" - "@babel/plugin-transform-block-scoping" "^7.15.3" - "@babel/plugin-transform-classes" "^7.15.4" - "@babel/plugin-transform-computed-properties" "^7.14.5" - "@babel/plugin-transform-destructuring" "^7.14.7" - "@babel/plugin-transform-dotall-regex" "^7.14.5" - "@babel/plugin-transform-duplicate-keys" "^7.14.5" - "@babel/plugin-transform-exponentiation-operator" "^7.14.5" - "@babel/plugin-transform-for-of" "^7.15.4" - "@babel/plugin-transform-function-name" "^7.14.5" - "@babel/plugin-transform-literals" "^7.14.5" - "@babel/plugin-transform-member-expression-literals" "^7.14.5" - "@babel/plugin-transform-modules-amd" "^7.14.5" - "@babel/plugin-transform-modules-commonjs" "^7.15.4" - "@babel/plugin-transform-modules-systemjs" "^7.15.4" - "@babel/plugin-transform-modules-umd" "^7.14.5" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.14.9" - "@babel/plugin-transform-new-target" "^7.14.5" - "@babel/plugin-transform-object-super" "^7.14.5" - "@babel/plugin-transform-parameters" "^7.15.4" - "@babel/plugin-transform-property-literals" "^7.14.5" - "@babel/plugin-transform-regenerator" "^7.14.5" - "@babel/plugin-transform-reserved-words" "^7.14.5" - "@babel/plugin-transform-shorthand-properties" "^7.14.5" - "@babel/plugin-transform-spread" "^7.14.6" - "@babel/plugin-transform-sticky-regex" "^7.14.5" - "@babel/plugin-transform-template-literals" "^7.14.5" - "@babel/plugin-transform-typeof-symbol" "^7.14.5" - "@babel/plugin-transform-unicode-escapes" "^7.14.5" - "@babel/plugin-transform-unicode-regex" "^7.14.5" - "@babel/preset-modules" "^0.1.4" - "@babel/types" "^7.15.6" - babel-plugin-polyfill-corejs2 "^0.2.2" - babel-plugin-polyfill-corejs3 "^0.2.2" - babel-plugin-polyfill-regenerator "^0.2.2" - core-js-compat "^3.16.0" - semver "^6.3.0" - -"@babel/preset-modules@^0.1.4": - version "0.1.4" - resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.4.tgz#362f2b68c662842970fdb5e254ffc8fc1c2e415e" - integrity sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg== + "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" + "@babel/plugin-transform-arrow-functions" "^7.23.3" + "@babel/plugin-transform-async-generator-functions" "^7.23.7" + "@babel/plugin-transform-async-to-generator" "^7.23.3" + "@babel/plugin-transform-block-scoped-functions" "^7.23.3" + "@babel/plugin-transform-block-scoping" "^7.23.4" + "@babel/plugin-transform-class-properties" "^7.23.3" + "@babel/plugin-transform-class-static-block" "^7.23.4" + "@babel/plugin-transform-classes" "^7.23.8" + "@babel/plugin-transform-computed-properties" "^7.23.3" + "@babel/plugin-transform-destructuring" "^7.23.3" + "@babel/plugin-transform-dotall-regex" "^7.23.3" + "@babel/plugin-transform-duplicate-keys" "^7.23.3" + "@babel/plugin-transform-dynamic-import" "^7.23.4" + "@babel/plugin-transform-exponentiation-operator" "^7.23.3" + "@babel/plugin-transform-export-namespace-from" "^7.23.4" + "@babel/plugin-transform-for-of" "^7.23.6" + "@babel/plugin-transform-function-name" "^7.23.3" + "@babel/plugin-transform-json-strings" "^7.23.4" + "@babel/plugin-transform-literals" "^7.23.3" + "@babel/plugin-transform-logical-assignment-operators" "^7.23.4" + "@babel/plugin-transform-member-expression-literals" "^7.23.3" + "@babel/plugin-transform-modules-amd" "^7.23.3" + "@babel/plugin-transform-modules-commonjs" "^7.23.3" + "@babel/plugin-transform-modules-systemjs" "^7.23.3" + "@babel/plugin-transform-modules-umd" "^7.23.3" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.22.5" + "@babel/plugin-transform-new-target" "^7.23.3" + "@babel/plugin-transform-nullish-coalescing-operator" "^7.23.4" + "@babel/plugin-transform-numeric-separator" "^7.23.4" + "@babel/plugin-transform-object-rest-spread" "^7.23.4" + "@babel/plugin-transform-object-super" "^7.23.3" + "@babel/plugin-transform-optional-catch-binding" "^7.23.4" + "@babel/plugin-transform-optional-chaining" "^7.23.4" + "@babel/plugin-transform-parameters" "^7.23.3" + "@babel/plugin-transform-private-methods" "^7.23.3" + "@babel/plugin-transform-private-property-in-object" "^7.23.4" + "@babel/plugin-transform-property-literals" "^7.23.3" + "@babel/plugin-transform-regenerator" "^7.23.3" + "@babel/plugin-transform-reserved-words" "^7.23.3" + "@babel/plugin-transform-shorthand-properties" "^7.23.3" + "@babel/plugin-transform-spread" "^7.23.3" + "@babel/plugin-transform-sticky-regex" "^7.23.3" + "@babel/plugin-transform-template-literals" "^7.23.3" + "@babel/plugin-transform-typeof-symbol" "^7.23.3" + "@babel/plugin-transform-unicode-escapes" "^7.23.3" + "@babel/plugin-transform-unicode-property-regex" "^7.23.3" + "@babel/plugin-transform-unicode-regex" "^7.23.3" + "@babel/plugin-transform-unicode-sets-regex" "^7.23.3" + "@babel/preset-modules" "0.1.6-no-external-plugins" + babel-plugin-polyfill-corejs2 "^0.4.7" + babel-plugin-polyfill-corejs3 "^0.8.7" + babel-plugin-polyfill-regenerator "^0.5.4" + core-js-compat "^3.31.0" + semver "^6.3.1" + +"@babel/preset-modules@0.1.6-no-external-plugins": + version "0.1.6-no-external-plugins" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz#ccb88a2c49c817236861fee7826080573b8a923a" + integrity sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" - "@babel/plugin-transform-dotall-regex" "^7.4.4" "@babel/types" "^7.4.4" esutils "^2.0.2" +"@babel/regjsgen@^0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310" + integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== + "@babel/runtime@^7.8.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.15.4.tgz#fd17d16bfdf878e6dd02d19753a39fa8a8d9c84a" - integrity sha512-99catp6bHCaxr4sJ/DbTGgHS4+Rs2RVd2g7iOap6SLGPDknRK9ztKNsE/Fg6QhSeh1FGE5f6gHGQmvvn3I3xhw== - dependencies: - regenerator-runtime "^0.13.4" - -"@babel/template@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.15.4.tgz#51898d35dcf3faa670c4ee6afcfd517ee139f194" - integrity sha512-UgBAfEa1oGuYgDIPM2G+aHa4Nlo9Lh6mGD2bDBGMTbYnc38vulXPuC1MGjYILIEmlwl6Rd+BPR9ee3gm20CBtg== - dependencies: - "@babel/code-frame" "^7.14.5" - "@babel/parser" "^7.15.4" - "@babel/types" "^7.15.4" - -"@babel/traverse@^7.13.0", "@babel/traverse@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.15.4.tgz#ff8510367a144bfbff552d9e18e28f3e2889c22d" - integrity sha512-W6lQD8l4rUbQR/vYgSuCAE75ADyyQvOpFVsvPPdkhf6lATXAsQIG9YdtOcu8BB1dZ0LKu+Zo3c1wEcbKeuhdlA== - dependencies: - "@babel/code-frame" "^7.14.5" - "@babel/generator" "^7.15.4" - "@babel/helper-function-name" "^7.15.4" - "@babel/helper-hoist-variables" "^7.15.4" - "@babel/helper-split-export-declaration" "^7.15.4" - "@babel/parser" "^7.15.4" - "@babel/types" "^7.15.4" - debug "^4.1.0" + version "7.23.8" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.8.tgz#8ee6fe1ac47add7122902f257b8ddf55c898f650" + integrity sha512-Y7KbAP984rn1VGMbGqKmBLio9V7y5Je9GvU4rQPCPinCyNfUcToxIXl06d59URp/F3LwinvODxab5N/G6qggkw== + dependencies: + regenerator-runtime "^0.14.0" + +"@babel/template@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38" + integrity sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w== + dependencies: + "@babel/code-frame" "^7.22.13" + "@babel/parser" "^7.22.15" + "@babel/types" "^7.22.15" + +"@babel/traverse@^7.23.7": + version "7.23.7" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.7.tgz#9a7bf285c928cb99b5ead19c3b1ce5b310c9c305" + integrity sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg== + dependencies: + "@babel/code-frame" "^7.23.5" + "@babel/generator" "^7.23.6" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-function-name" "^7.23.0" + "@babel/helper-hoist-variables" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + "@babel/parser" "^7.23.6" + "@babel/types" "^7.23.6" + debug "^4.3.1" globals "^11.1.0" -"@babel/types@^7.0.0-beta.49", "@babel/types@^7.15.4", "@babel/types@^7.15.6", "@babel/types@^7.4.4": - version "7.15.6" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.15.6.tgz#99abdc48218b2881c058dd0a7ab05b99c9be758f" - integrity sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig== +"@babel/types@^7.0.0", "@babel/types@^7.22.15", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.6", "@babel/types@^7.4.4": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.6.tgz#be33fdb151e1f5a56877d704492c240fc71c7ccd" + integrity sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg== dependencies: - "@babel/helper-validator-identifier" "^7.14.9" + "@babel/helper-string-parser" "^7.23.4" + "@babel/helper-validator-identifier" "^7.22.20" to-fast-properties "^2.0.0" -"@eslint/eslintrc@^0.4.3": - version "0.4.3" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c" - integrity sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw== +"@eslint-community/eslint-utils@^4.2.0": + version "4.4.0" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" + integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== + dependencies: + eslint-visitor-keys "^3.3.0" + +"@eslint-community/regexpp@^4.6.1": + version "4.10.0" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz#548f6de556857c8bb73bbee70c35dc82a2e74d63" + integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA== + +"@eslint/eslintrc@^2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz#388a269f0f25c1b6adc317b5a2c55714894c70ad" + integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ== dependencies: ajv "^6.12.4" - debug "^4.1.1" - espree "^7.3.0" - globals "^13.9.0" - ignore "^4.0.6" + debug "^4.3.2" + espree "^9.6.0" + globals "^13.19.0" + ignore "^5.2.0" import-fresh "^3.2.1" - js-yaml "^3.13.1" - minimatch "^3.0.4" + js-yaml "^4.1.0" + minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@humanwhocodes/config-array@^0.5.0": - version "0.5.0" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.5.0.tgz#1407967d4c6eecd7388f83acf1eaf4d0c6e58ef9" - integrity sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg== +"@eslint/js@8.56.0": + version "8.56.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.56.0.tgz#ef20350fec605a7f7035a01764731b2de0f3782b" + integrity sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A== + +"@humanwhocodes/config-array@^0.11.13": + version "0.11.14" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.14.tgz#d78e481a039f7566ecc9660b4ea7fe6b1fec442b" + integrity sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg== dependencies: - "@humanwhocodes/object-schema" "^1.2.0" - debug "^4.1.1" - minimatch "^3.0.4" + "@humanwhocodes/object-schema" "^2.0.2" + debug "^4.3.1" + minimatch "^3.0.5" -"@humanwhocodes/object-schema@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz#87de7af9c231826fdd68ac7258f77c429e0e5fcf" - integrity sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w== +"@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== -"@optimize-lodash/rollup-plugin@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@optimize-lodash/rollup-plugin/-/rollup-plugin-1.0.0.tgz#cb68ca63556422c11a435585831d4120be2ca899" - integrity sha512-WmGEgz3iZHDA70onL0w9eeAPw9HKoq5aCZRT2h9FOg5z9OfZ/UCiMHfRIyirWH/gCfVE/YLbWiP3sBxIfKm03w== +"@humanwhocodes/object-schema@^2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz#d9fae00a2d5cb40f92cfe64b47ad749fbc38f917" + integrity sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw== + +"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" + integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== dependencies: - "@optimize-lodash/transform" "1.x" - "@rollup/pluginutils" "4.x" + "@jridgewell/set-array" "^1.0.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.9" -"@optimize-lodash/transform@1.x": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@optimize-lodash/transform/-/transform-1.0.0.tgz#dfc820a45c7fa8578ce0cb2689b432a46ee5a430" - integrity sha512-WYvoUg4oIicGjubD8WiIJuZ9ZKb6S3dGghmO/Q6S/ueEAc0RfzPL2UP6sqmj9pxQe6sGD6VNCOWqMFJzexo0Jg== +"@jridgewell/resolve-uri@^3.1.0": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" + integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== + +"@jridgewell/set-array@^1.0.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" + integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== + +"@jridgewell/source-map@^0.3.3": + version "0.3.5" + resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.5.tgz#a3bb4d5c6825aab0d281268f47f6ad5853431e91" + integrity sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ== dependencies: - estree-walker "2.x" - magic-string "0.25.x" + "@jridgewell/gen-mapping" "^0.3.0" + "@jridgewell/trace-mapping" "^0.3.9" -"@rollup/plugin-babel@^5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@rollup/plugin-babel/-/plugin-babel-5.3.0.tgz#9cb1c5146ddd6a4968ad96f209c50c62f92f9879" - integrity sha512-9uIC8HZOnVLrLHxayq/PTzw+uS25E14KPUBh5ktF+18Mjo5yK0ToMMx6epY0uEgkjwJw0aBW4x2horYXh8juWw== +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.4.15": + version "1.4.15" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + +"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": + version "0.3.20" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz#72e45707cf240fa6b081d0366f8265b0cd10197f" + integrity sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q== dependencies: - "@babel/helper-module-imports" "^7.10.4" - "@rollup/pluginutils" "^3.1.0" + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" -"@rollup/plugin-node-resolve@^13.0.4": - version "13.0.4" - resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.0.4.tgz#b10222f4145a019740acb7738402130d848660c0" - integrity sha512-eYq4TFy40O8hjeDs+sIxEH/jc9lyuI2k9DM557WN6rO5OpnC2qXMBNj4IKH1oHrnAazL49C5p0tgP0/VpqJ+/w== +"@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1": + version "5.1.1-v1" + resolved "https://registry.yarnpkg.com/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz#dbf733a965ca47b1973177dc0bb6c889edcfb129" + integrity sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg== dependencies: - "@rollup/pluginutils" "^3.1.0" - "@types/resolve" "1.17.1" - builtin-modules "^3.1.0" - deepmerge "^4.2.2" - is-module "^1.0.0" - resolve "^1.19.0" + eslint-scope "5.1.1" -"@rollup/pluginutils@4.x": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-4.1.1.tgz#1d4da86dd4eded15656a57d933fda2b9a08d47ec" - integrity sha512-clDjivHqWGXi7u+0d2r2sBi4Ie6VLEAzWMIkvJLnDmxoOhBYOTfzGbOQBA32THHm11/LiJbd01tJUpJsbshSWQ== +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== dependencies: - estree-walker "^2.0.1" - picomatch "^2.2.2" + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" -"@rollup/pluginutils@^3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-3.1.0.tgz#706b4524ee6dc8b103b3c995533e5ad680c02b9b" - integrity sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg== +"@nodelib/fs.stat@2.0.5": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.8": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== dependencies: - "@types/estree" "0.0.39" - estree-walker "^1.0.1" - picomatch "^2.2.2" + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" -"@types/estree@0.0.39": - version "0.0.39" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" - integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== +"@optimize-lodash/rollup-plugin@^4.0.4": + version "4.0.4" + resolved "https://registry.yarnpkg.com/@optimize-lodash/rollup-plugin/-/rollup-plugin-4.0.4.tgz#6de5d9644f3277ba45873ae33d3dc4181a4f96e3" + integrity sha512-zcbnqx7oQWmGA3Xaf6I8m64+Rufebz4fnSuOHf0++aGqHdwbf19t5OdIebn8Deeb1DoyHbaWVezuTZyKw0vBJw== + dependencies: + "@optimize-lodash/transform" "3.0.3" + "@rollup/pluginutils" "~5.0.2" -"@types/json5@^0.0.29": - version "0.0.29" - resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" - integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= +"@optimize-lodash/transform@3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@optimize-lodash/transform/-/transform-3.0.3.tgz#d7ca5fb0306ce8e4af9ba55258024d1dc5c792eb" + integrity sha512-LeH2C2nYPfwKLQ1OX7jrfZOYTyRajOhhgoCdz47+5d2oBP8YKL/NknCAcDt2QkzLDLbtZ5QHhKZN56S2D/I1JA== + dependencies: + estree-walker "2.x" + magic-string "0.30.x" -"@types/minimatch@^3.0.3": - version "3.0.5" - resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40" - integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ== +"@pkgr/core@^0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@pkgr/core/-/core-0.1.0.tgz#7d8dacb7fdef0e4387caf7396cbd77f179867d06" + integrity sha512-Zwq5OCzuwJC2jwqmpEQt7Ds1DTi6BWSwoGkbb1n9pO3hzb35BoJELx7c0T23iDkBGkh2e7tvOtjF3tr3OaQHDQ== -"@types/node@*": - version "16.9.1" - resolved "https://registry.yarnpkg.com/@types/node/-/node-16.9.1.tgz#0611b37db4246c937feef529ddcc018cf8e35708" - integrity sha512-QpLcX9ZSsq3YYUUnD3nFDY8H7wctAhQj/TFKL8Ya8v5fMm3CFXxo8zStsLAl780ltoYoo1WvKUVGBQK+1ifr7g== +"@rollup/plugin-babel@^6.0.4": + version "6.0.4" + resolved "https://registry.yarnpkg.com/@rollup/plugin-babel/-/plugin-babel-6.0.4.tgz#bd698e351fa9aa9619fcae780aea2a603d98e4c4" + integrity sha512-YF7Y52kFdFT/xVSuVdjkV5ZdX/3YtmX0QulG+x0taQOtJdHYzVU61aSSkAgVJ7NOv6qPkIYiJSgSWWN/DM5sGw== + dependencies: + "@babel/helper-module-imports" "^7.18.6" + "@rollup/pluginutils" "^5.0.1" -"@types/resolve@1.17.1": - version "1.17.1" - resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.17.1.tgz#3afd6ad8967c77e4376c598a82ddd58f46ec45d6" - integrity sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw== +"@rollup/plugin-node-resolve@^15.2.3": + version "15.2.3" + resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.2.3.tgz#e5e0b059bd85ca57489492f295ce88c2d4b0daf9" + integrity sha512-j/lym8nf5E21LwBT4Df1VD6hRO2L2iwUeUmP7litikRsVp1H6NWx20NEp0Y7su+7XGc476GnXXc4kFeZNGmaSQ== dependencies: - "@types/node" "*" + "@rollup/pluginutils" "^5.0.1" + "@types/resolve" "1.20.2" + deepmerge "^4.2.2" + is-builtin-module "^3.2.1" + is-module "^1.0.0" + resolve "^1.22.1" + +"@rollup/plugin-terser@^0.4.4": + version "0.4.4" + resolved "https://registry.yarnpkg.com/@rollup/plugin-terser/-/plugin-terser-0.4.4.tgz#15dffdb3f73f121aa4fbb37e7ca6be9aeea91962" + integrity sha512-XHeJC5Bgvs8LfukDwWZp7yeqin6ns8RTl2B9avbejt6tZqsqvVoWI7ZTQrcNsfKEDWBTnTxM8nMDkO2IFFbd0A== + dependencies: + serialize-javascript "^6.0.1" + smob "^1.0.0" + terser "^5.17.4" + +"@rollup/pluginutils@^5.0.1": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-5.1.0.tgz#7e53eddc8c7f483a4ad0b94afb1f7f5fd3c771e0" + integrity sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g== + dependencies: + "@types/estree" "^1.0.0" + estree-walker "^2.0.2" + picomatch "^2.3.1" + +"@rollup/pluginutils@~5.0.2": + version "5.0.5" + resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-5.0.5.tgz#bbb4c175e19ebfeeb8c132c2eea0ecb89941a66c" + integrity sha512-6aEYR910NyP73oHiJglti74iRyOwgFU4x3meH/H8OJx6Ry0j6cOVZ5X/wTvub7G7Ao6qaHBEaNsV3GLJkSsF+Q== + dependencies: + "@types/estree" "^1.0.0" + estree-walker "^2.0.2" + picomatch "^2.3.1" + +"@rollup/rollup-android-arm-eabi@4.9.4": + version "4.9.4" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.9.4.tgz#b1094962742c1a0349587040bc06185e2a667c9b" + integrity sha512-ub/SN3yWqIv5CWiAZPHVS1DloyZsJbtXmX4HxUTIpS0BHm9pW5iYBo2mIZi+hE3AeiTzHz33blwSnhdUo+9NpA== + +"@rollup/rollup-android-arm64@4.9.4": + version "4.9.4" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.9.4.tgz#96eb86fb549e05b187f2ad06f51d191a23cb385a" + integrity sha512-ehcBrOR5XTl0W0t2WxfTyHCR/3Cq2jfb+I4W+Ch8Y9b5G+vbAecVv0Fx/J1QKktOrgUYsIKxWAKgIpvw56IFNA== + +"@rollup/rollup-darwin-arm64@4.9.4": + version "4.9.4" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.9.4.tgz#2456630c007cc5905cb368acb9ff9fc04b2d37be" + integrity sha512-1fzh1lWExwSTWy8vJPnNbNM02WZDS8AW3McEOb7wW+nPChLKf3WG2aG7fhaUmfX5FKw9zhsF5+MBwArGyNM7NA== + +"@rollup/rollup-darwin-x64@4.9.4": + version "4.9.4" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.9.4.tgz#97742214fc7dfd47a0f74efba6f5ae264e29c70c" + integrity sha512-Gc6cukkF38RcYQ6uPdiXi70JB0f29CwcQ7+r4QpfNpQFVHXRd0DfWFidoGxjSx1DwOETM97JPz1RXL5ISSB0pA== + +"@rollup/rollup-linux-arm-gnueabihf@4.9.4": + version "4.9.4" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.9.4.tgz#cd933e61d6f689c9cdefde424beafbd92cfe58e2" + integrity sha512-g21RTeFzoTl8GxosHbnQZ0/JkuFIB13C3T7Y0HtKzOXmoHhewLbVTFBQZu+z5m9STH6FZ7L/oPgU4Nm5ErN2fw== + +"@rollup/rollup-linux-arm64-gnu@4.9.4": + version "4.9.4" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.9.4.tgz#33b09bf462f1837afc1e02a1b352af6b510c78a6" + integrity sha512-TVYVWD/SYwWzGGnbfTkrNpdE4HON46orgMNHCivlXmlsSGQOx/OHHYiQcMIOx38/GWgwr/po2LBn7wypkWw/Mg== + +"@rollup/rollup-linux-arm64-musl@4.9.4": + version "4.9.4" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.9.4.tgz#50257fb248832c2308064e3764a16273b6ee4615" + integrity sha512-XcKvuendwizYYhFxpvQ3xVpzje2HHImzg33wL9zvxtj77HvPStbSGI9czrdbfrf8DGMcNNReH9pVZv8qejAQ5A== + +"@rollup/rollup-linux-riscv64-gnu@4.9.4": + version "4.9.4" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.9.4.tgz#09589e4e1a073cf56f6249b77eb6c9a8e9b613a8" + integrity sha512-LFHS/8Q+I9YA0yVETyjonMJ3UA+DczeBd/MqNEzsGSTdNvSJa1OJZcSH8GiXLvcizgp9AlHs2walqRcqzjOi3A== + +"@rollup/rollup-linux-x64-gnu@4.9.4": + version "4.9.4" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.9.4.tgz#bd312bb5b5f02e54d15488605d15cfd3f90dda7c" + integrity sha512-dIYgo+j1+yfy81i0YVU5KnQrIJZE8ERomx17ReU4GREjGtDW4X+nvkBak2xAUpyqLs4eleDSj3RrV72fQos7zw== + +"@rollup/rollup-linux-x64-musl@4.9.4": + version "4.9.4" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.9.4.tgz#25b3bede85d86438ce28cc642842d10d867d40e9" + integrity sha512-RoaYxjdHQ5TPjaPrLsfKqR3pakMr3JGqZ+jZM0zP2IkDtsGa4CqYaWSfQmZVgFUCgLrTnzX+cnHS3nfl+kB6ZQ== + +"@rollup/rollup-win32-arm64-msvc@4.9.4": + version "4.9.4" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.9.4.tgz#95957067eb107f571da1d81939f017d37b4958d3" + integrity sha512-T8Q3XHV+Jjf5e49B4EAaLKV74BbX7/qYBRQ8Wop/+TyyU0k+vSjiLVSHNWdVd1goMjZcbhDmYZUYW5RFqkBNHQ== + +"@rollup/rollup-win32-ia32-msvc@4.9.4": + version "4.9.4" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.9.4.tgz#71b6facad976db527863f698692c6964c0b6e10e" + integrity sha512-z+JQ7JirDUHAsMecVydnBPWLwJjbppU+7LZjffGf+Jvrxq+dVjIE7By163Sc9DKc3ADSU50qPVw0KonBS+a+HQ== + +"@rollup/rollup-win32-x64-msvc@4.9.4": + version "4.9.4" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.9.4.tgz#16295ccae354707c9bc6842906bdeaad4f3ba7a5" + integrity sha512-LfdGXCV9rdEify1oxlN9eamvDSjv9md9ZVMAbNHA87xqIfFCxImxan9qZ8+Un54iK2nnqPlbnSi4R54ONtbWBw== + +"@sigmacomputing/babel-plugin-lodash@^3.3.5": + version "3.3.5" + resolved "https://registry.yarnpkg.com/@sigmacomputing/babel-plugin-lodash/-/babel-plugin-lodash-3.3.5.tgz#613d98b0cbb51c1836bbc12c8a12d75750ee3510" + integrity sha512-VFhaHjlNzWyBtBm3YdqOwP8GbQHK7sWzXKpSUBTLjl2Zz6/9PwCK4qXZXI5CHpDjmvbouHUDbjrZP2KU5h6VQg== + dependencies: + "@babel/helper-module-imports" "^7.0.0" + "@babel/types" "^7.0.0" + glob "^7.1.1" + lodash "^4.17.10" + require-package-name "^2.0.1" -acorn-jsx@^5.3.1: +"@types/estree@1.0.5", "@types/estree@^1.0.0": + version "1.0.5" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" + integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== + +"@types/resolve@1.20.2": + version "1.20.2" + resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.20.2.tgz#97d26e00cd4a0423b4af620abecf3e6f442b7975" + integrity sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q== + +"@ungap/structured-clone@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" + integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== + +acorn-jsx@^5.3.2: version "5.3.2" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== -acorn@^7.4.0: - version "7.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" - integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== +acorn@^8.8.2, acorn@^8.9.0: + version "8.11.3" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" + integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== -ajv@^6.10.0, ajv@^6.12.4: +ajv@^6.12.4: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -1013,26 +1254,23 @@ ajv@^6.10.0, ajv@^6.12.4: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^8.0.1: - version "8.6.3" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.6.3.tgz#11a66527761dc3e9a3845ea775d2d3c0414e8764" - integrity sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw== +ansi-escapes@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-6.2.0.tgz#8a13ce75286f417f1963487d86ba9f90dccf9947" + integrity sha512-kzRaCqXnpzWs+3z5ABPQiVke+iq0KXkHo8xiWV4RPTi5Yli0l97BEQuhXV1s7+aSU/fu1kUuxgS4MsQ0fRuygw== dependencies: - fast-deep-equal "^3.1.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - uri-js "^4.2.2" - -ansi-colors@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" - integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== + type-fest "^3.0.0" -ansi-regex@^5.0.0: +ansi-regex@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== +ansi-regex@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" + integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== + ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" @@ -1047,104 +1285,49 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0: dependencies: color-convert "^2.0.1" +ansi-styles@^6.0.0, ansi-styles@^6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" + integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== + ansi-styles@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-1.0.0.tgz#cb102df1c56f5123eab8b67cd7b98027a0279178" - integrity sha1-yxAt8cVvUSPquLZ817mAJ6AnkXg= - -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" + integrity sha512-3iF4FIKdxaVYT3JqQuY3Wat/T2t7TRbbQ94Fu50ZUCbLy4TFbTzr90NOHQodQkNqmeEGCw8WbeP78WNi6SKYUA== -array-differ@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-3.0.0.tgz#3cbb3d0f316810eafcc47624734237d6aee4ae6b" - integrity sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg== +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== array-find-index@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" - integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E= + integrity sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw== -array-includes@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.3.tgz#c7f619b382ad2afaf5326cddfdc0afc61af7690a" - integrity sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A== +babel-plugin-polyfill-corejs2@^0.4.7: + version "0.4.7" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.7.tgz#679d1b94bf3360f7682e11f2cb2708828a24fe8c" + integrity sha512-LidDk/tEGDfuHW2DWh/Hgo4rmnw3cduK6ZkOI1NPFceSK3n/yAGeOsNT7FLnSGHkXj3RHGSEVkN3FsCTY6w2CQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.18.0-next.2" - get-intrinsic "^1.1.1" - is-string "^1.0.5" + "@babel/compat-data" "^7.22.6" + "@babel/helper-define-polyfill-provider" "^0.4.4" + semver "^6.3.1" -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - -array.prototype.flat@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz#6ef638b43312bd401b4c6199fdec7e2dc9e9a123" - integrity sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg== +babel-plugin-polyfill-corejs3@^0.8.7: + version "0.8.7" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.7.tgz#941855aa7fdaac06ed24c730a93450d2b2b76d04" + integrity sha512-KyDvZYxAzkC0Aj2dAPyDzi2Ym15e5JKZSK+maI7NAwSqofvuFglbSsxE7wUOvTg9oFVnHMzVzBKcqEb4PJgtOA== dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - es-abstract "^1.18.0-next.1" - -arrify@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" - integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== - -astral-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" - integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== + "@babel/helper-define-polyfill-provider" "^0.4.4" + core-js-compat "^3.33.1" -babel-plugin-dynamic-import-node@^2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" - integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== - dependencies: - object.assign "^4.1.0" - -babel-plugin-lodash@^3.3.4: - version "3.3.4" - resolved "https://registry.yarnpkg.com/babel-plugin-lodash/-/babel-plugin-lodash-3.3.4.tgz#4f6844358a1340baed182adbeffa8df9967bc196" - integrity sha512-yDZLjK7TCkWl1gpBeBGmuaDIFhZKmkoL+Cu2MUUjv5VxUZx/z7tBGBCBcQs5RI1Bkz5LLmNdjx7paOyQtMovyg== +babel-plugin-polyfill-regenerator@^0.5.4: + version "0.5.4" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.4.tgz#c6fc8eab610d3a11eb475391e52584bacfc020f4" + integrity sha512-S/x2iOCvDaCASLYsOOgWOq4bCfKYVqvO/uxjkaYyZ3rVsVE3CeAI/c84NpyuBBymEgNvHgjEot3a9/Z/kXvqsg== dependencies: - "@babel/helper-module-imports" "^7.0.0-beta.49" - "@babel/types" "^7.0.0-beta.49" - glob "^7.1.1" - lodash "^4.17.10" - require-package-name "^2.0.1" - -babel-plugin-polyfill-corejs2@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.2.tgz#e9124785e6fd94f94b618a7954e5693053bf5327" - integrity sha512-kISrENsJ0z5dNPq5eRvcctITNHYXWOA4DUZRFYCz3jYCcvTb/A546LIddmoGNMVYg2U38OyFeNosQwI9ENTqIQ== - dependencies: - "@babel/compat-data" "^7.13.11" - "@babel/helper-define-polyfill-provider" "^0.2.2" - semver "^6.1.1" - -babel-plugin-polyfill-corejs3@^0.2.2: - version "0.2.4" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.4.tgz#68cb81316b0e8d9d721a92e0009ec6ecd4cd2ca9" - integrity sha512-z3HnJE5TY/j4EFEa/qpQMSbcUJZ5JQi+3UFjXzn6pQCmIKc5Ug5j98SuYyH+m4xQnvKlMDIW4plLfgyVnd0IcQ== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.2.2" - core-js-compat "^3.14.0" - -babel-plugin-polyfill-regenerator@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.2.tgz#b310c8d642acada348c1fa3b3e6ce0e851bee077" - integrity sha512-Goy5ghsc21HgPDFtzRkSirpZVW35meGoTmTOb2bxqdl60ghub4xOidgNTHaZfQ2FaxQsKmwvXtOAkcIS4SMBWg== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.2.2" + "@babel/helper-define-polyfill-provider" "^0.4.4" balanced-match@^1.0.0: version "1.0.2" @@ -1159,16 +1342,22 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" -browserslist@^4.16.6, browserslist@^4.17.0: - version "4.17.0" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.17.0.tgz#1fcd81ec75b41d6d4994fb0831b92ac18c01649c" - integrity sha512-g2BJ2a0nEYvEFQC208q8mVAhfNwpZ5Mu8BwgtCdZKO3qx98HChmeg448fPdUzld8aFmfLgVh7yymqV+q1lJZ5g== +braces@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== dependencies: - caniuse-lite "^1.0.30001254" - colorette "^1.3.0" - electron-to-chromium "^1.3.830" - escalade "^3.1.1" - node-releases "^1.1.75" + fill-range "^7.0.1" + +browserslist@^4.22.2: + version "4.22.2" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.2.tgz#704c4943072bd81ea18997f3bd2180e89c77874b" + integrity sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A== + dependencies: + caniuse-lite "^1.0.30001565" + electron-to-chromium "^1.4.601" + node-releases "^2.0.14" + update-browserslist-db "^1.0.13" browserstack-runner@^0.9.4: version "0.9.4" @@ -1188,25 +1377,17 @@ browserstack-runner@^0.9.4: browserstack@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/browserstack/-/browserstack-1.3.0.tgz#8438053ef6acbb844dc6b291510c194339eb50df" - integrity sha1-hDgFPvasu4RNxrKRUQwZQznrUN8= + integrity sha512-jBTvd/nLpTZmMnAEF6SDutTjYlcLx+iqmhmo4PBzTvQnts5MazkkT7EUWK39BBAZvvH3m5o2IcFfDoyZq3kFMg== buffer-from@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== -builtin-modules@^3.1.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.2.0.tgz#45d5db99e7ee5e6bc4f362e008bf917ab5049887" - integrity sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA== - -call-bind@^1.0.0, call-bind@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== - dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" +builtin-modules@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6" + integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw== callsites@^3.0.0: version "3.1.0" @@ -1218,21 +1399,26 @@ camelcase@^5.0.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== -caniuse-lite@^1.0.30001254: - version "1.0.30001257" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001257.tgz#150aaf649a48bee531104cfeda57f92ce587f6e5" - integrity sha512-JN49KplOgHSXpIsVSF+LUyhD8PUp6xPpAXeRrrcBh4KBeP7W864jHn6RvzJgDlrReyeVjMFJL3PLpPvKIxlIHA== +caniuse-lite@^1.0.30001565: + version "1.0.30001576" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001576.tgz#893be772cf8ee6056d6c1e2d07df365b9ec0a5c4" + integrity sha512-ff5BdakGe2P3SQsMsiqmt1Lc8221NR1VzHj5jXN5vBny9A6fpze94HiVV/n7XRosOlsShJcvMv5mdnpjOGCEgg== chalk@0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/chalk/-/chalk-0.4.0.tgz#5199a3ddcd0c1efe23bc08c1b027b06176e0c64f" - integrity sha1-UZmj3c0MHv4jvAjBsCewYXbgxk8= + integrity sha512-sQfYDlfv2DGVtjdoQqxS0cEZDroyG8h6TamA6rvxwlrU5BaSLDx9xhatBYl2pxZ7gmpNaPFVwBtdGdu5rQ+tYQ== dependencies: ansi-styles "~1.0.0" has-color "~0.1.0" strip-ansi "~0.1.0" -chalk@^2.0.0: +chalk@5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.3.0.tgz#67c20a7ebef70e7f3970a01f90fa210cb6860385" + integrity sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w== + +chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -1241,14 +1427,6 @@ chalk@^2.0.0: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" - integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - chalk@^4.0.0: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" @@ -1260,7 +1438,22 @@ chalk@^4.0.0: circular-json@0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.1.tgz#be8b36aefccde8b3ca7aa2d6afc07a37242c0d2d" - integrity sha1-vos2rvzN6LPKeqLWr8B6NyQsDS0= + integrity sha512-MTc6ffiOuzmPfRWVHjRscjzTQSYq16oouOebk6iHn/Tvp1mKBwQ/x33Trh7oZwI0e7wZyMV9KzDBWalzxjoIGQ== + +cli-cursor@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-4.0.0.tgz#3cecfe3734bf4fe02a8361cbdc0f6fe28c6a57ea" + integrity sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg== + dependencies: + restore-cursor "^4.0.0" + +cli-truncate@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-4.0.0.tgz#6cc28a2924fee9e25ce91e973db56c7066e6172a" + integrity sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA== + dependencies: + slice-ansi "^5.0.0" + string-width "^7.0.0" cliui@^6.0.0: version "6.0.0" @@ -1288,24 +1481,29 @@ color-convert@^2.0.1: color-name@1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== color-name@~1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -colorette@^1.3.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.4.0.tgz#5190fbb87276259a86ad700bff2c6d6faa3fca40" - integrity sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g== +colorette@^2.0.20: + version "2.0.20" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" + integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== + +commander@11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-11.1.0.tgz#62fdce76006a68e5c1ab3314dc92e800eb83d906" + integrity sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ== commander@^2.20.0: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== -commenting@1.1.0: +commenting@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/commenting/-/commenting-1.1.0.tgz#fae14345c6437b8554f30bc6aa6c1e1633033590" integrity sha512-YeNK4tavZwtH7jEgK1ZINXzLKm6DZdEMfsaaieOsCAN0S8vsY7UeuO3Q7d/M018EFgE+IeUAuBOKkFccBZsUZA== @@ -1313,24 +1511,21 @@ commenting@1.1.0: concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== -convert-source-map@^1.7.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" - integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== - dependencies: - safe-buffer "~5.1.1" +convert-source-map@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" + integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== -core-js-compat@^3.14.0, core-js-compat@^3.16.0: - version "3.17.3" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.17.3.tgz#b39c8e4dec71ecdc735c653ce5233466e561324e" - integrity sha512-+in61CKYs4hQERiADCJsdgewpdl/X0GhEX77pjKgbeibXviIt2oxEjTc8O2fqHX8mDdBrDvX8MYD/RYsBv4OiA== +core-js-compat@^3.31.0, core-js-compat@^3.33.1: + version "3.35.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.35.0.tgz#c149a3d1ab51e743bc1da61e39cb51f461a41873" + integrity sha512-5blwFAddknKeNgsjBzilkdQ0+YK8L1PfqPYq40NOYMYFSS38qj+hpTcLLWwpIwA2A5bje/x5jmVn2tzUMg9IVw== dependencies: - browserslist "^4.17.0" - semver "7.0.0" + browserslist "^4.22.2" -cross-spawn@^7.0.0, cross-spawn@^7.0.2: +cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -1339,31 +1534,24 @@ cross-spawn@^7.0.0, cross-spawn@^7.0.2: shebang-command "^2.0.0" which "^2.0.1" -debug@2.6.9, debug@^2.6.9: +debug@2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" -debug@^3.2.7: - version "3.2.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== - dependencies: - ms "^2.1.1" - -debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: - version "4.3.2" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" - integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== +debug@4.3.4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: ms "2.1.2" decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== deep-is@^0.1.3: version "0.1.4" @@ -1371,33 +1559,19 @@ deep-is@^0.1.3: integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== deepmerge@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" - integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== - -define-properties@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" - integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== - dependencies: - object-keys "^1.0.12" + version "4.3.1" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" + integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== depd@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" - integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= + integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== destroy@~1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" - integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= - -doctrine@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" - integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== - dependencies: - esutils "^2.0.2" + integrity sha512-3NdhDuEXnfun/z7x9GOElY49LoqVHoGScmOKwmxhsS8N5Y+Z8KyPPDnaSzqWgYt/ji4mqwfTS34Htrk0zPIXVg== doctrine@^3.0.0: version "3.0.0" @@ -1409,12 +1583,17 @@ doctrine@^3.0.0: ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= + integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== + +electron-to-chromium@^1.4.601: + version "1.4.628" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.628.tgz#97cefa4b2356d981875f19639885e4fc50ce6e82" + integrity sha512-2k7t5PHvLsufpP6Zwk0nof62yLOsCf032wZx7/q0mv8gwlXjhcxI3lz6f0jBr0GrnWKcm3burXzI3t5IrcdUxw== -electron-to-chromium@^1.3.830: - version "1.3.839" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.839.tgz#27a5b21468e9fefb0e328a029403617f20acec9c" - integrity sha512-0O7uPs9LJNjQ/U5mW78qW8gXv9H6Ba3DHZ5/yt8aBsvomOWDkV3MddT7enUYvLQEUVOURjWmgJJWVZ3K98tIwQ== +emoji-regex@^10.3.0: + version "10.3.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-10.3.0.tgz#76998b9268409eb3dae3de989254d456e70cfe23" + integrity sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw== emoji-regex@^8.0.0: version "8.0.0" @@ -1424,61 +1603,7 @@ emoji-regex@^8.0.0: encodeurl@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= - -end-of-stream@^1.1.0: - version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - dependencies: - once "^1.4.0" - -enquirer@^2.3.5: - version "2.3.6" - resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" - integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== - dependencies: - ansi-colors "^4.1.1" - -error-ex@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== - dependencies: - is-arrayish "^0.2.1" - -es-abstract@^1.18.0-next.1, es-abstract@^1.18.0-next.2, es-abstract@^1.18.2: - version "1.18.6" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.6.tgz#2c44e3ea7a6255039164d26559777a6d978cb456" - integrity sha512-kAeIT4cku5eNLNuUKhlmtuk1/TRZvQoYccn6TO0cSVdf1kzB0T7+dYuVK9MWM7l+/53W2Q8M7N2c6MQvhXFcUQ== - dependencies: - call-bind "^1.0.2" - es-to-primitive "^1.2.1" - function-bind "^1.1.1" - get-intrinsic "^1.1.1" - get-symbol-description "^1.0.0" - has "^1.0.3" - has-symbols "^1.0.2" - internal-slot "^1.0.3" - is-callable "^1.2.4" - is-negative-zero "^2.0.1" - is-regex "^1.1.4" - is-string "^1.0.7" - object-inspect "^1.11.0" - object-keys "^1.1.1" - object.assign "^4.1.2" - string.prototype.trimend "^1.0.4" - string.prototype.trimstart "^1.0.4" - unbox-primitive "^1.0.1" - -es-to-primitive@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" - integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== - dependencies: - is-callable "^1.1.4" - is-date-object "^1.0.1" - is-symbol "^1.0.2" + integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== escalade@^3.1.1: version "3.1.1" @@ -1488,56 +1613,49 @@ escalade@^3.1.1: escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" - integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= + integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== escape-string-regexp@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== -eslint-import-resolver-node@^0.3.6: - version "0.3.6" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz#4048b958395da89668252001dbd9eca6b83bacbd" - integrity sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw== +eslint-config-prettier@^9.1.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz#31af3d94578645966c082fcb71a5846d3c94867f" + integrity sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw== + +eslint-plugin-prettier@^5.1.3: + version "5.1.3" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-5.1.3.tgz#17cfade9e732cef32b5f5be53bd4e07afd8e67e1" + integrity sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw== dependencies: - debug "^3.2.7" - resolve "^1.20.0" + prettier-linter-helpers "^1.0.0" + synckit "^0.8.6" -eslint-module-utils@^2.6.2: - version "2.6.2" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.6.2.tgz#94e5540dd15fe1522e8ffa3ec8db3b7fa7e7a534" - integrity sha512-QG8pcgThYOuqxupd06oYTZoNOGaUdTY1PqK+oS6ElF6vs4pBdk/aYxFVQQXzcrAqp9m7cl7lb2ubazX+g16k2Q== - dependencies: - debug "^3.2.7" - pkg-dir "^2.0.0" - -eslint-plugin-import@^2.24.2: - version "2.24.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.24.2.tgz#2c8cd2e341f3885918ee27d18479910ade7bb4da" - integrity sha512-hNVtyhiEtZmpsabL4neEj+6M5DCLgpYyG9nzJY8lZQeQXEn5UPW1DpUdsMHMXsq98dbNm7nt1w9ZMSVpfJdi8Q== - dependencies: - array-includes "^3.1.3" - array.prototype.flat "^1.2.4" - debug "^2.6.9" - doctrine "^2.1.0" - eslint-import-resolver-node "^0.3.6" - eslint-module-utils "^2.6.2" - find-up "^2.0.0" - has "^1.0.3" - is-core-module "^2.6.0" - minimatch "^3.0.4" - object.values "^1.1.4" - pkg-up "^2.0.0" - read-pkg-up "^3.0.0" - resolve "^1.20.0" - tsconfig-paths "^3.11.0" - -eslint-scope@^5.1.1: +eslint-plugin-simple-import-sort@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-10.0.0.tgz#cc4ceaa81ba73252427062705b64321946f61351" + integrity sha512-AeTvO9UCMSNzIHRkg8S6c3RPy5YEwKWSQPx3DYghLedo2ZQxowPFLGDN1AZ2evfg6r6mjBSZSLxLFsWSu3acsw== + +eslint-plugin-unused-imports@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-unused-imports/-/eslint-plugin-unused-imports-3.0.0.tgz#d25175b0072ff16a91892c3aa72a09ca3a9e69e7" + integrity sha512-sduiswLJfZHeeBJ+MQaG+xYzSWdRXoSw61DpU13mzWumCkR0ufD0HmO4kdNokjrkluMHpj/7PJeN35pgbhW3kw== + dependencies: + eslint-rule-composer "^0.3.0" + +eslint-rule-composer@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz#79320c927b0c5c0d3d3d2b76c8b4a488f25bbaf9" + integrity sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg== + +eslint-scope@5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== @@ -1545,87 +1663,81 @@ eslint-scope@^5.1.1: esrecurse "^4.3.0" estraverse "^4.1.1" -eslint-utils@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" - integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== +eslint-scope@^7.2.2: + version "7.2.2" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" + integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== dependencies: - eslint-visitor-keys "^1.1.0" - -eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" - integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== + esrecurse "^4.3.0" + estraverse "^5.2.0" -eslint-visitor-keys@^2.0.0, eslint-visitor-keys@^2.1.0: +eslint-visitor-keys@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== -eslint@^7.32.0: - version "7.32.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.32.0.tgz#c6d328a14be3fb08c8d1d21e12c02fdb7a2a812d" - integrity sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA== - dependencies: - "@babel/code-frame" "7.12.11" - "@eslint/eslintrc" "^0.4.3" - "@humanwhocodes/config-array" "^0.5.0" - ajv "^6.10.0" +eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: + version "3.4.3" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" + integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== + +eslint@^8.56.0: + version "8.56.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.56.0.tgz#4957ce8da409dc0809f99ab07a1b94832ab74b15" + integrity sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.6.1" + "@eslint/eslintrc" "^2.1.4" + "@eslint/js" "8.56.0" + "@humanwhocodes/config-array" "^0.11.13" + "@humanwhocodes/module-importer" "^1.0.1" + "@nodelib/fs.walk" "^1.2.8" + "@ungap/structured-clone" "^1.2.0" + ajv "^6.12.4" chalk "^4.0.0" cross-spawn "^7.0.2" - debug "^4.0.1" + debug "^4.3.2" doctrine "^3.0.0" - enquirer "^2.3.5" escape-string-regexp "^4.0.0" - eslint-scope "^5.1.1" - eslint-utils "^2.1.0" - eslint-visitor-keys "^2.0.0" - espree "^7.3.1" - esquery "^1.4.0" + eslint-scope "^7.2.2" + eslint-visitor-keys "^3.4.3" + espree "^9.6.1" + esquery "^1.4.2" esutils "^2.0.2" fast-deep-equal "^3.1.3" file-entry-cache "^6.0.1" - functional-red-black-tree "^1.0.1" - glob-parent "^5.1.2" - globals "^13.6.0" - ignore "^4.0.6" - import-fresh "^3.0.0" + find-up "^5.0.0" + glob-parent "^6.0.2" + globals "^13.19.0" + graphemer "^1.4.0" + ignore "^5.2.0" imurmurhash "^0.1.4" is-glob "^4.0.0" - js-yaml "^3.13.1" + is-path-inside "^3.0.3" + js-yaml "^4.1.0" json-stable-stringify-without-jsonify "^1.0.1" levn "^0.4.1" lodash.merge "^4.6.2" - minimatch "^3.0.4" + minimatch "^3.1.2" natural-compare "^1.4.0" - optionator "^0.9.1" - progress "^2.0.0" - regexpp "^3.1.0" - semver "^7.2.1" - strip-ansi "^6.0.0" - strip-json-comments "^3.1.0" - table "^6.0.9" + optionator "^0.9.3" + strip-ansi "^6.0.1" text-table "^0.2.0" - v8-compile-cache "^2.0.3" -espree@^7.3.0, espree@^7.3.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" - integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== +espree@^9.6.0, espree@^9.6.1: + version "9.6.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" + integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== dependencies: - acorn "^7.4.0" - acorn-jsx "^5.3.1" - eslint-visitor-keys "^1.3.0" - -esprima@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + acorn "^8.9.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.4.1" -esquery@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" - integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== +esquery@^1.4.2: + version "1.5.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" + integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== dependencies: estraverse "^5.1.0" @@ -1642,20 +1754,15 @@ estraverse@^4.1.1: integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== estraverse@^5.1.0, estraverse@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" - integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== -estree-walker@2.x, estree-walker@^2.0.1: +estree-walker@2.x, estree-walker@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== -estree-walker@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" - integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg== - esutils@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" @@ -1664,28 +1771,38 @@ esutils@^2.0.2: etag@~1.8.1: version "1.8.1" resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" - integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= + integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== -execa@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" - integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== - dependencies: - cross-spawn "^7.0.0" - get-stream "^5.0.0" - human-signals "^1.1.1" - is-stream "^2.0.0" +eventemitter3@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-5.0.1.tgz#53f5ffd0a492ac800721bb42c66b841de96423c4" + integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA== + +execa@8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-8.0.1.tgz#51f6a5943b580f963c3ca9c6321796db8cc39b8c" + integrity sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg== + dependencies: + cross-spawn "^7.0.3" + get-stream "^8.0.1" + human-signals "^5.0.0" + is-stream "^3.0.0" merge-stream "^2.0.0" - npm-run-path "^4.0.0" - onetime "^5.1.0" - signal-exit "^3.0.2" - strip-final-newline "^2.0.0" + npm-run-path "^5.1.0" + onetime "^6.0.0" + signal-exit "^4.1.0" + strip-final-newline "^3.0.0" fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== +fast-diff@^1.1.2: + version "1.3.0" + resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.3.0.tgz#ece407fa550a64d638536cd727e129c61616e0f0" + integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== + fast-json-stable-stringify@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" @@ -1694,7 +1811,14 @@ fast-json-stable-stringify@^2.0.0: fast-levenshtein@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== + +fastq@^1.6.0: + version "1.16.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.16.0.tgz#83b9a9375692db77a822df081edb6a9cf6839320" + integrity sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA== + dependencies: + reusify "^1.0.4" file-entry-cache@^6.0.1: version "6.0.1" @@ -1703,12 +1827,12 @@ file-entry-cache@^6.0.1: dependencies: flat-cache "^3.0.4" -find-up@^2.0.0, find-up@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" - integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== dependencies: - locate-path "^2.0.0" + to-regex-range "^5.0.1" find-up@^4.1.0: version "4.1.0" @@ -1718,43 +1842,47 @@ find-up@^4.1.0: locate-path "^5.0.0" path-exists "^4.0.0" +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + flat-cache@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" - integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== + version "3.2.0" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee" + integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== dependencies: - flatted "^3.1.0" + flatted "^3.2.9" + keyv "^4.5.3" rimraf "^3.0.2" -flatted@^3.1.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.2.tgz#64bfed5cb68fe3ca78b3eb214ad97b63bedce561" - integrity sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA== +flatted@^3.2.9: + version "3.2.9" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.9.tgz#7eb4c67ca1ba34232ca9d2d93e9886e611ad7daf" + integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ== fresh@0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= + integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== fsevents@~2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== - -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + version "2.3.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== -functional-red-black-tree@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" - integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== gensync@^1.0.0-beta.2: version "1.0.0-beta.2" @@ -1766,58 +1894,32 @@ get-caller-file@^2.0.1: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" - integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== - dependencies: - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.1" - -get-stream@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" - integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== - dependencies: - pump "^3.0.0" - -get-symbol-description@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" - integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.1" +get-east-asian-width@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/get-east-asian-width/-/get-east-asian-width-1.2.0.tgz#5e6ebd9baee6fb8b7b6bd505221065f0cd91f64e" + integrity sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA== -glob-parent@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" +get-stream@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-8.0.1.tgz#def9dfd71742cd7754a7761ed43749a27d02eca2" + integrity sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA== -glob@7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" - integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== +glob-parent@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" + is-glob "^4.0.3" -glob@^7.1.1, glob@^7.1.3: - version "7.1.7" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" - integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== +glob@^7.1.1, glob@^7.1.3, glob@~7.2.0: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" inherits "2" - minimatch "^3.0.4" + minimatch "^3.1.1" once "^1.3.0" path-is-absolute "^1.0.0" @@ -1826,93 +1928,66 @@ globals@^11.1.0: resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== -globals@^13.6.0, globals@^13.9.0: - version "13.11.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.11.0.tgz#40ef678da117fe7bd2e28f1fab24951bd0255be7" - integrity sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g== +globals@^13.19.0: + version "13.24.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171" + integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== dependencies: type-fest "^0.20.2" -graceful-fs@^4.1.2: - version "4.2.8" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.8.tgz#e412b8d33f5e006593cbd3cee6df9f2cebbe802a" - integrity sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg== - -has-bigints@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113" - integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA== +graphemer@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" + integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== has-color@~0.1.0: version "0.1.7" resolved "https://registry.yarnpkg.com/has-color/-/has-color-0.1.7.tgz#67144a5260c34fc3cca677d041daf52fe7b78b2f" - integrity sha1-ZxRKUmDDT8PMpnfQQdr1L+e3iy8= + integrity sha512-kaNz5OTAYYmt646Hkqw50/qyxP2vFnTVu5AQ1Zmk22Kk5+4Qx6BpO8+u7IKsML5fOsFk0ZT0AcCJNYwcvaLBvw== has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== has-flag@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-symbols@^1.0.1, has-symbols@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" - integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== - -has-tostringtag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" - integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== - dependencies: - has-symbols "^1.0.2" - -has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== +hasown@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.0.tgz#f4c513d454a57b7c7e1650778de226b11700546c" + integrity sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA== dependencies: - function-bind "^1.1.1" - -hosted-git-info@^2.1.4: - version "2.8.9" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" - integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== + function-bind "^1.1.2" http-errors@~1.6.2: version "1.6.3" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" - integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0= + integrity sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A== dependencies: depd "~1.1.2" inherits "2.0.3" setprototypeof "1.1.0" statuses ">= 1.4.0 < 2" -human-signals@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" - integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== +human-signals@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-5.0.0.tgz#42665a284f9ae0dade3ba41ebc37eb4b852f3a28" + integrity sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ== husky@^7.0.2: - version "7.0.2" - resolved "https://registry.yarnpkg.com/husky/-/husky-7.0.2.tgz#21900da0f30199acca43a46c043c4ad84ae88dff" - integrity sha512-8yKEWNX4z2YsofXAMT7KvA1g8p+GxtB1ffV8XtpAEGuXNAbCV5wdNKH+qTpw8SM9fh4aMPDR+yQuKfgnreyZlg== - -ignore@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" - integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== + version "7.0.4" + resolved "https://registry.yarnpkg.com/husky/-/husky-7.0.4.tgz#242048245dc49c8fb1bf0cc7cfb98dd722531535" + integrity sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ== -ignore@^5.1.4: - version "5.1.8" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" - integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== +ignore@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.0.tgz#67418ae40d34d6999c95ff56016759c718c82f78" + integrity sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg== -import-fresh@^3.0.0, import-fresh@^3.2.1: +import-fresh@^3.2.1: version "3.3.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== @@ -1923,12 +1998,12 @@ import-fresh@^3.0.0, import-fresh@^3.2.1: imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== dependencies: once "^1.3.0" wrappy "1" @@ -1941,148 +2016,92 @@ inherits@2: inherits@2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= - -internal-slot@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" - integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== - dependencies: - get-intrinsic "^1.1.0" - has "^1.0.3" - side-channel "^1.0.4" - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= - -is-bigint@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" - integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== - dependencies: - has-bigints "^1.0.1" - -is-boolean-object@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" - integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-callable@^1.1.4, is-callable@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945" - integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w== + integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw== -is-core-module@^2.2.0, is-core-module@^2.6.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.6.0.tgz#d7553b2526fe59b92ba3e40c8df757ec8a709e19" - integrity sha512-wShG8vs60jKfPWpF2KZRaAtvt3a20OAn7+IJ6hLPECpSABLcKtFKTTI4ZtH5QcBruBHlq+WsdHWyz0BCZW7svQ== +is-builtin-module@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-3.2.1.tgz#f03271717d8654cfcaf07ab0463faa3571581169" + integrity sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A== dependencies: - has "^1.0.3" + builtin-modules "^3.3.0" -is-date-object@^1.0.1: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" - integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== +is-core-module@^2.13.0: + version "2.13.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" + integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== dependencies: - has-tostringtag "^1.0.0" + hasown "^2.0.0" is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== is-fullwidth-code-point@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== -is-glob@^4.0.0, is-glob@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" - integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== +is-fullwidth-code-point@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz#fae3167c729e7463f8461ce512b080a49268aa88" + integrity sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ== + +is-fullwidth-code-point@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-5.0.0.tgz#9609efced7c2f97da7b60145ef481c787c7ba704" + integrity sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA== + dependencies: + get-east-asian-width "^1.0.0" + +is-glob@^4.0.0, is-glob@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== dependencies: is-extglob "^2.1.1" is-module@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" - integrity sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE= - -is-negative-zero@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" - integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== - -is-number-object@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.6.tgz#6a7aaf838c7f0686a50b4553f7e54a96494e89f0" - integrity sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g== - dependencies: - has-tostringtag "^1.0.0" - -is-regex@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" - integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" + integrity sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g== -is-stream@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" - integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== -is-string@^1.0.5, is-string@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" - integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== - dependencies: - has-tostringtag "^1.0.0" +is-path-inside@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== -is-symbol@^1.0.2, is-symbol@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" - integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== - dependencies: - has-symbols "^1.0.2" +is-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac" + integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA== isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= - -jest-worker@^26.2.1: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" - integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== - dependencies: - "@types/node" "*" - merge-stream "^2.0.0" - supports-color "^7.0.0" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== js-reporters@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/js-reporters/-/js-reporters-1.1.0.tgz#c83c00fe0d4c9f67f944b4edd5f3b2957497cd62" - integrity sha1-yDwA/g1Mn2f5RLTt1fOylXSXzWI= + integrity sha512-+hsAd3ijND8m4sYeEMOWCylj2kAXFLrCVETeICtyEhkLVuHRm1d5mfKpUZvaSZo+EjoQt+K0mbrzZRmozmLoQw== js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-yaml@^3.13.1: - version "3.14.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" - integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== dependencies: - argparse "^1.0.7" - esprima "^4.0.0" + argparse "^2.0.1" jsesc@^2.5.1: version "2.5.2" @@ -2092,41 +2111,34 @@ jsesc@^2.5.1: jsesc@~0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" - integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= + integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== -json-parse-better-errors@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" - integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== +json-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== -json-schema-traverse@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" - integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== - json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== -json5@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" - integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== - dependencies: - minimist "^1.2.0" +json5@^2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== -json5@^2.1.2: - version "2.2.0" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" - integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== +keyv@^4.5.3: + version "4.5.4" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" + integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== dependencies: - minimist "^1.2.5" + json-buffer "3.0.1" levn@^0.4.1: version "0.4.1" @@ -2136,23 +2148,38 @@ levn@^0.4.1: prelude-ls "^1.2.1" type-check "~0.4.0" -load-json-file@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" - integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs= - dependencies: - graceful-fs "^4.1.2" - parse-json "^4.0.0" - pify "^3.0.0" - strip-bom "^3.0.0" - -locate-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" - integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= +lilconfig@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.0.0.tgz#f8067feb033b5b74dab4602a5f5029420be749bc" + integrity sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g== + +lint-staged@^15.2.0: + version "15.2.0" + resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-15.2.0.tgz#3111534ca58096a3c8f70b044b6e7fe21b36f859" + integrity sha512-TFZzUEV00f+2YLaVPWBWGAMq7So6yQx+GG8YRMDeOEIf95Zn5RyiLMsEiX4KTNl9vq/w+NqRJkLA1kPIo15ufQ== + dependencies: + chalk "5.3.0" + commander "11.1.0" + debug "4.3.4" + execa "8.0.1" + lilconfig "3.0.0" + listr2 "8.0.0" + micromatch "4.0.5" + pidtree "0.6.0" + string-argv "0.3.2" + yaml "2.3.4" + +listr2@8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/listr2/-/listr2-8.0.0.tgz#aa7c230995f8ce378585f7c96c0c6d1cefa4700d" + integrity sha512-u8cusxAcyqAiQ2RhYvV7kRKNLgUvtObIbhOX2NCXqvp1UU32xIg5CT22ykS2TPKJXZWJwtK3IKLiqAGlGNE+Zg== dependencies: - p-locate "^2.0.0" - path-exists "^3.0.0" + cli-truncate "^4.0.0" + colorette "^2.0.20" + eventemitter3 "^5.0.1" + log-update "^6.0.0" + rfdc "^1.3.0" + wrap-ansi "^9.0.0" locate-path@^5.0.0: version "5.0.0" @@ -2161,62 +2188,71 @@ locate-path@^5.0.0: dependencies: p-locate "^4.1.0" +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + lodash-es@^4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee" integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== -lodash.clonedeep@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" - integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= - lodash.debounce@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" - integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= + integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== lodash.merge@^4.6.2: version "4.6.2" resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== -lodash.truncate@^4.4.2: - version "4.4.2" - resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" - integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM= - -lodash@4.17.21, lodash@^4.17.10: +lodash@^4.17.10, lodash@~4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== -lru-cache@^6.0.0: +log-update@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + resolved "https://registry.yarnpkg.com/log-update/-/log-update-6.0.0.tgz#0ddeb7ac6ad658c944c1de902993fce7c33f5e59" + integrity sha512-niTvB4gqvtof056rRIrTZvjNYE4rCUzO6X/X+kYjd7WFxXeJ0NwEFnRxX6ehkvv3jTwrXnNdtAak5XYZuIyPFw== dependencies: - yallist "^4.0.0" + ansi-escapes "^6.2.0" + cli-cursor "^4.0.0" + slice-ansi "^7.0.0" + strip-ansi "^7.1.0" + wrap-ansi "^9.0.0" -magic-string@0.25.x: - version "0.25.7" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051" - integrity sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA== +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== dependencies: - sourcemap-codec "^1.4.4" + yallist "^3.0.2" -magic-string@0.26.1: - version "0.26.1" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.26.1.tgz#ba9b651354fa9512474199acecf9c6dbe93f97fd" - integrity sha512-ndThHmvgtieXe8J/VGPjG+Apu7v7ItcD5mhEIvOscWjPF/ccOiLxHaSuCAS2G+3x4GKsAbT8u7zdyamupui8Tg== +magic-string@0.30.x, magic-string@~0.30.0: + version "0.30.5" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.5.tgz#1994d980bd1c8835dc6e78db7cbd4ae4f24746f9" + integrity sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA== dependencies: - sourcemap-codec "^1.4.8" + "@jridgewell/sourcemap-codec" "^1.4.15" merge-stream@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== +micromatch@4.0.5: + version "4.0.5" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + mime@1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" @@ -2227,136 +2263,76 @@ mime@1.6.0: resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== -mime@>=2.4.6: - version "2.5.2" - resolved "https://registry.yarnpkg.com/mime/-/mime-2.5.2.tgz#6e3dc6cc2b9510643830e5f19d5cb753da5eeabe" - integrity sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg== +mime@^2: + version "2.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.6.0.tgz#a2a682a95cd4d0cb1d6257e28f83da7e35800367" + integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== mimic-fn@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== -minimatch@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== +mimic-fn@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc" + integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== + +minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" -minimist@^1.2.0, minimist@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" - integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== - -mkdirp@1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - -moment@2.29.2: - version "2.29.2" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.2.tgz#00910c60b20843bcba52d37d58c628b47b1f20e4" - integrity sha512-UgzG4rvxYpN15jgCmVJwac49h9ly9NurikMWGPdVxm8GZD6XjkKPxDTjQQ43gtGgnV3X0cAyWDdP2Wexoquifg== +mkdirp@~3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-3.0.1.tgz#e44e4c5607fb279c168241713cc6e0fea9adcb50" + integrity sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg== -mri@^1.1.5: - version "1.2.0" - resolved "https://registry.yarnpkg.com/mri/-/mri-1.2.0.tgz#6721480fec2a11a4889861115a48b6cbe7cc8f0b" - integrity sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA== +moment@~2.29.3: + version "2.29.4" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.4.tgz#3dbe052889fe7c1b2ed966fcb3a77328964ef108" + integrity sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w== ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== ms@2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@^2.1.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -multimatch@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-4.0.0.tgz#8c3c0f6e3e8449ada0af3dd29efb491a375191b3" - integrity sha512-lDmx79y1z6i7RNx0ZGCPq1bzJ6ZoDDKbvh7jxr9SJcWLkShMzXrHbYVpTdnhNM5MXpDUxCQ4DgqVttVXlBgiBQ== - dependencies: - "@types/minimatch" "^3.0.3" - array-differ "^3.0.0" - array-union "^2.1.0" - arrify "^2.0.1" - minimatch "^3.0.4" - natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= - -node-releases@^1.1.75: - version "1.1.75" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.75.tgz#6dd8c876b9897a1b8e5a02de26afa79bb54ebbfe" - integrity sha512-Qe5OUajvqrqDSy6wrWFmMwfJ0jVgwiw4T3KqmbTcZ62qW0gQkheXYhcFM1+lOVcGUoRxcEcfyvFMAnDgaF1VWw== + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== -normalize-package-data@^2.3.2: - version "2.5.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" - integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== - dependencies: - hosted-git-info "^2.1.4" - resolve "^1.10.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - -npm-run-path@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" - integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== - dependencies: - path-key "^3.0.0" - -object-inspect@^1.11.0, object-inspect@^1.9.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.11.0.tgz#9dceb146cedd4148a0d9e51ab88d34cf509922b1" - integrity sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg== - -object-keys@^1.0.12, object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -object.assign@^4.1.0, object.assign@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" - integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== - dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - has-symbols "^1.0.1" - object-keys "^1.1.1" +node-releases@^2.0.14: + version "2.0.14" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" + integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== -object.values@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.4.tgz#0d273762833e816b693a637d30073e7051535b30" - integrity sha512-TnGo7j4XSnKQoK3MfvkzqKCi0nVe/D9I9IjwTNYdb/fxYHpjrluHVOgw0AF6jrRFGMPHdfuidR09tIDiIvnaSg== +npm-run-path@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.2.0.tgz#224cdd22c755560253dd71b83a1ef2f758b2e955" + integrity sha512-W4/tgAXFqFA0iL7fk0+uQ3g7wkL8xJmx3XdK0VGb4cHW//eZTtKGvFBBoRKVTpY7n6ze4NL9ly7rgXcHufqXKg== dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.18.2" + path-key "^4.0.0" on-finished@~2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" - integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= + integrity sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww== dependencies: ee-first "1.1.1" -once@^1.3.0, once@^1.3.1, once@^1.4.0: +once@^1.3.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== dependencies: wrappy "1" @@ -2367,29 +2343,29 @@ onetime@^5.1.0: dependencies: mimic-fn "^2.1.0" +onetime@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-6.0.0.tgz#7c24c18ed1fd2e9bca4bd26806a33613c77d34b4" + integrity sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ== + dependencies: + mimic-fn "^4.0.0" + opener@1: version "1.5.2" resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== -optionator@^0.9.1: - version "0.9.1" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" - integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== +optionator@^0.9.3: + version "0.9.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" + integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== dependencies: + "@aashutoshrathi/word-wrap" "^1.2.3" deep-is "^0.1.3" fast-levenshtein "^2.0.6" levn "^0.4.1" prelude-ls "^1.2.1" type-check "^0.4.0" - word-wrap "^1.2.3" - -p-limit@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" - integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== - dependencies: - p-try "^1.0.0" p-limit@^2.2.0: version "2.3.0" @@ -2398,12 +2374,12 @@ p-limit@^2.2.0: dependencies: p-try "^2.0.0" -p-locate@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" - integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== dependencies: - p-limit "^1.1.0" + yocto-queue "^0.1.0" p-locate@^4.1.0: version "4.1.0" @@ -2412,17 +2388,19 @@ p-locate@^4.1.0: dependencies: p-limit "^2.2.0" -p-try@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" - integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" p-try@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== -package-name-regex@2.0.6: +package-name-regex@~2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/package-name-regex/-/package-name-regex-2.0.6.tgz#b54bcb04d950e38082b7bb38fa558e01c1679334" integrity sha512-gFL35q7kbE/zBaPA3UKhp2vSzcPYx2ecbYuwv1ucE9Il6IIgBDweBlH8D68UFGZic2MkllKa2KHCfC1IQBQUYA== @@ -2434,19 +2412,6 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" -parse-json@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" - integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= - dependencies: - error-ex "^1.3.1" - json-parse-better-errors "^1.0.1" - -path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= - path-exists@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" @@ -2455,88 +2420,64 @@ path-exists@^4.0.0: path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== -path-key@^3.0.0, path-key@^3.1.0: +path-key@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== -path-parse@^1.0.6: +path-key@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18" + integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ== + +path-parse@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== -path-type@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" - integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== - dependencies: - pify "^3.0.0" - -picomatch@^2.2.2: - version "2.3.0" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" - integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== - -pify@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" - integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== -pkg-dir@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" - integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s= - dependencies: - find-up "^2.1.0" +picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== -pkg-up@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-2.0.0.tgz#c819ac728059a461cab1c3889a2be3c49a004d7f" - integrity sha1-yBmscoBZpGHKscOImivjxJoATX8= - dependencies: - find-up "^2.1.0" +pidtree@0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.6.0.tgz#90ad7b6d42d5841e69e0a2419ef38f8883aa057c" + integrity sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g== prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== -prettier@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.4.0.tgz#85bdfe0f70c3e777cf13a4ffff39713ca6f64cba" - integrity sha512-DsEPLY1dE5HF3BxCRBmD4uYZ+5DCbvatnolqTqcxEgKVZnL2kUfyu7b8pPQ5+hTBkdhU9SLUmK0/pHb07RE4WQ== - -pretty-quick@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/pretty-quick/-/pretty-quick-3.1.1.tgz#93ca4e2dd38cc4e970e3f54a0ead317a25454688" - integrity sha512-ZYLGiMoV2jcaas3vTJrLvKAYsxDoXQBUn8OSTxkl67Fyov9lyXivJTl0+2WVh+y6EovGcw7Lm5ThYpH+Sh3XxQ== +prettier-linter-helpers@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" + integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== dependencies: - chalk "^3.0.0" - execa "^4.0.0" - find-up "^4.1.0" - ignore "^5.1.4" - mri "^1.1.5" - multimatch "^4.0.0" - -progress@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" - integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + fast-diff "^1.1.2" -pump@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" +prettier@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.1.1.tgz#6ba9f23165d690b6cbdaa88cb0807278f7019848" + integrity sha512-22UbSzg8luF4UuZtzgiUOfcGM8s4tjBv6dJRT7j275NXsy2jb4aJa4NNveul5x4eqlF1wuhuR2RElK71RvmVaw== punycode@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + version "2.3.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" + integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== randombytes@^2.1.0: version "2.1.0" @@ -2550,27 +2491,10 @@ range-parser@~1.2.0: resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== -read-pkg-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" - integrity sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc= - dependencies: - find-up "^2.0.0" - read-pkg "^3.0.0" - -read-pkg@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" - integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k= - dependencies: - load-json-file "^4.0.0" - normalize-package-data "^2.3.2" - path-type "^3.0.0" - -regenerate-unicode-properties@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-9.0.0.tgz#54d09c7115e1f53dc2314a974b32c1c344efe326" - integrity sha512-3E12UeNSPfjrgwjkR81m5J7Aw/T55Tu7nUyZVQYCKEOs+2dkxEY+DpPtZzO4YruuiPb7NkYLVcyJC4+zCbk5pA== +regenerate-unicode-properties@^10.1.0: + version "10.1.1" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz#6b0e05489d9076b04c436f318d9b067bba459480" + integrity sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q== dependencies: regenerate "^1.4.2" @@ -2579,56 +2503,41 @@ regenerate@^1.4.2: resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== -regenerator-runtime@^0.13.4: - version "0.13.9" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" - integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== +regenerator-runtime@^0.14.0: + version "0.14.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" + integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== -regenerator-transform@^0.14.2: - version "0.14.5" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.5.tgz#c98da154683671c9c4dcb16ece736517e1b7feb4" - integrity sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw== +regenerator-transform@^0.15.2: + version "0.15.2" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.2.tgz#5bbae58b522098ebdf09bca2f83838929001c7a4" + integrity sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg== dependencies: "@babel/runtime" "^7.8.4" -regexpp@^3.1.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" - integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== - -regexpu-core@^4.7.1: - version "4.8.0" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.8.0.tgz#e5605ba361b67b1718478501327502f4479a98f0" - integrity sha512-1F6bYsoYiz6is+oz70NWur2Vlh9KWtswuRuzJOfeYUrfPX2o8n74AnUVaOGDbUqVGO9fNHu48/pjJO4sNVwsOg== +regexpu-core@^5.3.1: + version "5.3.2" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.3.2.tgz#11a2b06884f3527aec3e93dbbf4a3b958a95546b" + integrity sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ== dependencies: + "@babel/regjsgen" "^0.8.0" regenerate "^1.4.2" - regenerate-unicode-properties "^9.0.0" - regjsgen "^0.5.2" - regjsparser "^0.7.0" + regenerate-unicode-properties "^10.1.0" + regjsparser "^0.9.1" unicode-match-property-ecmascript "^2.0.0" - unicode-match-property-value-ecmascript "^2.0.0" - -regjsgen@^0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" - integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== + unicode-match-property-value-ecmascript "^2.1.0" -regjsparser@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.7.0.tgz#a6b667b54c885e18b52554cb4960ef71187e9968" - integrity sha512-A4pcaORqmNMDVwUjWoTzuhwMGpP+NykpfqAsEgI1FSH/EzC7lrN5TMd+kN8YCovX+jMpu8eaqXgXPCa0g8FQNQ== +regjsparser@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.9.1.tgz#272d05aa10c7c1f67095b1ff0addae8442fc5709" + integrity sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ== dependencies: jsesc "~0.5.0" require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= - -require-from-string@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" - integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== require-main-filename@^2.0.0: version "2.0.0" @@ -2638,7 +2547,7 @@ require-main-filename@^2.0.0: require-package-name@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/require-package-name/-/require-package-name-2.0.1.tgz#c11e97276b65b8e2923f75dabf5fb2ef0c3841b9" - integrity sha1-wR6XJ2tluOKSP3Xav1+y7ww4Qbk= + integrity sha512-uuoJ1hU/k6M0779t3VMVIYpb2VMJk05cehCaABFhXaibcbvfgR8wKiozLjVFSzJPmQMRqIcO0HMyTFqfV09V6Q== resolve-from@^4.0.0: version "4.0.0" @@ -2648,15 +2557,34 @@ resolve-from@^4.0.0: resolve@1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" - integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= + integrity sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg== -resolve@^1.10.0, resolve@^1.14.2, resolve@^1.19.0, resolve@^1.20.0: - version "1.20.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" - integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== +resolve@^1.14.2, resolve@^1.22.1: + version "1.22.8" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" + integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== dependencies: - is-core-module "^2.2.0" - path-parse "^1.0.6" + is-core-module "^2.13.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +restore-cursor@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-4.0.0.tgz#519560a4318975096def6e609d44100edaa4ccb9" + integrity sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rfdc@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b" + integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== rimraf@^3.0.2: version "3.0.2" @@ -2665,77 +2593,67 @@ rimraf@^3.0.2: dependencies: glob "^7.1.3" -rollup-plugin-license@^2.7.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-license/-/rollup-plugin-license-2.7.0.tgz#89551c371d50441612b9202f172b9935b4b1f7c8" - integrity sha512-0H1Fbuf85rvpadpmAaairdahzQHY0zHtcXkOFV5EStjX9aMCO2Hz5AQp/zZe+K/PB3o6As7R9uzcb8Pw1K94dg== - dependencies: - commenting "1.1.0" - glob "7.2.0" - lodash "4.17.21" - magic-string "0.26.1" - mkdirp "1.0.4" - moment "2.29.2" - package-name-regex "2.0.6" - spdx-expression-validate "2.0.0" - spdx-satisfies "5.0.1" - -rollup-plugin-serve@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-serve/-/rollup-plugin-serve-1.1.0.tgz#0654a57021a21b903340c69940f7463706e8288d" - integrity sha512-pYkSsuA0/psKqhhictkJw1c2klya5b+LlCvipWqI9OE1aG2M97mRumZCbBlry5CMEOzYBBgSDgd1694sNbmyIw== +rollup-plugin-license@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/rollup-plugin-license/-/rollup-plugin-license-3.2.0.tgz#99958a5ed2ce4796a3a59bdcc6836dfd1c4df0e1" + integrity sha512-gLtSOTE3hZ/mDgxg1HvYz87timTpLlyWXnV7OTyYMhn+Esek+xKxAOjtTsYnfMFGtsBWX+hvqC4b2Ct5ABpE6A== + dependencies: + commenting "~1.1.0" + glob "~7.2.0" + lodash "~4.17.21" + magic-string "~0.30.0" + mkdirp "~3.0.0" + moment "~2.29.3" + package-name-regex "~2.0.6" + spdx-expression-validate "~2.0.0" + spdx-satisfies "~5.0.1" + +rollup-plugin-serve@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/rollup-plugin-serve/-/rollup-plugin-serve-1.1.1.tgz#bc06363a23d0a207f61f9b2bed8100a539481cbd" + integrity sha512-H0VarZRtFR0lfiiC9/P8jzCDvtFf1liOX4oSdIeeYqUCKrmFA7vNiQ0rg2D+TuoP7leaa/LBR8XBts5viF6lnw== dependencies: - mime ">=2.4.6" + mime "^2" opener "1" -rollup-plugin-terser@^7.0.2: - version "7.0.2" - resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz#e8fbba4869981b2dc35ae7e8a502d5c6c04d324d" - integrity sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ== +rollup@^4.9.4: + version "4.9.4" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.9.4.tgz#37bc0c09ae6b4538a9c974f4d045bb64b2e7c27c" + integrity sha512-2ztU7pY/lrQyXSCnnoU4ICjT/tCG9cdH3/G25ERqE3Lst6vl2BCM5hL2Nw+sslAvAf+ccKsAq1SkKQALyqhR7g== dependencies: - "@babel/code-frame" "^7.10.4" - jest-worker "^26.2.1" - serialize-javascript "^4.0.0" - terser "^5.0.0" - -rollup@^2.56.3: - version "2.56.3" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.56.3.tgz#b63edadd9851b0d618a6d0e6af8201955a77aeff" - integrity sha512-Au92NuznFklgQCUcV96iXlxUbHuB1vQMaH76DHl5M11TotjOHwqk9CwcrT78+Tnv4FN9uTBxq6p4EJoYkpyekg== + "@types/estree" "1.0.5" optionalDependencies: + "@rollup/rollup-android-arm-eabi" "4.9.4" + "@rollup/rollup-android-arm64" "4.9.4" + "@rollup/rollup-darwin-arm64" "4.9.4" + "@rollup/rollup-darwin-x64" "4.9.4" + "@rollup/rollup-linux-arm-gnueabihf" "4.9.4" + "@rollup/rollup-linux-arm64-gnu" "4.9.4" + "@rollup/rollup-linux-arm64-musl" "4.9.4" + "@rollup/rollup-linux-riscv64-gnu" "4.9.4" + "@rollup/rollup-linux-x64-gnu" "4.9.4" + "@rollup/rollup-linux-x64-musl" "4.9.4" + "@rollup/rollup-win32-arm64-msvc" "4.9.4" + "@rollup/rollup-win32-ia32-msvc" "4.9.4" + "@rollup/rollup-win32-x64-msvc" "4.9.4" fsevents "~2.3.2" +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + safe-buffer@^5.1.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== -safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -"semver@2 || 3 || 4 || 5": - version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== - -semver@7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" - integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== - -semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== - -semver@^7.2.1: - version "7.3.5" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" - integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== - dependencies: - lru-cache "^6.0.0" +semver@^6.3.1: + version "6.3.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== send@0.16.2: version "0.16.2" @@ -2756,17 +2674,17 @@ send@0.16.2: range-parser "~1.2.0" statuses "~1.4.0" -serialize-javascript@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" - integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw== +serialize-javascript@^6.0.1: + version "6.0.2" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.2.tgz#defa1e055c83bf6d59ea805d8da862254eb6a6c2" + integrity sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g== dependencies: randombytes "^2.1.0" set-blocking@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== setprototypeof@1.1.0: version "1.1.0" @@ -2785,57 +2703,50 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== -side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== - dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" - signal-exit@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" - integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== -slice-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" - integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== +signal-exit@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" + integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== + +slice-ansi@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-5.0.0.tgz#b73063c57aa96f9cd881654b15294d95d285c42a" + integrity sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ== dependencies: - ansi-styles "^4.0.0" - astral-regex "^2.0.0" - is-fullwidth-code-point "^3.0.0" + ansi-styles "^6.0.0" + is-fullwidth-code-point "^4.0.0" + +slice-ansi@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-7.1.0.tgz#cd6b4655e298a8d1bdeb04250a433094b347b9a9" + integrity sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg== + dependencies: + ansi-styles "^6.2.1" + is-fullwidth-code-point "^5.0.0" + +smob@^1.0.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/smob/-/smob-1.4.1.tgz#66270e7df6a7527664816c5b577a23f17ba6f5b5" + integrity sha512-9LK+E7Hv5R9u4g4C3p+jjLstaLe11MDsL21UpYaCNmapvMkYhqCV4A/f/3gyH8QjMyh6l68q9xC85vihY9ahMQ== source-map-support@~0.5.20: - version "0.5.20" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.20.tgz#12166089f8f5e5e8c56926b377633392dd2cb6c9" - integrity sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw== + version "0.5.21" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== dependencies: buffer-from "^1.0.0" source-map "^0.6.0" -source-map@^0.5.0: - version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= - source-map@^0.6.0: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -source-map@~0.7.2: - version "0.7.3" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" - integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== - -sourcemap-codec@^1.4.4, sourcemap-codec@^1.4.8: - version "1.4.8" - resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" - integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== - spdx-compare@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/spdx-compare/-/spdx-compare-1.0.0.tgz#2c55f117362078d7409e6d7b08ce70a857cd3ed7" @@ -2845,14 +2756,6 @@ spdx-compare@^1.0.0: spdx-expression-parse "^3.0.0" spdx-ranges "^2.0.0" -spdx-correct@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" - integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== - dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" - spdx-exceptions@^2.1.0: version "2.3.0" resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" @@ -2866,7 +2769,7 @@ spdx-expression-parse@^3.0.0: spdx-exceptions "^2.1.0" spdx-license-ids "^3.0.0" -spdx-expression-validate@2.0.0: +spdx-expression-validate@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/spdx-expression-validate/-/spdx-expression-validate-2.0.0.tgz#25c9408e1c63fad94fff5517bb7101ffcd23350b" integrity sha512-b3wydZLM+Tc6CFvaRDBOF9d76oGIHNCLYFeHbftFXUWjnfZWganmDmvtM5sm1cRwJc/VDBMLyGGrsLFd1vOxbg== @@ -2874,16 +2777,16 @@ spdx-expression-validate@2.0.0: spdx-expression-parse "^3.0.0" spdx-license-ids@^3.0.0: - version "3.0.10" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.10.tgz#0d9becccde7003d6c658d487dd48a32f0bf3014b" - integrity sha512-oie3/+gKf7QtpitB0LYLETe+k8SifzsX4KixvpOsbI6S0kRiRQ5MKOio8eMSAKQ17N06+wdEOXRiId+zOxo0hA== + version "3.0.16" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz#a14f64e0954f6e25cc6587bd4f392522db0d998f" + integrity sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw== spdx-ranges@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/spdx-ranges/-/spdx-ranges-2.1.1.tgz#87573927ba51e92b3f4550ab60bfc83dd07bac20" integrity sha512-mcdpQFV7UDAgLpXEE/jOMqvK4LBoO0uTQg0uvXUewmEFhpiZx5yJSZITHB8w1ZahKdhfZqP5GPEOKLyEq5p8XA== -spdx-satisfies@5.0.1: +spdx-satisfies@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/spdx-satisfies/-/spdx-satisfies-5.0.1.tgz#9feeb2524686c08e5f7933c16248d4fdf07ed6a6" integrity sha512-Nwor6W6gzFp8XX4neaKQ7ChV4wmpSh2sSDemMFSzHxpTw460jxFYeOn+jq4ybnSSw/5sc3pjka9MQPouksQNpw== @@ -2892,69 +2795,64 @@ spdx-satisfies@5.0.1: spdx-expression-parse "^3.0.0" spdx-ranges "^2.0.0" -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= - "statuses@>= 1.4.0 < 2": version "1.5.0" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" - integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= + integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== statuses@~1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087" integrity sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew== +string-argv@0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.2.tgz#2b6d0ef24b656274d957d54e0a4bbf6153dc02b6" + integrity sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q== + string-width@^4.1.0, string-width@^4.2.0: - version "4.2.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5" - integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA== + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== dependencies: emoji-regex "^8.0.0" is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.0" + strip-ansi "^6.0.1" -string.prototype.trimend@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz#e75ae90c2942c63504686c18b287b4a0b1a45f80" - integrity sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A== +string-width@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-7.0.0.tgz#14aa1b7aaa126d5b64fa79d3c894da8a9650ba06" + integrity sha512-GPQHj7row82Hjo9hKZieKcHIhaAIKOJvFSIZXuCU9OASVZrMNUaZuz++SPVrBjnLsnk4k+z9f2EIypgxf2vNFw== dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" + emoji-regex "^10.3.0" + get-east-asian-width "^1.0.0" + strip-ansi "^7.1.0" -string.prototype.trimstart@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz#b36399af4ab2999b4c9c648bd7a3fb2bb26feeed" - integrity sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw== +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" + ansi-regex "^5.0.1" -strip-ansi@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" - integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== +strip-ansi@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" + integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== dependencies: - ansi-regex "^5.0.0" + ansi-regex "^6.0.1" strip-ansi@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-0.1.1.tgz#39e8a98d044d150660abe4a6808acf70bb7bc991" - integrity sha1-OeipjQRNFQZgq+SmgIrPcLt7yZE= + integrity sha512-behete+3uqxecWlDAm5lmskaSaISA+ThQ4oNNBDTBJt0x2ppR6IPqfZNuj6BLaLJ/Sji4TPZlcRyOis8wXQTLg== -strip-bom@^3.0.0: +strip-final-newline@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= - -strip-final-newline@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" - integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd" + integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw== -strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: +strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== @@ -2966,58 +2864,62 @@ supports-color@^5.3.0: dependencies: has-flag "^3.0.0" -supports-color@^7.0.0, supports-color@^7.1.0: +supports-color@^7.1.0: version "7.2.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== dependencies: has-flag "^4.0.0" -table@^6.0.9: - version "6.7.1" - resolved "https://registry.yarnpkg.com/table/-/table-6.7.1.tgz#ee05592b7143831a8c94f3cee6aae4c1ccef33e2" - integrity sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg== +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +synckit@^0.8.6: + version "0.8.8" + resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.8.8.tgz#fe7fe446518e3d3d49f5e429f443cf08b6edfcd7" + integrity sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ== dependencies: - ajv "^8.0.1" - lodash.clonedeep "^4.5.0" - lodash.truncate "^4.4.2" - slice-ansi "^4.0.0" - string-width "^4.2.0" - strip-ansi "^6.0.0" + "@pkgr/core" "^0.1.0" + tslib "^2.6.2" -terser@^5.0.0: - version "5.8.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.8.0.tgz#c6d352f91aed85cc6171ccb5e84655b77521d947" - integrity sha512-f0JH+6yMpneYcRJN314lZrSwu9eKkUFEHLN/kNy8ceh8gaRiLgFPJqrB9HsXjhEGdv4e/ekjTOFxIlL6xlma8A== +terser@^5.17.4: + version "5.26.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.26.0.tgz#ee9f05d929f4189a9c28a0feb889d96d50126fe1" + integrity sha512-dytTGoE2oHgbNV9nTzgBEPaqAWvcJNl66VZ0BkJqlvp71IjO8CxdBx/ykCNb47cLnCmCvRZ6ZR0tLkqvZCdVBQ== dependencies: + "@jridgewell/source-map" "^0.3.3" + acorn "^8.8.2" commander "^2.20.0" - source-map "~0.7.2" source-map-support "~0.5.20" text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== to-fast-properties@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= + integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== -tsconfig-paths@^3.11.0: - version "3.11.0" - resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.11.0.tgz#954c1fe973da6339c78e06b03ce2e48810b65f36" - integrity sha512-7ecdYDnIdmv639mmDwslG6KQg1Z9STTz1j7Gcz0xa+nshh/gKDAHcPxRbWOsA3SPp0tXP2leTcY9Kw+NAkfZzA== +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== dependencies: - "@types/json5" "^0.0.29" - json5 "^1.0.1" - minimist "^1.2.0" - strip-bom "^3.0.0" + is-number "^7.0.0" + +tslib@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" + integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== tunnel@0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/tunnel/-/tunnel-0.0.3.tgz#e8f988115ca7be9d076c7a1fae4788be708f0cf1" - integrity sha1-6PmIEVynvp0HbHofrkeIvnCPDPE= + integrity sha512-YohLhrnpZrbzloZ4AOHh+zKgGrkNO5LDw72UMhfGPC4ccHnNAyimzEb0RMZgqAIuR+PqXO4BzRhaqsv8UBw13Q== type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" @@ -3031,15 +2933,10 @@ type-fest@^0.20.2: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== -unbox-primitive@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471" - integrity sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw== - dependencies: - function-bind "^1.1.1" - has-bigints "^1.0.1" - has-symbols "^1.0.2" - which-boxed-primitive "^1.0.2" +type-fest@^3.0.0: + version "3.13.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-3.13.1.tgz#bb744c1f0678bea7543a2d1ec24e83e68e8c8706" + integrity sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g== unicode-canonical-property-names-ecmascript@^2.0.0: version "2.0.0" @@ -3054,15 +2951,23 @@ unicode-match-property-ecmascript@^2.0.0: unicode-canonical-property-names-ecmascript "^2.0.0" unicode-property-aliases-ecmascript "^2.0.0" -unicode-match-property-value-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz#1a01aa57247c14c568b89775a54938788189a714" - integrity sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw== +unicode-match-property-value-ecmascript@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz#cb5fffdcd16a05124f5a4b0bf7c3770208acbbe0" + integrity sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA== unicode-property-aliases-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz#0a36cb9a585c4f6abd51ad1deddb285c165297c8" - integrity sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ== + version "2.1.0" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd" + integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== + +update-browserslist-db@^1.0.13: + version "1.0.13" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4" + integrity sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg== + dependencies: + escalade "^3.1.1" + picocolors "^1.0.0" uri-js@^4.2.2: version "4.4.1" @@ -3071,34 +2976,10 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" -v8-compile-cache@^2.0.3: - version "2.3.0" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" - integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== - -validate-npm-package-license@^3.0.1: - version "3.0.4" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" - integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== - dependencies: - spdx-correct "^3.0.0" - spdx-expression-parse "^3.0.0" - -which-boxed-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" - integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== - dependencies: - is-bigint "^1.0.1" - is-boolean-object "^1.1.0" - is-number-object "^1.0.4" - is-string "^1.0.5" - is-symbol "^1.0.3" - which-module@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" - integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= + version "2.0.1" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.1.tgz#776b1fe35d90aebe99e8ac15eb24093389a4a409" + integrity sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ== which@^2.0.1: version "2.0.2" @@ -3107,11 +2988,6 @@ which@^2.0.1: dependencies: isexe "^2.0.0" -word-wrap@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" - integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== - wrap-ansi@^6.2.0: version "6.2.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" @@ -3121,20 +2997,34 @@ wrap-ansi@^6.2.0: string-width "^4.1.0" strip-ansi "^6.0.0" +wrap-ansi@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-9.0.0.tgz#1a3dc8b70d85eeb8398ddfb1e4a02cd186e58b3e" + integrity sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q== + dependencies: + ansi-styles "^6.2.1" + string-width "^7.0.0" + strip-ansi "^7.1.0" + wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== y18n@^4.0.0: version "4.0.3" resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== +yallist@^3.0.2: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yaml@2.3.4: + version "2.3.4" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.4.tgz#53fc1d514be80aabf386dc6001eb29bf3b7523b2" + integrity sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA== yargs-parser@^18.1.1: version "18.1.3" @@ -3160,3 +3050,8 @@ yargs@15.3.1: which-module "^2.0.0" y18n "^4.0.0" yargs-parser "^18.1.1" + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== From 085e3323fda7bfebb60e05d14cd5b1f944dfc006 Mon Sep 17 00:00:00 2001 From: Tyson Cleary Date: Thu, 11 Jan 2024 16:42:14 -0800 Subject: [PATCH 2/2] run eslint --fix --- dist/w.js.map | 2 +- dist/wpt.js | 26 ++++++++--- src/index.js | 7 +-- src/lib/events.js | 2 +- src/lib/global-events.js | 1 + src/lib/utils.js | 7 +-- src/tracker.js | 94 +++++++++++++++++++++++++--------------- src/woopra.js | 17 ++++---- 8 files changed, 100 insertions(+), 56 deletions(-) diff --git a/dist/w.js.map b/dist/w.js.map index 2b0d6b2..5b42e1c 100644 --- a/dist/w.js.map +++ b/dist/w.js.map @@ -1 +1 @@ -{"version":3,"file":"w.js","sources":["../node_modules/lodash-es/isUndefined.js","../node_modules/lodash-es/_freeGlobal.js","../node_modules/lodash-es/_root.js","../node_modules/lodash-es/_Symbol.js","../node_modules/lodash-es/_getRawTag.js","../node_modules/lodash-es/_objectToString.js","../node_modules/lodash-es/_baseGetTag.js","../node_modules/lodash-es/isObject.js","../node_modules/lodash-es/isFunction.js","../node_modules/lodash-es/now.js","../node_modules/lodash-es/_trimmedEndIndex.js","../node_modules/lodash-es/_baseTrim.js","../node_modules/lodash-es/isObjectLike.js","../node_modules/lodash-es/isSymbol.js","../node_modules/lodash-es/toNumber.js","../node_modules/lodash-es/debounce.js","../node_modules/lodash-es/throttle.js","../src/constants.js","../src/globals.js","../src/lib/events.js","../src/lib/page-lifecycle.js","../node_modules/lodash-es/isArray.js","../node_modules/lodash-es/isString.js","../node_modules/lodash-es/_getPrototype.js","../node_modules/lodash-es/_overArg.js","../node_modules/lodash-es/isPlainObject.js","../node_modules/lodash-es/isFinite.js","../src/lib/utils.js","../src/lib/global-events.js","../node_modules/lodash-es/noop.js","../src/action.js","../node_modules/lodash-es/_baseClamp.js","../node_modules/lodash-es/_baseToString.js","../node_modules/lodash-es/_arrayMap.js","../node_modules/lodash-es/toFinite.js","../node_modules/lodash-es/toInteger.js","../node_modules/lodash-es/toString.js","../src/lib/cookies.js","../src/lib/form.js","../src/lib/script.js","../src/woopra.js","../node_modules/lodash-es/startsWith.js","../node_modules/lodash-es/endsWith.js","../src/tracker.js","../src/index.js"],"sourcesContent":["/**\n * Checks if `value` is `undefined`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n * @example\n *\n * _.isUndefined(void 0);\n * // => true\n *\n * _.isUndefined(null);\n * // => false\n */\nfunction isUndefined(value) {\n return value === undefined;\n}\n\nexport default isUndefined;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nexport default freeGlobal;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nexport default root;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nexport default Symbol;\n","import Symbol from './_Symbol.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nexport default getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nexport default objectToString;\n","import Symbol from './_Symbol.js';\nimport getRawTag from './_getRawTag.js';\nimport objectToString from './_objectToString.js';\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nexport default baseGetTag;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nexport default isObject;\n","import baseGetTag from './_baseGetTag.js';\nimport isObject from './isObject.js';\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nexport default isFunction;\n","import root from './_root.js';\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nexport default now;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\nexport default trimmedEndIndex;\n","import trimmedEndIndex from './_trimmedEndIndex.js';\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nexport default baseTrim;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nexport default isObjectLike;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nexport default isSymbol;\n","import baseTrim from './_baseTrim.js';\nimport isObject from './isObject.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nexport default toNumber;\n","import isObject from './isObject.js';\nimport now from './now.js';\nimport toNumber from './toNumber.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nexport default debounce;\n","import debounce from './debounce.js';\nimport isObject from './isObject.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\nfunction throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n}\n\nexport default throttle;\n","export const VERSION = 11;\nexport const REGION_EU = 'eu';\nexport const REGION_KR = 'kr';\nexport const REGION_US = 'us';\nexport const ENDPOINTS = {\n [REGION_EU]: 'www.woopra.com/track/',\n [REGION_KR]: 'kr.track.airis.appier.net/track/',\n [REGION_US]: 'us.track.airis.appier.net/track/'\n};\nexport const XDM_PARAM_NAME = '__woopraid';\nexport const CAMPAIGN_KEYS = [\n 'campaign',\n 'content',\n 'id',\n 'medium',\n 'source',\n 'term'\n];\nexport const SECOND_LEVEL_TLDS = [\n 'com.au',\n 'net.au',\n 'org.au',\n 'co.hu',\n 'com.ru',\n 'ac.za',\n 'net.za',\n 'com.za',\n 'co.za',\n 'co.uk',\n 'org.uk',\n 'me.uk',\n 'net.uk'\n];\nexport const RANDOM_STRING_CHARS =\n '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';\nexport const MIN_PING_INTERVAL = 6_000;\nexport const MAX_PING_INTERVAL = 60_000;\nexport const URL_ID_REGEX = new RegExp(XDM_PARAM_NAME + '=([^&#]+)');\n\nexport const LIFECYCLE_ACTION = 'action';\nexport const LIFECYCLE_PAGE = 'page';\n\nexport const SCROLL_DEPTH = 'scroll depth';\n\nexport const ACTION_PV = 'pv';\n\nexport const IDPTNC = 'idptnc';\n\nexport const TARGET_BLANK = '_blank';\n\nexport const DATA_TRACKED_ATTRIBUTE = 'data-tracked';\n\nexport const ACTION_PROPERTY_PREFIX = 'ce_';\nexport const VISIT_PROPERTY_PREFIX = 'cs_';\nexport const VISITOR_PROPERTY_PREFIX = 'cv_';\nexport const ORG_PROPERTY_PREFIX = 'co_';\n\nexport const ENDPOINT_TRACK = 'ce';\nexport const ENDPOINT_UPDATE = 'update';\nexport const ENDPOINT_IDENTIFY = 'identify';\n\nexport const PAGE_LIFECYCLE_STATE_ACTIVE = 'active';\nexport const PAGE_LIFECYCLE_STATE_PASSIVE = 'passive';\nexport const PAGE_LIFECYCLE_STATE_HIDDEN = 'hidden';\nexport const PAGE_LIFECYCLE_STATE_FROZEN = 'frozen';\nexport const PAGE_LIFECYCLE_STATE_TERMINATED = 'terminated';\n\nexport const EVENT_BEFOREUNLOAD = 'beforeunload';\nexport const EVENT_BLUR = 'blur';\nexport const EVENT_CLICK = 'click';\nexport const EVENT_DOWNLOAD = 'download';\nexport const EVENT_FOCUS = 'focus';\nexport const EVENT_FREEZE = 'freeze';\nexport const EVENT_LINK_CLICK = 'link';\nexport const EVENT_MOUSEDOWN = 'mousedown';\nexport const EVENT_MOUSEMOVE = 'mousemove';\nexport const EVENT_OUTGOING = 'outgoing';\nexport const EVENT_PAGEHIDE = 'pagehide';\nexport const EVENT_PAGESHOW = 'pageshow';\nexport const EVENT_RESUME = 'resume';\nexport const EVENT_SCROLL = 'scroll';\nexport const EVENT_STATECHANGE = 'statechange';\nexport const EVENT_UNLOAD = 'unload';\nexport const EVENT_VISIBILITYCHANGE = 'visibilitychange';\n\nexport const KEY_APP = 'app';\nexport const KEY_APPIER_APP_ID = 'appier_app_id';\nexport const KEY_AUGMENT_ACTION = 'augment_action';\nexport const KEY_AUTO_DECORATE = 'auto_decorate';\nexport const KEY_BEACONS = 'beacons';\nexport const KEY_CAMPAIGN_ONCE = 'campaign_once';\nexport const KEY_CLICK_TRACKING_MATCHER_SELECTORS =\n 'click_tracking_matcher_selectors';\nexport const KEY_CLICK_PAUSE = 'click_pause';\nexport const KEY_CLICK_TRACKING = 'click_tracking';\nexport const KEY_CONTEXT = 'context';\nexport const KEY_COOKIE_DOMAIN = 'cookie_domain';\nexport const KEY_COOKIE_EXPIRE = 'cookie_expire';\nexport const KEY_COOKIE_NAME = 'cookie_name';\nexport const KEY_COOKIE_PATH = 'cookie_path';\nexport const KEY_COOKIE_SECURE = 'cookie_secure';\nexport const KEY_CROSS_DOMAIN = 'cross_domain';\nexport const KEY_DOMAIN = 'domain';\nexport const KEY_DOWNLOAD_EXTENSIONS = 'download_extensions';\nexport const KEY_DOWNLOAD_PAUSE = 'download_pause';\nexport const KEY_DOWNLOAD_TRACKING = 'download_tracking';\nexport const KEY_FORM_PAUSE = 'form_pause';\nexport const KEY_HIDE_CAMPAIGN = 'hide_campaign';\nexport const KEY_HIDE_XDM_DATA = 'hide_xdm_data';\nexport const KEY_IDLE_THRESHOLD = 'idle_threshold';\nexport const KEY_IDLE_TIMEOUT = 'idle_timeout';\nexport const KEY_IGNORE_QUERY_URL = 'ignore_query_url';\nexport const KEY_IP = 'ip';\nexport const KEY_MAP_QUERY_PARAMS = 'map_query_params';\nexport const KEY_OUTGOING_IGNORE_SUBDOMAIN = 'outgoing_ignore_subdomain';\nexport const KEY_OUTGOING_PAUSE = 'outgoing_pause';\nexport const KEY_OUTGOING_TRACKING = 'outgoing_tracking';\nexport const KEY_PERSONALIZATION = 'personalization';\nexport const KEY_PING = 'ping';\nexport const KEY_PING_INTERVAL = 'ping_interval';\nexport const KEY_PROTOCOL = 'protocol';\nexport const KEY_REGION = 'region';\nexport const KEY_SAVE_URL_HASH = 'save_url_hash';\nexport const KEY_THIRD_PARTY = 'third_party';\nexport const KEY_USE_COOKIES = 'use_cookies';\n\nexport const META_CANCELLED = 'cancelled';\nexport const META_DIRTY = 'dirty';\nexport const META_DURATION = 'duration';\nexport const META_EXPIRED = 'expired';\nexport const META_LEAVE = 'leave';\nexport const META_RETRACK = 'retrack';\nexport const META_SENT = 'sent';\nexport const META_TIMESTAMP = 'timestamp';\n\nexport const ACTION_PROPERTY_ALIASES = [\n [IDPTNC, IDPTNC],\n ['$duration', 'duration'],\n ['$domain', KEY_DOMAIN],\n ['$app', KEY_APP],\n ['$timestamp', 'timestamp'],\n ['$action', 'event'],\n [KEY_APPIER_APP_ID, KEY_APPIER_APP_ID]\n];\n\nexport const DEFAULT_DOWNLOAD_EXTENSIONS = [\n 'avi',\n 'css',\n 'dmg',\n 'doc',\n 'eps',\n 'exe',\n 'js',\n 'm4v',\n 'mov',\n 'mp3',\n 'mp4',\n 'msi',\n 'pdf',\n 'ppt',\n 'rar',\n 'svg',\n 'txt',\n 'vsd',\n 'vxd',\n 'wma',\n 'wmv',\n 'xls',\n 'xlsx',\n 'zip'\n];\n\nexport const ELEMENT_MATCHER_LINK = ['a'];\n\nexport const ELEMENT_MATCHER_CLICK = [\n 'a',\n 'button',\n 'input[type=button]',\n 'input[type=submit]',\n '[role=button]'\n];\n","import {\n KEY_AUTO_DECORATE,\n KEY_DOWNLOAD_TRACKING,\n KEY_OUTGOING_IGNORE_SUBDOMAIN,\n KEY_OUTGOING_TRACKING\n} from './constants';\n\nexport default {\n [KEY_AUTO_DECORATE]: undefined,\n [KEY_DOWNLOAD_TRACKING]: false,\n [KEY_OUTGOING_IGNORE_SUBDOMAIN]: true,\n [KEY_OUTGOING_TRACKING]: false\n};\n","const handlers = {};\n\nexport function removeHandler(id, instance) {\n handlers[id][instance] = null;\n}\n\nexport function addEventListener(element, type, callback) {\n if (element?.addEventListener) {\n element.addEventListener(type, callback);\n }\n}\n\nexport function on(parent, event, callback) {\n const id = parent.instanceName;\n\n if (!handlers[event]) {\n handlers[event] = {};\n }\n handlers[event][id] = parent;\n\n if (parent.__l) {\n if (!parent.__l[event]) {\n parent.__l[event] = [];\n }\n parent.__l[event].push(callback);\n }\n}\n\nexport function fire(event) {\n let handler;\n const _event = handlers[event];\n let _l;\n\n if (_event) {\n for (let id in _event) {\n if (_event.hasOwnProperty(id)) {\n handler = _event[id];\n _l = handler && handler.__l;\n if (_l && _l[event]) {\n for (let i = 0; i < _l[event].length; i++) {\n _l[event][i].apply(this, Array.prototype.slice.call(arguments, 1));\n }\n }\n }\n }\n }\n}\n","/*\n Copyright 2018 Google Inc. All Rights Reserved.\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n http://www.apache.org/licenses/LICENSE-2.0\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n Modifications Copyright (c) 2022 Woopra, Inc.\n*/\n\n/**\n * Original source: https://github.com/GoogleChromeLabs/page-lifecycle\n * MODIFICATIONS:\n * - inline imports\n * - always use shims\n * - use constants in place of string literals\n */\n\nimport {\n EVENT_BEFOREUNLOAD,\n EVENT_BLUR,\n EVENT_FOCUS,\n EVENT_FREEZE,\n EVENT_PAGEHIDE,\n EVENT_PAGESHOW,\n EVENT_RESUME,\n EVENT_UNLOAD,\n EVENT_VISIBILITYCHANGE,\n PAGE_LIFECYCLE_STATE_ACTIVE,\n PAGE_LIFECYCLE_STATE_FROZEN,\n PAGE_LIFECYCLE_STATE_HIDDEN,\n PAGE_LIFECYCLE_STATE_PASSIVE,\n PAGE_LIFECYCLE_STATE_TERMINATED\n} from '../constants';\n\nclass EventTargetShim {\n /**\n * Creates the event registry.\n */\n constructor() {\n this._registry = {};\n }\n\n /**\n * @param {string} type\n * @param {EventListener|function(!Event):(boolean|undefined)} listener\n * @param {(boolean|!AddEventListenerOptions)=} opts\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-eventtarget-addeventlistener\n */\n addEventListener(type, listener, opts = false) {\n this._getRegistry(type).push(listener);\n }\n\n /**\n * @param {string} type\n * @param {EventListener|function(!Event):(boolean|undefined)} listener\n * @param {(boolean|!EventListenerOptions)=} opts\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-eventtarget-removeeventlistener\n */\n removeEventListener(type, listener, opts = false) {\n const typeRegistry = this._getRegistry(type);\n const handlerIndex = typeRegistry.indexOf(listener);\n if (handlerIndex > -1) {\n typeRegistry.splice(handlerIndex, 1);\n }\n }\n\n /**\n * @param {!Event|!EventShim} evt\n * @return {boolean}\n * @see https://dom.spec.whatwg.org/#dom-eventtarget-dispatchevent\n */\n dispatchEvent(evt) {\n // Set the target then freeze the event object to prevent modification.\n evt.target = this;\n Object.freeze(evt);\n\n this._getRegistry(evt.type).forEach((listener) => listener(evt));\n return true;\n }\n\n /**\n * Returns an array of handlers associated with the passed event type.\n * If no handlers have been registered, an empty array is returned.\n * @private\n * @param {string} type The event type.\n * @return {!Array} An array of handler functions.\n */\n _getRegistry(type) {\n return (this._registry[type] = this._registry[type] || []);\n }\n}\n\nclass StateChangeEvent {\n constructor(type, initDict) {\n this.type = type;\n this.newState = initDict.newState;\n this.oldState = initDict.oldState;\n this.originalEvent = initDict.originalEvent;\n }\n}\n\n// Detect Safari to work around Safari-specific bugs.\nconst IS_SAFARI = typeof safari === 'object' && safari.pushNotification;\n\nconst SUPPORTS_PAGE_TRANSITION_EVENTS = 'onpageshow' in self;\n\nconst EVENTS = [\n EVENT_FOCUS,\n EVENT_BLUR,\n EVENT_VISIBILITYCHANGE,\n EVENT_FREEZE,\n EVENT_RESUME,\n EVENT_PAGESHOW,\n // IE9-10 do not support the pagehide event, so we fall back to unload\n // Note: unload *MUST ONLY* be added conditionally, otherwise it will\n // prevent page navigation caching (a.k.a bfcache).\n SUPPORTS_PAGE_TRANSITION_EVENTS ? EVENT_PAGEHIDE : EVENT_UNLOAD\n];\n\n/**\n * @param {!Event} evt\n * @return {string}\n */\nconst onbeforeunload = (evt) => {\n evt.preventDefault();\n return (evt.returnValue = 'Are you sure?');\n};\n\n/**\n * Converts an array of states into an object where the state is the key\n * and the value is the index.\n * @param {!Array} arr\n * @return {!Object}\n */\nconst toIndexedObject = (arr) =>\n arr.reduce((acc, val, idx) => {\n acc[val] = idx;\n return acc;\n }, {});\n\n/**\n * @type {!Array}\n */\nconst LEGAL_STATE_TRANSITIONS = [\n // The normal unload process (bfcache process is addressed above).\n [\n PAGE_LIFECYCLE_STATE_ACTIVE,\n PAGE_LIFECYCLE_STATE_PASSIVE,\n PAGE_LIFECYCLE_STATE_HIDDEN,\n PAGE_LIFECYCLE_STATE_TERMINATED\n ],\n\n // An active page transitioning to frozen,\n // or an unloading page going into the bfcache.\n [\n PAGE_LIFECYCLE_STATE_ACTIVE,\n PAGE_LIFECYCLE_STATE_PASSIVE,\n PAGE_LIFECYCLE_STATE_HIDDEN,\n PAGE_LIFECYCLE_STATE_FROZEN\n ],\n\n // A hidden page transitioning back to active.\n [\n PAGE_LIFECYCLE_STATE_HIDDEN,\n PAGE_LIFECYCLE_STATE_PASSIVE,\n PAGE_LIFECYCLE_STATE_ACTIVE\n ],\n\n // A frozen page being resumed\n [PAGE_LIFECYCLE_STATE_FROZEN, PAGE_LIFECYCLE_STATE_HIDDEN],\n\n // A frozen (bfcached) page navigated back to\n // Note: [FROZEN, HIDDEN] can happen here, but it's already covered above.\n [PAGE_LIFECYCLE_STATE_FROZEN, PAGE_LIFECYCLE_STATE_ACTIVE],\n [PAGE_LIFECYCLE_STATE_FROZEN, PAGE_LIFECYCLE_STATE_PASSIVE]\n].map(toIndexedObject);\n\n/**\n * Accepts a current state and a future state and returns an array of legal\n * state transition paths. This is needed to normalize behavior across browsers\n * since some browsers do not fire events in certain cases and thus skip\n * states.\n * @param {string} oldState\n * @param {string} newState\n * @return {!Array}\n */\nconst getLegalStateTransitionPath = (oldState, newState) => {\n // We're intentionally not using for...of here so when we transpile to ES5\n // we don't need to include the Symbol polyfills.\n for (let order, i = 0; (order = LEGAL_STATE_TRANSITIONS[i]); ++i) {\n const oldIndex = order[oldState];\n const newIndex = order[newState];\n\n if (oldIndex >= 0 && newIndex >= 0 && newIndex > oldIndex) {\n // Differences greater than one should be reported\n // because it means a state was skipped.\n return Object.keys(order).slice(oldIndex, newIndex + 1);\n }\n }\n return [];\n // TODO(philipwalton): it shouldn't be possible to get here, but\n // consider some kind of warning or call to action if it happens.\n // console.warn(`Invalid state change detected: ${oldState} > ${newState}`);\n};\n\n/**\n * Returns the current state based on the document's visibility and\n * in input focus states. Note this method is only used to determine\n * active vs passive vs hidden states, as other states require listening\n * for events.\n * @return {string}\n */\nconst getCurrentState = () => {\n if (document.visibilityState === PAGE_LIFECYCLE_STATE_HIDDEN) {\n return PAGE_LIFECYCLE_STATE_HIDDEN;\n }\n if (document.hasFocus()) {\n return PAGE_LIFECYCLE_STATE_ACTIVE;\n }\n return PAGE_LIFECYCLE_STATE_PASSIVE;\n};\n\n/**\n * Class definition for the exported, singleton lifecycle instance.\n */\nclass PageLifecycle extends EventTargetShim {\n /**\n * Initializes state, state history, and adds event listeners to monitor\n * state changes.\n */\n constructor() {\n super();\n\n const state = getCurrentState();\n\n this._state = state;\n this._unsavedChanges = [];\n\n // Bind the callback and add event listeners.\n this._handleEvents = this._handleEvents.bind(this);\n\n // Add capturing events on window so they run immediately.\n EVENTS.forEach((evt) => addEventListener(evt, this._handleEvents, true));\n\n // Safari does not reliably fire the `pagehide` or `visibilitychange`\n // events when closing a tab, so we have to use `beforeunload` with a\n // timeout to check whether the default action was prevented.\n // - https://bugs.webkit.org/show_bug.cgi?id=151610\n // - https://bugs.webkit.org/show_bug.cgi?id=151234\n // NOTE: we only add this to Safari because adding it to Firefox would\n // prevent the page from being eligible for bfcache.\n if (IS_SAFARI) {\n addEventListener(EVENT_BEFOREUNLOAD, (evt) => {\n this._safariBeforeUnloadTimeout = setTimeout(() => {\n if (!(evt.defaultPrevented || evt.returnValue.length > 0)) {\n this._dispatchChangesIfNeeded(evt, PAGE_LIFECYCLE_STATE_HIDDEN);\n }\n }, 0);\n });\n }\n }\n\n /**\n * @return {string}\n */\n get state() {\n return this._state;\n }\n\n /**\n * Returns the value of document.wasDiscarded. This is arguably unnecessary\n * but I think there's value in having the entire API in one place and\n * consistent across browsers.\n * @return {boolean}\n */\n get pageWasDiscarded() {\n return document.wasDiscarded || false;\n }\n\n /**\n * @param {Symbol|Object} id A unique symbol or object identifying the\n *. pending state. This ID is required when removing the state later.\n */\n addUnsavedChanges(id) {\n // Don't add duplicate state. Note: ideally this would be a set, but for\n // better browser compatibility we're using an array.\n if (!this._unsavedChanges.indexOf(id) > -1) {\n // If this is the first state being added,\n // also add a beforeunload listener.\n if (this._unsavedChanges.length === 0) {\n addEventListener(EVENT_BEFOREUNLOAD, onbeforeunload);\n }\n this._unsavedChanges.push(id);\n }\n }\n\n /**\n * @param {Symbol|Object} id A unique symbol or object identifying the\n *. pending state. This ID is required when removing the state later.\n */\n removeUnsavedChanges(id) {\n const idIndex = this._unsavedChanges.indexOf(id);\n\n if (idIndex > -1) {\n this._unsavedChanges.splice(idIndex, 1);\n\n // If there's no more pending state, remove the event listener.\n if (this._unsavedChanges.length === 0) {\n removeEventListener(EVENT_BEFOREUNLOAD, onbeforeunload);\n }\n }\n }\n\n /**\n * @private\n * @param {!Event} originalEvent\n * @param {string} newState\n */\n _dispatchChangesIfNeeded(originalEvent, newState) {\n if (newState !== this._state) {\n const oldState = this._state;\n const path = getLegalStateTransitionPath(oldState, newState);\n\n for (let i = 0; i < path.length - 1; ++i) {\n const oldState = path[i];\n const newState = path[i + 1];\n\n this._state = newState;\n this.dispatchEvent(\n new StateChangeEvent('statechange', {\n oldState,\n newState,\n originalEvent\n })\n );\n }\n }\n }\n\n /**\n * @private\n * @param {!Event} evt\n */\n _handleEvents(evt) {\n if (IS_SAFARI) {\n clearTimeout(this._safariBeforeUnloadTimeout);\n }\n\n switch (evt.type) {\n case EVENT_PAGESHOW:\n case EVENT_RESUME:\n this._dispatchChangesIfNeeded(evt, getCurrentState());\n break;\n case EVENT_FOCUS:\n this._dispatchChangesIfNeeded(evt, PAGE_LIFECYCLE_STATE_ACTIVE);\n break;\n case EVENT_BLUR:\n // The `blur` event can fire while the page is being unloaded, so we\n // only need to update the state if the current state is \"active\".\n if (this._state === PAGE_LIFECYCLE_STATE_ACTIVE) {\n this._dispatchChangesIfNeeded(evt, getCurrentState());\n }\n break;\n case EVENT_PAGEHIDE:\n case EVENT_UNLOAD:\n this._dispatchChangesIfNeeded(\n evt,\n evt.persisted\n ? PAGE_LIFECYCLE_STATE_FROZEN\n : PAGE_LIFECYCLE_STATE_TERMINATED\n );\n break;\n case EVENT_VISIBILITYCHANGE:\n // The document's `visibilityState` will change to hidden as the page\n // is being unloaded, but in such cases the lifecycle state shouldn't\n // change.\n if (\n this._state !== PAGE_LIFECYCLE_STATE_FROZEN &&\n this._state !== PAGE_LIFECYCLE_STATE_TERMINATED\n ) {\n this._dispatchChangesIfNeeded(evt, getCurrentState());\n }\n break;\n case EVENT_FREEZE:\n this._dispatchChangesIfNeeded(evt, PAGE_LIFECYCLE_STATE_FROZEN);\n break;\n }\n }\n}\n\nexport default new PageLifecycle();\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nexport default isArray;\n","import baseGetTag from './_baseGetTag.js';\nimport isArray from './isArray.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar stringTag = '[object String]';\n\n/**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\nfunction isString(value) {\n return typeof value == 'string' ||\n (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n}\n\nexport default isString;\n","import overArg from './_overArg.js';\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nexport default getPrototype;\n","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\nexport default overArg;\n","import baseGetTag from './_baseGetTag.js';\nimport getPrototype from './_getPrototype.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n}\n\nexport default isPlainObject;\n","import root from './_root.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsFinite = root.isFinite;\n\n/**\n * Checks if `value` is a finite primitive number.\n *\n * **Note:** This method is based on\n * [`Number.isFinite`](https://mdn.io/Number/isFinite).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.\n * @example\n *\n * _.isFinite(3);\n * // => true\n *\n * _.isFinite(Number.MIN_VALUE);\n * // => true\n *\n * _.isFinite(Infinity);\n * // => false\n *\n * _.isFinite('3');\n * // => false\n */\nfunction isFinite(value) {\n return typeof value == 'number' && nativeIsFinite(value);\n}\n\nexport default isFinite;\n","import {\n isArray,\n isFinite,\n isFunction,\n isPlainObject,\n isString,\n isUndefined\n} from 'lodash-es';\nimport { RANDOM_STRING_CHARS } from '../constants';\n\n/**\n * Generates a random 12 character string\n *\n * @return {String} Returns a random 12 character string\n */\nexport function randomString() {\n let s = '';\n\n for (let i = 0; i < 12; i++) {\n const rnum = Math.floor(Math.random() * RANDOM_STRING_CHARS.length);\n s += RANDOM_STRING_CHARS.substring(rnum, rnum + 1);\n }\n\n return s;\n}\n\nexport function isLeftClick(evt = window.event) {\n const button =\n (!isUndefined(evt.which) && evt.which === 1) ||\n (!isUndefined(evt.button) && evt.button === 0);\n return button && !evt.metaKey && !evt.altKey && !evt.ctrlKey && !evt.shiftKey;\n}\n\n/**\n * Helper to either query an element by id, or return element if passed\n * through options\n *\n * Supports searching by ids and classnames (or querySelector if browser supported)\n */\nexport function getElement(selector, options) {\n const _options = isString(selector) ? options || {} : selector || {};\n\n if (_options.el) {\n return _options.el;\n } else if (isString(selector)) {\n if (document.querySelectorAll) {\n return document.querySelectorAll(selector);\n } else if (selector[0] === '#') {\n return document.getElementById(selector.substr(1));\n } else if (selector[0] === '.') {\n return document.getElementsByClassName(selector.substr(1));\n }\n }\n}\n\nexport function prefixObjectKeys(object, prefix, blacklist) {\n const obj = {};\n\n if (isUndefined(object)) return obj;\n\n for (let key in object) {\n if (object.hasOwnProperty(key)) {\n const value = object[key];\n\n let isBlacklisted = false;\n\n for (let i = 0; i < blacklist.length; i++) {\n if (blacklist[i][0] === key) {\n isBlacklisted = true;\n break;\n }\n }\n\n if (\n !isBlacklisted &&\n value !== 'undefined' &&\n value !== 'null' &&\n !isUndefined(value)\n ) {\n obj[`${prefix}${key}`] = value;\n }\n }\n }\n\n return obj;\n}\n\nexport function jsonStringifyObjectValues(object) {\n const obj = {};\n\n if (isUndefined(object)) return obj;\n\n for (let key in object) {\n if (object.hasOwnProperty(key)) {\n if (isPlainObject(object[key]) || isArray(object[key])) {\n try {\n obj[key] = JSON.stringify(object[key]);\n } catch {\n obj[key] = object[key];\n }\n } else obj[key] = object[key];\n }\n }\n\n return obj;\n}\n\nexport function getScrollDepth() {\n const scrollHeight = document.body.scrollHeight;\n\n const scrollDepth =\n ((window.scrollY || 0) + window.innerHeight) / scrollHeight;\n\n return Math.max(0, Math.min(1, isFinite(scrollDepth) ? scrollDepth : 0));\n}\n\nexport function callCallback(callback, action) {\n try {\n callback();\n } catch (e) {\n console.error(`Error in Woopra ${action} callback`); // eslint-disable-line no-console\n console.error(e.stack); // eslint-disable-line no-console\n }\n}\n\nfunction matchesElement(element, matcher) {\n return matcher.some((sel) => element.matches(sel));\n}\n\nexport function findParentElement(element, matcher) {\n let elem = element;\n\n while (!isUndefined(elem) && elem !== null) {\n if (elem.tagName && matchesElement(elem, matcher)) break;\n\n elem = elem.parentNode;\n }\n\n return elem;\n}\n\nexport function hasBeaconSupport() {\n return isFunction(navigator.sendBeacon);\n}\n\nexport function getDOMPath(element) {\n const stack = [];\n\n let elem = element;\n\n while (elem.parentNode) {\n let count = 0;\n let index = 0;\n\n for (let i = 0; i < elem.parentNode.childNodes.length; i++) {\n const siblingElement = elem.parentNode.childNodes[i];\n\n if (siblingElement.nodeName === elem.nodeName) {\n if (siblingElement === elem) index = count;\n\n count++;\n }\n }\n\n const nodeName = elem.nodeName.toLowerCase();\n\n if (elem.hasAttribute('id') && elem.id) {\n stack.unshift(`${nodeName}#${elem.id}`);\n } else if (count > 1) {\n stack.unshift(`${nodeName}[${index}]`);\n } else {\n stack.unshift(nodeName);\n }\n\n elem = elem.parentNode;\n }\n\n return stack.slice(1).join(' > ');\n}\n","import { isUndefined, throttle } from 'lodash-es';\nimport {\n DATA_TRACKED_ATTRIBUTE,\n ELEMENT_MATCHER_LINK,\n EVENT_CLICK,\n EVENT_LINK_CLICK,\n EVENT_MOUSEDOWN,\n EVENT_MOUSEMOVE,\n EVENT_SCROLL,\n EVENT_STATECHANGE,\n KEY_AUTO_DECORATE,\n KEY_DOWNLOAD_TRACKING,\n KEY_OUTGOING_TRACKING\n} from '../constants';\nimport globals from '../globals';\nimport { addEventListener, fire } from './events';\nimport PageLifecycle from './page-lifecycle';\nimport { findParentElement, isLeftClick } from './utils';\n\nfunction onClick(e) {\n let elem = e.srcElement || e.target;\n\n if (isLeftClick(e)) {\n fire(EVENT_CLICK, e, elem);\n }\n\n if (globals[KEY_DOWNLOAD_TRACKING] || globals[KEY_OUTGOING_TRACKING]) {\n elem = findParentElement(e.srcElement || e.target, ELEMENT_MATCHER_LINK);\n\n if (\n !isUndefined(elem) &&\n elem !== null &&\n !elem.getAttribute(DATA_TRACKED_ATTRIBUTE)\n ) {\n fire(EVENT_LINK_CLICK, e, elem);\n }\n }\n}\n\nfunction onMouseDown(e) {\n let elem;\n\n fire(EVENT_MOUSEMOVE, e, Date.now());\n\n if (globals[KEY_AUTO_DECORATE]) {\n elem = findParentElement(e.srcElement || e.target, ELEMENT_MATCHER_LINK);\n\n if (!isUndefined(elem) && elem !== null) {\n fire(KEY_AUTO_DECORATE, elem);\n }\n }\n}\n\nfunction onMouseMove(e) {\n fire(EVENT_MOUSEMOVE, e, Date.now());\n}\n\nconst onScroll = throttle(function onScroll(e) {\n fire(EVENT_SCROLL, e);\n}, 500);\n\nfunction onPageStateChange(e) {\n fire(EVENT_STATECHANGE, e);\n}\n\nconst CAPTURE = { capture: true };\nconst CAPTURE_PASSIVE = { capture: true, passive: true };\n\n// attaches events\n// needs to be handled here, instead of in a tracking instance because\n// these events should only be fired once on a page\nexport default function attachGlobalEvents() {\n addEventListener(document, EVENT_CLICK, onClick, CAPTURE);\n addEventListener(document, EVENT_MOUSEDOWN, onMouseDown, CAPTURE);\n addEventListener(document, EVENT_MOUSEMOVE, onMouseMove, CAPTURE_PASSIVE);\n addEventListener(window, EVENT_SCROLL, onScroll, CAPTURE_PASSIVE);\n\n PageLifecycle.addEventListener(EVENT_STATECHANGE, onPageStateChange);\n}\n","/**\n * This method returns `undefined`.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Util\n * @example\n *\n * _.times(2, _.noop);\n * // => [undefined, undefined]\n */\nfunction noop() {\n // No operation performed.\n}\n\nexport default noop;\n","export default class WoopraAction {\n constructor(woopra, id, params, meta) {\n this.woopra = woopra;\n this.id = id;\n this.params = params;\n this.meta = meta;\n }\n\n update(options = {}, lastArg) {\n if (options.event && options.event !== this.params.event) {\n this.params.event = options.event;\n }\n\n this.woopra.update(\n this.id,\n { ...options, $action: this.params.event },\n lastArg\n );\n }\n\n cancel() {\n this.woopra.cancelAction(this.id);\n }\n}\n","/**\n * The base implementation of `_.clamp` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n */\nfunction baseClamp(number, lower, upper) {\n if (number === number) {\n if (upper !== undefined) {\n number = number <= upper ? number : upper;\n }\n if (lower !== undefined) {\n number = number >= lower ? number : lower;\n }\n }\n return number;\n}\n\nexport default baseClamp;\n","import Symbol from './_Symbol.js';\nimport arrayMap from './_arrayMap.js';\nimport isArray from './isArray.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nexport default baseToString;\n","/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\n\nexport default arrayMap;\n","import toNumber from './toNumber.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0,\n MAX_INTEGER = 1.7976931348623157e+308;\n\n/**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\nfunction toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === INFINITY || value === -INFINITY) {\n var sign = (value < 0 ? -1 : 1);\n return sign * MAX_INTEGER;\n }\n return value === value ? value : 0;\n}\n\nexport default toFinite;\n","import toFinite from './toFinite.js';\n\n/**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\nfunction toInteger(value) {\n var result = toFinite(value),\n remainder = result % 1;\n\n return result === result ? (remainder ? result - remainder : result) : 0;\n}\n\nexport default toInteger;\n","import baseToString from './_baseToString.js';\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\nexport default toString;\n","/*\\\n|*|\n|*| :: cookies.js ::\n|*|\n|*| A complete cookies reader/writer framework with full unicode support.\n|*|\n|*| Revision #1 - September 4, 2014\n|*|\n|*| https://developer.mozilla.org/en-US/docs/Web/API/document.cookie\n|*| https://developer.mozilla.org/User:fusionchess\n|*|\n|*| This framework is released under the GNU Public License, version 3 or later.\n|*| http://www.gnu.org/licenses/gpl-3.0-standalone.html\n|*|\n|*| Syntaxes:\n|*|\n|*| * docCookies.setItem(name, value[, end[, path[, domain[, secure]]]])\n|*| * docCookies.getItem(name)\n|*| * docCookies.removeItem(name[, path[, domain]])\n|*| * docCookies.hasItem(name)\n|*| * docCookies.keys()\n|*|\n\\*/\n\nexport function getItem(sKey) {\n if (!sKey) {\n return null;\n }\n return (\n decodeURIComponent(\n document.cookie.replace(\n new RegExp(\n '(?:(?:^|.*;)\\\\s*' +\n encodeURIComponent(sKey).replace(/[\\-\\.\\+\\*]/g, '\\\\$&') +\n '\\\\s*\\\\=\\\\s*([^;]*).*$)|^.*$'\n ),\n '$1'\n )\n ) || null\n );\n}\n\nexport function setItem(sKey, sValue, vEnd, sPath, sDomain, bSecure) {\n if (!sKey || /^(?:expires|max\\-age|path|domain|secure)$/i.test(sKey)) {\n return false;\n }\n let sExpires = '';\n if (vEnd) {\n switch (vEnd.constructor) {\n case Number:\n sExpires =\n vEnd === Infinity\n ? '; expires=Fri, 31 Dec 9999 23:59:59 GMT'\n : '; max-age=' + vEnd;\n break;\n case String:\n sExpires = '; expires=' + vEnd;\n break;\n case Date:\n sExpires = '; expires=' + vEnd.toUTCString();\n break;\n }\n }\n document.cookie =\n encodeURIComponent(sKey) +\n '=' +\n encodeURIComponent(sValue) +\n sExpires +\n (sDomain ? '; domain=' + sDomain : '') +\n (sPath ? '; path=' + sPath : '') +\n (bSecure ? '; secure' : '');\n return true;\n}\n\nexport function removeItem(sKey, sPath, sDomain) {\n if (!hasItem(sKey)) {\n return false;\n }\n document.cookie =\n encodeURIComponent(sKey) +\n '=; expires=Thu, 01 Jan 1970 00:00:00 GMT' +\n (sDomain ? '; domain=' + sDomain : '') +\n (sPath ? '; path=' + sPath : '');\n return true;\n}\n\nexport function hasItem(sKey) {\n if (!sKey) {\n return false;\n }\n return new RegExp(\n '(?:^|;\\\\s*)' +\n encodeURIComponent(sKey).replace(/[\\-\\.\\+\\*]/g, '\\\\$&') +\n '\\\\s*\\\\='\n ).test(document.cookie);\n}\n\nexport function keys() {\n const aKeys = document.cookie\n .replace(/((?:^|\\s*;)[^\\=]+)(?=;|$)|^\\s*|\\s*(?:\\=[^;]*)?(?:\\1|$)/g, '')\n .split(/\\s*(?:\\=[^;]*)?;\\s*/);\n for (let nLen = aKeys.length, nIdx = 0; nIdx < nLen; nIdx++) {\n aKeys[nIdx] = decodeURIComponent(aKeys[nIdx]);\n }\n return aKeys;\n}\n","const TYPE_BUTTON = 'button';\nconst TYPE_SUBMIT = 'submit';\nconst TYPE_RESET = 'reset';\n\n// https://code.google.com/p/form-serialize/\n// modified to return an object\nexport function serializeForm(form, options = {}) {\n if (!form || form.nodeName !== 'FORM') {\n return;\n }\n\n const exclude = options.exclude || [];\n const data = {};\n\n for (let i = form.elements.length - 1; i >= 0; i = i - 1) {\n if (\n form.elements[i].name === '' ||\n exclude.indexOf(form.elements[i].name) > -1\n ) {\n continue;\n }\n switch (form.elements[i].nodeName) {\n case 'INPUT':\n switch (form.elements[i].type) {\n case 'text':\n case 'hidden':\n case TYPE_BUTTON:\n case TYPE_RESET:\n case TYPE_SUBMIT:\n data[form.elements[i].name] = form.elements[i].value;\n break;\n case 'checkbox':\n case 'radio':\n if (form.elements[i].checked) {\n data[form.elements[i].name] = form.elements[i].value;\n }\n break;\n case 'file':\n break;\n }\n break;\n case 'TEXTAREA':\n data[form.elements[i].name] = form.elements[i].value;\n break;\n case 'SELECT':\n switch (form.elements[i].type) {\n case 'select-one':\n data[form.elements[i].name] = form.elements[i].value;\n break;\n case 'select-multiple':\n for (\n let j = form.elements[i].options.length - 1;\n j >= 0;\n j = j - 1\n ) {\n if (form.elements[i].options[j].selected) {\n data[form.elements[i].name] = form.elements[i].options[j].value;\n }\n }\n break;\n }\n break;\n case 'BUTTON':\n switch (form.elements[i].type) {\n case TYPE_RESET:\n case TYPE_SUBMIT:\n case TYPE_BUTTON:\n data[form.elements[i].name] = form.elements[i].value;\n break;\n }\n break;\n }\n }\n return data;\n}\n","import { isUndefined, noop } from 'lodash-es';\n\nexport function removeScript(script) {\n if (script && script.parentNode) {\n script.parentNode.removeChild(script);\n }\n}\n\nconst statusIsSuccessful = (readyState) =>\n readyState === 4 || readyState === 'complete' || readyState === 'loaded';\n\nexport function loadScript(url, callback = noop, errorCallback = noop) {\n const script = document.createElement('script');\n\n script.type = 'text/javascript';\n script.async = true;\n\n if (!isUndefined(script.onreadystatechange)) {\n script.onreadystatechange = function onreadystatechange() {\n if (statusIsSuccessful(this.readyState)) {\n callback();\n removeScript(script);\n }\n };\n } else {\n script.onload = () => {\n callback();\n removeScript(script);\n };\n script.onerror = (e) => {\n errorCallback(e);\n removeScript(script);\n };\n }\n\n script.src = url;\n\n if (document.body) document.body.appendChild(script);\n else document.head.appendChild(script);\n}\n","import { endsWith, isUndefined, startsWith } from 'lodash-es';\nimport {\n CAMPAIGN_KEYS,\n KEY_OUTGOING_IGNORE_SUBDOMAIN,\n SECOND_LEVEL_TLDS,\n XDM_PARAM_NAME\n} from './constants';\nimport globals from './globals';\nimport * as docCookies from './lib/cookies';\nimport { addEventListener, fire, on } from './lib/events';\nimport { serializeForm } from './lib/form';\nimport { loadScript, removeScript } from './lib/script';\nimport { getElement, isLeftClick, randomString } from './lib/utils';\n\nconst Woopra = {};\n\nWoopra.docCookies = docCookies;\n\n/**\n * Wrapper for window.location to allow stubs in testing\n */\nWoopra.location = function location(property, value) {\n // make sure property is valid\n if (!isUndefined(window.location[property])) {\n if (!isUndefined(value)) {\n window.location[property] = value;\n } else {\n return window.location[property];\n }\n }\n};\n\nfunction getHostname() {\n return Woopra.location('hostname');\n}\n\n/**\n * This exists to please the Safari gods. Sinon can't stub window in Safari.\n */\nWoopra.historyReplaceState =\n window.history && window.history.replaceState\n ? function historyReplaceState(data, title, url) {\n return window.history.replaceState(data, title, url);\n }\n : function () {};\n\n/**\n * Hides any URL parameters by calling window.history.replaceState\n *\n * @param {Array} params A list of parameter prefixes that will be hidden\n * @return {String} Returns the new URL that will be used\n */\nWoopra.hideUrlParams = function hideUrlParams(params) {\n const regex = new RegExp(\n `[?&]+((?:${params.join('|')})[^=&]*)=([^&#]*)`,\n 'gi'\n );\n const href = Woopra.location('href').replace(regex, '');\n\n Woopra.historyReplaceState(null, null, href);\n\n return href;\n};\n\n/**\n * Retrieves the current URL parameters as an object\n *\n * @return {Object} An object for all of the URL parameters\n */\nWoopra.getUrlParams = function getUrlParams() {\n const vars = {};\n const href = Woopra.location('href');\n\n if (href) {\n href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function (m, key, value) {\n vars[key] = decodeURIComponent(value.split('+').join(' '));\n });\n }\n\n return vars;\n};\n\nWoopra.buildUrlParams = function buildUrlParams(params, prefix = '') {\n const p = [];\n\n if (isUndefined(params)) {\n return params;\n }\n\n for (let key in params) {\n if (params.hasOwnProperty(key)) {\n if (\n params[key] !== 'undefined' &&\n params[key] !== 'null' &&\n !isUndefined(params[key])\n ) {\n p.push(\n `${prefix}${encodeURIComponent(key)}=${encodeURIComponent(\n params[key]\n )}`\n );\n }\n }\n }\n return p.join('&');\n};\n\n/**\n * Parses the URL parameters for data beginning with a certain prefix\n *\n * @param {Function} method The callback method for each key found matching `prefix`\n * @param {string} prefix The prefix that the parameter should start with\n */\nWoopra.getCustomData = function getCustomData(method, prefix = 'wv_') {\n const vars = Woopra.getUrlParams();\n\n for (let i in vars) {\n if (vars.hasOwnProperty(i)) {\n const value = vars[i];\n\n if (i.substring(0, prefix.length) === prefix) {\n const key = i.substring(prefix.length);\n method.call(this, key, value);\n }\n }\n }\n};\n\n/**\n * Retrieves the current client domain name using the hostname\n * and returning the last two tokens with a `.` separator (domain + tld).\n *\n * This can be an issue if there is a second level domain\n */\nWoopra.getDomain = function getDomain(hostname = getHostname()) {\n const domain = hostname.substring(\n hostname.lastIndexOf('.', hostname.lastIndexOf('.') - 1) + 1\n );\n\n // check if domain is in list of second level domains, ignore if so\n if (SECOND_LEVEL_TLDS.indexOf(domain) !== -1) {\n return hostname.substring(\n hostname.lastIndexOf('.', hostname.indexOf(domain) - 2) + 1\n );\n }\n\n return domain;\n};\n\n/**\n * Returns the current hostname with 'www' stripped out\n */\nWoopra.getHostnameNoWww = function getHostnameNoWww() {\n const hostname = getHostname();\n\n if (hostname.indexOf('www.') === 0) {\n return hostname.replace('www.', '');\n }\n\n return hostname;\n};\n\n/**\n * Determines if the current URL should be considered an outgoing URL\n */\nWoopra.isOutgoingLink = function isOutgoingLink(targetHostname) {\n const currentHostname = getHostname();\n const currentDomain = Woopra.getDomain(currentHostname);\n\n return (\n targetHostname !== currentHostname &&\n targetHostname.replace(/^www\\./, '') !==\n currentHostname.replace(/^www\\./, '') &&\n (!globals[KEY_OUTGOING_IGNORE_SUBDOMAIN] ||\n currentDomain !== Woopra.getDomain(targetHostname)) &&\n !Woopra.startsWith(targetHostname, 'javascript') &&\n targetHostname !== '' &&\n targetHostname !== '#'\n );\n};\n\nWoopra.hideCrossDomainId = function hideCrossDomainId() {\n return Woopra.hideUrlParams([XDM_PARAM_NAME]);\n};\n\nWoopra.mapQueryParams = function mapQueryParams(mapping) {\n const vars = Woopra.getUrlParams();\n const params = {};\n\n for (let key in mapping) {\n const value = vars[key];\n if (!isUndefined(value)) {\n params[mapping[key]] = value;\n }\n }\n\n return params;\n};\n\nWoopra.redirect = function redirect(link) {\n Woopra.location('href', link);\n};\n\n/**\n * Parses current URL for parameters that start with either `utm_` or `woo_`\n * and have the keys `source`, `medium`, `content`, `campaign`, `term`\n *\n * @return {Object} Returns an object with campaign keys as keys\n */\nWoopra.getCampaignData = function getCampaignData() {\n const vars = Woopra.getUrlParams();\n const campaign = {};\n\n for (let i = 0; i < CAMPAIGN_KEYS.length; i++) {\n const key = CAMPAIGN_KEYS[i];\n const value = vars[`utm_${key}`] || vars[`woo_${key}`];\n\n if (!isUndefined(value)) {\n campaign[`campaign_${key === 'campaign' ? 'name' : key}`] = value;\n }\n }\n\n return campaign;\n};\n\n/**\n * Hides any campaign data (query params: wv_, woo_, utm_) from the URL\n * by using replaceState (if available)\n */\nWoopra.hideCampaignData = function hideCampaignData() {\n return Woopra.hideUrlParams(['wv_', 'woo_', 'utm_']);\n};\n\nWoopra.leftClick = isLeftClick;\nWoopra.randomString = randomString;\nWoopra.getElement = getElement;\nWoopra.loadScript = loadScript;\nWoopra.removeScript = removeScript;\nWoopra.serializeForm = serializeForm;\nWoopra._on = on;\nWoopra._fire = fire;\nWoopra.attachEvent = addEventListener;\nWoopra.startsWith = startsWith;\nWoopra.endsWith = endsWith;\n\nexport default Woopra;\n","import baseClamp from './_baseClamp.js';\nimport baseToString from './_baseToString.js';\nimport toInteger from './toInteger.js';\nimport toString from './toString.js';\n\n/**\n * Checks if `string` starts with the given target string.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {string} [target] The string to search for.\n * @param {number} [position=0] The position to search from.\n * @returns {boolean} Returns `true` if `string` starts with `target`,\n * else `false`.\n * @example\n *\n * _.startsWith('abc', 'a');\n * // => true\n *\n * _.startsWith('abc', 'b');\n * // => false\n *\n * _.startsWith('abc', 'b', 1);\n * // => true\n */\nfunction startsWith(string, target, position) {\n string = toString(string);\n position = position == null\n ? 0\n : baseClamp(toInteger(position), 0, string.length);\n\n target = baseToString(target);\n return string.slice(position, position + target.length) == target;\n}\n\nexport default startsWith;\n","import baseClamp from './_baseClamp.js';\nimport baseToString from './_baseToString.js';\nimport toInteger from './toInteger.js';\nimport toString from './toString.js';\n\n/**\n * Checks if `string` ends with the given target string.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {string} [target] The string to search for.\n * @param {number} [position=string.length] The position to search up to.\n * @returns {boolean} Returns `true` if `string` ends with `target`,\n * else `false`.\n * @example\n *\n * _.endsWith('abc', 'c');\n * // => true\n *\n * _.endsWith('abc', 'b');\n * // => false\n *\n * _.endsWith('abc', 'b', 2);\n * // => true\n */\nfunction endsWith(string, target, position) {\n string = toString(string);\n target = baseToString(target);\n\n var length = string.length;\n position = position === undefined\n ? length\n : baseClamp(toInteger(position), 0, length);\n\n var end = position;\n position -= target.length;\n return position >= 0 && string.slice(position, end) == target;\n}\n\nexport default endsWith;\n","import {\n isArray,\n isFunction,\n isObject,\n isString,\n isUndefined,\n noop\n} from 'lodash-es';\nimport WoopraAction from './action';\nimport {\n ACTION_PROPERTY_ALIASES,\n ACTION_PROPERTY_PREFIX,\n ACTION_PV,\n DATA_TRACKED_ATTRIBUTE,\n DEFAULT_DOWNLOAD_EXTENSIONS,\n ELEMENT_MATCHER_CLICK,\n ENDPOINTS,\n ENDPOINT_IDENTIFY,\n ENDPOINT_TRACK,\n ENDPOINT_UPDATE,\n EVENT_CLICK,\n EVENT_DOWNLOAD,\n EVENT_LINK_CLICK,\n EVENT_MOUSEMOVE,\n EVENT_OUTGOING,\n EVENT_SCROLL,\n EVENT_STATECHANGE,\n IDPTNC,\n KEY_APP,\n KEY_AUGMENT_ACTION,\n KEY_AUTO_DECORATE,\n KEY_BEACONS,\n KEY_CAMPAIGN_ONCE,\n KEY_CLICK_PAUSE,\n KEY_CLICK_TRACKING,\n KEY_CLICK_TRACKING_MATCHER_SELECTORS,\n KEY_CONTEXT,\n KEY_COOKIE_DOMAIN,\n KEY_COOKIE_EXPIRE,\n KEY_COOKIE_NAME,\n KEY_COOKIE_PATH,\n KEY_COOKIE_SECURE,\n KEY_CROSS_DOMAIN,\n KEY_DOMAIN,\n KEY_DOWNLOAD_EXTENSIONS,\n KEY_DOWNLOAD_PAUSE,\n KEY_DOWNLOAD_TRACKING,\n KEY_FORM_PAUSE,\n KEY_HIDE_CAMPAIGN,\n KEY_HIDE_XDM_DATA,\n KEY_IDLE_THRESHOLD,\n KEY_IDLE_TIMEOUT,\n KEY_IGNORE_QUERY_URL,\n KEY_IP,\n KEY_MAP_QUERY_PARAMS,\n KEY_OUTGOING_IGNORE_SUBDOMAIN,\n KEY_OUTGOING_PAUSE,\n KEY_OUTGOING_TRACKING,\n KEY_PERSONALIZATION,\n KEY_PING,\n KEY_PING_INTERVAL,\n KEY_PROTOCOL,\n KEY_REGION,\n KEY_SAVE_URL_HASH,\n KEY_THIRD_PARTY,\n KEY_USE_COOKIES,\n LIFECYCLE_ACTION,\n LIFECYCLE_PAGE,\n MAX_PING_INTERVAL,\n META_CANCELLED,\n META_DIRTY,\n META_DURATION,\n META_EXPIRED,\n META_LEAVE,\n META_RETRACK,\n META_SENT,\n META_TIMESTAMP,\n MIN_PING_INTERVAL,\n ORG_PROPERTY_PREFIX,\n PAGE_LIFECYCLE_STATE_ACTIVE,\n PAGE_LIFECYCLE_STATE_HIDDEN,\n PAGE_LIFECYCLE_STATE_PASSIVE,\n PAGE_LIFECYCLE_STATE_TERMINATED,\n REGION_EU,\n SCROLL_DEPTH,\n TARGET_BLANK,\n URL_ID_REGEX,\n VERSION,\n VISITOR_PROPERTY_PREFIX,\n VISIT_PROPERTY_PREFIX,\n XDM_PARAM_NAME\n} from './constants';\nimport globals from './globals';\nimport { addEventListener, on, removeHandler } from './lib/events';\nimport {\n callCallback,\n findParentElement,\n getDOMPath,\n getElement,\n getScrollDepth,\n hasBeaconSupport,\n jsonStringifyObjectValues,\n prefixObjectKeys,\n randomString\n} from './lib/utils';\nimport Woopra from './woopra';\n\nconst fire = Woopra._fire;\n\nexport default class Tracker {\n constructor(instanceName) {\n this.visitorData = {};\n this.sessionData = {};\n this.orgData = {};\n\n this.options = {\n [KEY_APP]: 'js-client',\n [KEY_BEACONS]: hasBeaconSupport(),\n [KEY_CAMPAIGN_ONCE]: false,\n [KEY_CLICK_TRACKING_MATCHER_SELECTORS]: ELEMENT_MATCHER_CLICK,\n [KEY_COOKIE_DOMAIN]: `.${Woopra.getHostnameNoWww()}`,\n [KEY_COOKIE_EXPIRE]: new Date(\n new Date().setDate(new Date().getDate() + 730)\n ),\n [KEY_COOKIE_NAME]: 'wooTracker',\n [KEY_COOKIE_PATH]: '/',\n [KEY_COOKIE_SECURE]: Woopra.location('protocol') === 'https:',\n [KEY_CROSS_DOMAIN]: false,\n [KEY_DOWNLOAD_EXTENSIONS]: DEFAULT_DOWNLOAD_EXTENSIONS,\n [KEY_DOWNLOAD_PAUSE]: 200,\n [KEY_DOWNLOAD_TRACKING]: false,\n [KEY_HIDE_CAMPAIGN]: false,\n [KEY_HIDE_XDM_DATA]: false,\n [KEY_IDLE_THRESHOLD]: 10 * 1_000,\n [KEY_IDLE_TIMEOUT]: 60 * 10 * 1_000,\n [KEY_IGNORE_QUERY_URL]: false,\n [KEY_MAP_QUERY_PARAMS]: {},\n [KEY_OUTGOING_IGNORE_SUBDOMAIN]: true,\n [KEY_OUTGOING_PAUSE]: 200,\n [KEY_OUTGOING_TRACKING]: false,\n [KEY_PERSONALIZATION]: true,\n [KEY_PING_INTERVAL]: 12 * 1_000,\n [KEY_PING]: false,\n [KEY_PROTOCOL]: 'https',\n [KEY_REGION]: REGION_EU,\n [KEY_SAVE_URL_HASH]: true,\n [KEY_THIRD_PARTY]: false,\n [KEY_CLICK_PAUSE]: 250,\n [KEY_FORM_PAUSE]: 250,\n [KEY_USE_COOKIES]: true\n };\n\n this.instanceName = instanceName || 'woopra';\n this.idle = 0;\n this.cookie = '';\n this.last_activity = Date.now();\n this.loaded = false;\n this.dirtyCookie = false;\n this.sentCampaign = false;\n this.version = VERSION;\n this.pending = [];\n this.beaconQueue = [];\n this.lastAction = null;\n\n if (instanceName && instanceName !== '') {\n window[instanceName] = this;\n }\n }\n\n init() {\n this.__l = {};\n this._processQueue('config');\n this._setupCookie();\n this._bindEvents();\n\n // Otherwise loading indicator gets stuck until the every response\n // in the queue has been received\n setTimeout(() => this._processQueue(), 1);\n\n this.loaded = true;\n\n const callback = this.config('initialized');\n\n if (isFunction(callback)) {\n callback(this.instanceName);\n }\n\n // Safe to remove cross domain url parameter after setupCookie is called\n // Should only need to be called once on load\n if (this.config(KEY_HIDE_XDM_DATA)) {\n Woopra.hideCrossDomainId();\n }\n }\n\n /**\n * Processes the tracker queue in case user tries to push events\n * before tracker is ready.\n */\n _processQueue(type) {\n var _wpt = window.__woo ? window.__woo[this.instanceName] : _wpt;\n _wpt = window._w ? window._w[this.instanceName] : _wpt;\n\n // if _wpt is undefined, means script was loaded asynchronously and\n // there is no queue\n\n if (_wpt && _wpt._e) {\n const events = _wpt._e;\n for (let i = 0; i < events.length; i++) {\n const action = events[i];\n if (\n !isUndefined(action) &&\n this[action[0]] &&\n (isUndefined(type) || type === action[0])\n ) {\n this[action[0]].apply(this, Array.prototype.slice.call(action, 1));\n }\n }\n }\n }\n\n /**\n * Sets up the tracking cookie\n */\n _setupCookie() {\n const url_id = this.getUrlId();\n\n this.cookie = this.getCookie();\n\n // overwrite saved cookie if id is in url\n if (url_id) {\n this.cookie = url_id;\n }\n\n // Setup cookie\n if (!this.cookie || this.cookie.length < 1) {\n this.cookie = randomString();\n }\n\n Woopra.docCookies.setItem(\n this.config(KEY_COOKIE_NAME),\n this.cookie,\n this.config(KEY_COOKIE_EXPIRE),\n this.config(KEY_COOKIE_PATH),\n this.config(KEY_COOKIE_DOMAIN),\n this.config(KEY_COOKIE_SECURE)\n );\n\n this.dirtyCookie = true;\n }\n\n /**\n * Binds some events to measure mouse and keyboard events\n */\n _bindEvents() {\n on(this, EVENT_CLICK, (e) => this.onClick(e));\n on(this, EVENT_DOWNLOAD, (url) => this.downloaded(url));\n on(this, EVENT_LINK_CLICK, (e, link) => this.onLink(e, link));\n on(this, EVENT_MOUSEMOVE, (e, l) => this.moved(e, l));\n on(this, EVENT_OUTGOING, (url) => this.outgoing(url));\n on(this, EVENT_SCROLL, (elem) => this.onScroll(elem));\n on(this, EVENT_STATECHANGE, (e) => this.onPageStateChange(e));\n on(this, KEY_AUTO_DECORATE, (elem) => this.autoDecorate(elem));\n }\n\n /**\n * Sets/gets values from dataStore depending on arguments passed\n *\n * @param dataStore Object The tracker property to read/write\n * @param key String/Object Returns property object if key and value is undefined,\n * acts as a getter if only `key` is defined and a string, and\n * acts as a setter if `key` and `value` are defined OR if `key` is an object.\n */\n _dataSetter(dataStore, key, value) {\n if (isUndefined(key)) {\n return dataStore;\n }\n\n if (isUndefined(value)) {\n if (isString(key)) {\n return dataStore[key];\n }\n if (isObject(key)) {\n for (let i in key) {\n if (key.hasOwnProperty(i)) {\n if (Woopra.startsWith(i, 'cookie_')) {\n this.dirtyCookie = true;\n }\n dataStore[i] = key[i];\n }\n }\n }\n } else {\n if (Woopra.startsWith(key, 'cookie_')) {\n this.dirtyCookie = true;\n }\n dataStore[key] = value;\n }\n\n return this;\n }\n\n getVisitorUrlData() {\n Woopra.getCustomData.call(this, this.identify, 'wv_');\n }\n\n /*\n * Returns the Woopra cookie string\n */\n getCookie() {\n return Woopra.docCookies.getItem(this.config(KEY_COOKIE_NAME));\n }\n\n getProtocol() {\n const protocol = this.config(KEY_PROTOCOL);\n return protocol && protocol !== '' ? `${protocol}:` : '';\n }\n\n /**\n * Generates a destination endpoint string to use depending on different\n * configuration options\n */\n getEndpoint(path = '') {\n const protocol = this.getProtocol();\n\n if (this.config(KEY_THIRD_PARTY) && !this.config(KEY_DOMAIN)) {\n throw new Error('Error: `domain` is not set.');\n }\n\n let thirdPartyPath = this.config(KEY_THIRD_PARTY)\n ? `tp/${this.config(KEY_DOMAIN)}`\n : '';\n\n if (path && !Woopra.endsWith(path, '/')) {\n path += '/';\n }\n\n if (thirdPartyPath && !Woopra.startsWith(path, '/')) {\n thirdPartyPath += '/';\n }\n\n const region = this.config(KEY_REGION);\n const endpoint = ENDPOINTS[region];\n\n if (!endpoint) throw new Error(`Error: Invalid region: ${region}`);\n\n return `${protocol}//${endpoint}${thirdPartyPath}${path}`;\n }\n\n /**\n * Sets configuration options\n */\n config(key, value) {\n const data = this._dataSetter(this.options, key, value);\n\n // dataSetter returns `this` when it is used as a setter\n if (data === this) {\n // clamp ping interval\n this.options[KEY_PING_INTERVAL] = Math.max(\n MIN_PING_INTERVAL,\n Math.min(this.options[KEY_PING_INTERVAL], MAX_PING_INTERVAL)\n );\n\n // set script wide variables for events that are bound on script load\n // since we shouldn't bind per tracker instance\n globals[KEY_OUTGOING_TRACKING] = this.options[KEY_OUTGOING_TRACKING];\n globals[KEY_DOWNLOAD_TRACKING] = this.options[KEY_DOWNLOAD_TRACKING];\n globals[KEY_AUTO_DECORATE] =\n isUndefined(globals[KEY_AUTO_DECORATE]) &&\n this.options[KEY_CROSS_DOMAIN]\n ? this.options[KEY_CROSS_DOMAIN]\n : globals[KEY_AUTO_DECORATE];\n globals[KEY_OUTGOING_IGNORE_SUBDOMAIN] =\n this.options[KEY_OUTGOING_IGNORE_SUBDOMAIN];\n\n if (this.dirtyCookie && this.loaded) {\n this._setupCookie();\n }\n }\n\n return data;\n }\n\n /**\n * Use to attach custom visit data that doesn't stick to visitor\n * ** Not in use yet\n */\n visit(key, value) {\n return this._dataSetter(this.sessionData, key, value);\n }\n\n /**\n * Attach custom visitor data\n */\n identify(...args) {\n let key = undefined;\n let value = undefined;\n let orgKey = undefined;\n let orgValue = undefined;\n\n // identify(props, orgProps)\n if (isObject(args[0]) && isObject(args[1])) {\n key = args[0];\n orgKey = args[1];\n }\n // identify(props, orgKey, orgValue)\n else if (isObject(args[0]) && isString(args[1])) {\n key = args[0];\n orgKey = args[1];\n orgValue = args[2];\n }\n // identify(key, value, orgProps)\n else if (isString(args[0]) && isString(args[1]) && isObject(args[2])) {\n key = args[0];\n value = args[1];\n orgKey = args[2];\n }\n // identify(key, value, orgKey, orgValue)\n else {\n key = args[0];\n value = args[1];\n orgKey = args[2];\n orgValue = args[3];\n }\n\n const visitorProperties = this._dataSetter(this.visitorData, key, value);\n\n if (orgKey) this._dataSetter(this.orgData, orgKey, orgValue);\n\n return visitorProperties;\n }\n\n /**\n * Attach custom org data\n */\n identifyOrg(key, value) {\n return this._dataSetter(this.orgData, key, value);\n }\n\n /**\n * Generic method to call any tracker method\n */\n call(funcName) {\n if (isFunction(this[funcName])) {\n this[funcName].apply(this, Array.prototype.slice.call(arguments, 1));\n }\n }\n\n /**\n * Builds the correct tracking Url and performs an HTTP request\n */\n _push(options = {}) {\n const types = [\n ['visitorData', VISITOR_PROPERTY_PREFIX],\n ['eventData', ACTION_PROPERTY_PREFIX],\n ['sessionData', VISIT_PROPERTY_PREFIX],\n ['orgData', ORG_PROPERTY_PREFIX]\n ];\n\n let data = {};\n\n const endpoint = this.getEndpoint(options.endpoint);\n const lifecycle = options.lifecycle || LIFECYCLE_ACTION;\n\n // Load custom visitor params from url\n this.getVisitorUrlData();\n\n if (this.config(KEY_HIDE_CAMPAIGN)) {\n Woopra.hideCampaignData();\n }\n\n // push tracker config values\n this._dataSetter(data, this.getOptionParams());\n\n // push eventName if it exists\n if (options.eventName) {\n data.event = options.eventName;\n }\n\n // push close if no personalization\n if (!this.config(KEY_PERSONALIZATION)) {\n data.close = true;\n }\n\n data.timeout = isUndefined(options.timeout)\n ? this.config(KEY_IDLE_TIMEOUT)\n : options.timeout;\n\n const rawData = {};\n\n for (const [original, alias] of ACTION_PROPERTY_ALIASES) {\n if (options.eventData && options.eventData[original]) {\n rawData[alias] = options.eventData[original];\n }\n }\n\n this._dataSetter(data, rawData);\n\n for (let i = 0; i < types.length; i++) {\n const [key, prefix] = types[i];\n\n let newData = jsonStringifyObjectValues(\n prefixObjectKeys(\n options[key],\n prefix,\n prefix === ACTION_PROPERTY_PREFIX ? ACTION_PROPERTY_ALIASES : []\n )\n );\n\n if (\n prefix === ORG_PROPERTY_PREFIX &&\n newData[`${ORG_PROPERTY_PREFIX}id`]\n ) {\n newData.org = newData[`${ORG_PROPERTY_PREFIX}id`];\n delete newData[`${ORG_PROPERTY_PREFIX}id`];\n }\n\n this._dataSetter(data, newData);\n }\n\n if (this.config(KEY_CONTEXT)) {\n try {\n var contextData = JSON.stringify(this.config(KEY_CONTEXT));\n data[KEY_CONTEXT] = encodeURIComponent(contextData);\n } catch (e) {}\n }\n\n if (options.fullEventData) data = options.fullEventData;\n\n const dirty = Boolean(options.useBeacon || this.isUnloading);\n\n const meta = {\n [META_DIRTY]: dirty,\n [META_DURATION]: 0,\n [META_RETRACK]: Boolean(options.retrack),\n [META_SENT]: !dirty,\n [META_TIMESTAMP]: Date.now()\n };\n\n const action = new WoopraAction(this, data[IDPTNC], data, meta);\n\n const callback = isFunction(options.callback)\n ? () => options.callback(action)\n : noop;\n const beforeCallback = isFunction(options.beforeCallback)\n ? () => options.beforeCallback(action)\n : noop;\n const errorCallback = options.errorCallback || noop;\n\n // cancel previous lifecycle page event if a new one is tracked\n if (lifecycle === LIFECYCLE_PAGE) {\n this.pending.forEach((item) => {\n if (item.lifecycle === LIFECYCLE_PAGE && item.args.eventData[IDPTNC]) {\n this.cancelAction(item.args.eventData[IDPTNC]);\n }\n });\n }\n\n if (lifecycle === LIFECYCLE_PAGE || options.useBeacon || this.isUnloading) {\n this.pending.push({\n lifecycle,\n endpoint: options.endpoint,\n params: data,\n args: options,\n meta,\n callback,\n errorCallback\n });\n }\n\n if (lifecycle !== LIFECYCLE_PAGE && options.endpoint === ENDPOINT_TRACK) {\n this.lastAction = action;\n }\n\n if (this.isUnloading || (options.useBeacon && !options.queue)) {\n this.sendBeacons();\n } else if (!options.queue) {\n const queryString = Woopra.buildUrlParams(data);\n const scriptUrl = `${endpoint}?${queryString}`;\n\n const onSuccess = () => callCallback(callback, data.event);\n const onError = () => callCallback(errorCallback, data.event);\n\n Woopra.loadScript(scriptUrl, onSuccess, onError);\n }\n\n setTimeout(() => callCallback(beforeCallback, data.event));\n }\n\n /**\n * Send an event to tracking servr\n */\n track(name, options) {\n let eventData = {};\n let eventName = '';\n let hash;\n let callback;\n let beforeCallback;\n let errorCallback;\n let lastArg = arguments[arguments.length - 1];\n let lifecycle = LIFECYCLE_ACTION;\n let queue = false;\n let useBeacon = false;\n let timeout;\n let retrack;\n\n if (isFunction(lastArg)) callback = lastArg;\n else if (isObject(lastArg)) {\n if (isFunction(lastArg.callback)) callback = lastArg.callback;\n else if (isFunction(lastArg.onSuccess)) callback = lastArg.onSuccess;\n if (isFunction(lastArg.onBeforeSend))\n beforeCallback = lastArg.onBeforeSend;\n if (isFunction(lastArg.onError)) errorCallback = lastArg.onError;\n\n if (!isUndefined(lastArg.lifecycle)) lifecycle = lastArg.lifecycle;\n if (!isUndefined(lastArg.timeout)) timeout = lastArg.timeout;\n if (!isUndefined(lastArg.retrack)) retrack = lastArg.retrack;\n\n if (this.config(KEY_BEACONS)) {\n if (!isUndefined(lastArg.queue)) queue = Boolean(lastArg.queue);\n\n if (!isUndefined(lastArg.useBeacon)) {\n useBeacon = Boolean(lastArg.useBeacon);\n } else if (queue) useBeacon = true;\n } else {\n useBeacon = false;\n }\n }\n\n // Load campaign params (load first to allow overrides)\n if (!this.config(KEY_CAMPAIGN_ONCE) || !this.sentCampaign) {\n eventData = { ...eventData, ...Woopra.getCampaignData() };\n this.sentCampaign = true;\n }\n\n // Load query params mapping into Woopra event\n eventData = {\n ...eventData,\n ...Woopra.mapQueryParams(this.config(KEY_MAP_QUERY_PARAMS))\n };\n\n // Track default: pageview\n if (isUndefined(name) || name === callback) {\n eventName = ACTION_PV;\n }\n // Track custom events\n else if (isUndefined(options) || options === callback) {\n if (isString(name)) {\n eventName = name;\n }\n if (isObject(name)) {\n if (name.name && name.name === ACTION_PV) {\n eventName = ACTION_PV;\n }\n\n this._dataSetter(eventData, name);\n }\n }\n // Track custom events in format of name,object\n else {\n this._dataSetter(eventData, options);\n eventName = name;\n }\n\n eventData[IDPTNC] = randomString();\n\n // Add some defaults for pageview\n if (eventName === ACTION_PV) {\n eventData.url = eventData.url || this.getPageUrl();\n eventData.title = eventData.title || this.getPageTitle();\n eventData.domain = eventData.domain || this.getDomainName();\n eventData.uri = eventData.uri || this.getURI();\n eventData[SCROLL_DEPTH] = getScrollDepth();\n eventData.returning = isUndefined(eventData.returning)\n ? false\n : eventData.returning;\n\n if (!lastArg || !lastArg.lifecycle) lifecycle = LIFECYCLE_PAGE;\n\n if (this.config(KEY_SAVE_URL_HASH)) {\n hash = eventData.hash || this.getPageHash();\n if (hash !== '' && hash !== '#') {\n eventData.hash = hash;\n }\n }\n }\n\n const augmentAction = this.config(KEY_AUGMENT_ACTION);\n\n if (isFunction(augmentAction)) {\n augmentAction.call(this, eventName, eventData);\n }\n\n this._push({\n endpoint: ENDPOINT_TRACK,\n visitorData: this.visitorData,\n sessionData: this.sessionData,\n orgData: this.orgData,\n eventName,\n eventData,\n lifecycle,\n callback,\n beforeCallback,\n errorCallback,\n queue,\n useBeacon,\n retrack,\n timeout\n });\n\n this.startPing();\n\n return this;\n }\n\n update(idptnc, options, lastArg) {\n let callback;\n let beforeCallback;\n let errorCallback;\n let queue = false;\n let useBeacon = true;\n\n if (isFunction(lastArg)) callback = lastArg;\n else if (isObject(lastArg)) {\n if (isFunction(lastArg.callback)) callback = lastArg.callback;\n else if (isFunction(lastArg.onSuccess)) callback = lastArg.onSuccess;\n if (isFunction(lastArg.onBeforeSend))\n beforeCallback = lastArg.onBeforeSend;\n if (isFunction(lastArg.onError)) errorCallback = lastArg.onError;\n\n if (this.config(KEY_BEACONS)) {\n if (!isUndefined(lastArg.queue)) queue = Boolean(lastArg.queue);\n\n if (!isUndefined(lastArg.useBeacon)) {\n useBeacon = Boolean(lastArg.useBeacon);\n } else if (queue) useBeacon = true;\n } else {\n useBeacon = false;\n }\n }\n\n const eventData = {\n [IDPTNC]: idptnc,\n project: this.config(KEY_DOMAIN) || Woopra.getHostnameNoWww()\n };\n\n const rawData = {};\n\n for (const [original, alias] of ACTION_PROPERTY_ALIASES) {\n if (options && options[original]) {\n rawData[alias] = options[original];\n }\n }\n\n if (this.config(KEY_USE_COOKIES)) {\n rawData.cookie = this.getCookie() || this.cookie;\n }\n\n this._dataSetter(eventData, rawData);\n\n this._dataSetter(\n eventData,\n jsonStringifyObjectValues(\n prefixObjectKeys(\n options,\n ACTION_PROPERTY_PREFIX,\n ACTION_PROPERTY_ALIASES\n )\n )\n );\n\n this._push({\n endpoint: ENDPOINT_UPDATE,\n fullEventData: eventData,\n callback,\n beforeCallback,\n errorCallback,\n queue,\n useBeacon\n });\n\n return this;\n }\n\n cancelAction(idptnc) {\n let hasCancelled = false;\n\n if (this.lastAction?.id === idptnc) {\n this.lastAction = null;\n }\n\n this.pending = this.pending.map((item) => {\n if (item.params[IDPTNC] === idptnc) {\n hasCancelled = true;\n\n return {\n ...item,\n meta: {\n ...item.meta,\n [META_CANCELLED]: true,\n [META_DIRTY]: true,\n [META_DURATION]:\n item.lifecycle === LIFECYCLE_PAGE\n ? item.meta[META_DURATION] +\n (Date.now() - item.meta[META_TIMESTAMP])\n : item.meta[META_DURATION],\n [META_RETRACK]: false\n }\n };\n }\n\n return item;\n });\n\n if (hasCancelled) {\n this.sendBeacons();\n }\n }\n\n /**\n * Tracks a single form and then resubmits it\n */\n trackForm(eventName = 'Tracked Form', selector, options) {\n let els;\n const _options = isString(selector) ? options || {} : selector || {};\n\n const bindEl = (el, ev, props, opts) => {\n addEventListener(el, 'submit', (e) => {\n this.trackFormHandler(e, el, ev, _options);\n });\n };\n\n if (_options.elements) {\n els = _options.elements;\n } else {\n els = getElement(selector, _options);\n }\n\n // attach event if form was found\n if (els && els.length > 0) {\n for (let i in els) {\n bindEl(els[i], eventName, _options);\n }\n }\n }\n\n trackFormHandler(e, el, eventName, options = {}) {\n let trackFinished = false;\n\n if (!el.getAttribute(DATA_TRACKED_ATTRIBUTE)) {\n const useBeacon = Boolean(this.config(KEY_BEACONS));\n\n const properties = Woopra.serializeForm(el, options);\n\n if (isFunction(options.identify)) {\n const personData = options.identify(properties) || {};\n\n if (personData) {\n this.identify(personData);\n }\n }\n\n const onBeforeSend = isFunction(options.onBeforeSend)\n ? options.onBeforeSend\n : undefined;\n const onSuccess = isFunction(options.callback)\n ? () => options.callback(properties)\n : undefined;\n const onError = isFunction(options.onError) ? options.onError : undefined;\n\n if (!options.noSubmit) el.setAttribute(DATA_TRACKED_ATTRIBUTE, 1);\n\n if (options.noSubmit || useBeacon) {\n this.track(eventName, properties, {\n onBeforeSend,\n onError,\n onSuccess,\n useBeacon\n });\n } else {\n e.preventDefault();\n e.stopPropagation();\n\n // set timeout to resubmit (default 250ms)\n // so even if woopra does not reply it will still\n // submit the form\n const timer = setTimeout(() => {\n if (!trackFinished) {\n el.submit();\n }\n }, this.config(KEY_FORM_PAUSE));\n\n this.track(eventName, properties, {\n onBeforeSend,\n onSuccess() {\n clearTimeout(timer);\n\n if (onSuccess) onSuccess();\n\n if (!trackFinished) el.submit();\n\n trackFinished = true;\n },\n onError\n });\n }\n }\n }\n\n /**\n * Tracks clicks\n *\n * @param {String} eventName The name of the event to track\n * @param {String} selector The id of element to track\n * @param {Object} properties Any event properties to track with\n * @param {Object} options (Optional) Options object\n * @param {Array} options.elements Supports an array of elements (jQuery object)\n * @param {Boolean} options.noNav (Default: false) If true, will only perform the track event and let the click event bubble up\n */\n trackClick(eventName = 'Item Clicked', selector, properties, options = {}) {\n let els = [];\n\n const bindEl = (el, ev, props, opts) => {\n addEventListener(el, EVENT_CLICK, (e) => {\n this.trackClickHandler(e, el, ev, props, opts);\n });\n };\n\n /**\n * Support an array of elements\n */\n if (options.elements) {\n els = options.elements;\n } else {\n els = getElement(selector, options);\n }\n\n if (els) {\n for (let i = 0; i < els.length; i++) {\n bindEl(els[i], eventName, properties, options);\n }\n }\n }\n\n trackClickHandler(e, el, eventName, properties, options) {\n let trackFinished = false;\n\n if (!el.getAttribute(DATA_TRACKED_ATTRIBUTE)) {\n const useBeacon = Boolean(this.config(KEY_BEACONS));\n\n const onBeforeSend = isFunction(options.onBeforeSend)\n ? options.onBeforeSend\n : undefined;\n const onSuccess = isFunction(options.callback)\n ? () => options.callback(properties)\n : undefined;\n const onError = isFunction(options.onError) ? options.onError : undefined;\n\n if (!options.noNav) el.setAttribute(DATA_TRACKED_ATTRIBUTE, 1);\n\n if (options.noNav || useBeacon) {\n this.track(eventName, properties, {\n onBeforeSend,\n onError,\n onSuccess,\n useBeacon\n });\n } else {\n e.preventDefault();\n\n // set timeout to resubmit (default 250ms)\n // so even if woopra does not reply it will still\n // click the link\n const timer = setTimeout(() => {\n if (!trackFinished) {\n el.click();\n }\n }, this.config(KEY_CLICK_PAUSE));\n\n this.track(eventName, properties, {\n onBeforeSend,\n onSuccess() {\n clearTimeout(timer);\n\n if (onSuccess) onSuccess();\n\n if (!trackFinished) el.click();\n\n trackFinished = true;\n },\n onError\n });\n }\n }\n }\n\n startPing() {\n if (isUndefined(this.pingInterval)) {\n this.pingInterval = setInterval(() => {\n this.ping();\n }, this.config(KEY_PING_INTERVAL));\n }\n }\n\n stopPing() {\n if (!isUndefined(this.pingInterval)) {\n clearInterval(this.pingInterval);\n delete this.pingInterval;\n }\n }\n\n /**\n * Pings tracker with visitor info\n */\n ping() {\n if (this.config(KEY_PING) && this.idle < this.config(KEY_IDLE_TIMEOUT)) {\n // this._push({\n // endpoint: 'ping'\n // });\n } else {\n this.stopPing();\n }\n\n const now = Date.now();\n if (now - this.last_activity > this.config(KEY_IDLE_THRESHOLD)) {\n this.idle = now - this.last_activity;\n }\n\n return this;\n }\n\n /**\n * Pushes visitor data to server without sending an event\n */\n push(callback) {\n this._push({\n endpoint: ENDPOINT_IDENTIFY,\n visitorData: this.visitorData,\n sessionData: this.sessionData,\n orgData: this.orgData,\n callback\n });\n\n this.sendBeacons();\n\n return this;\n }\n\n _updateDurations(oldState, newState) {\n const now = Date.now();\n\n function updateDuration(item) {\n switch (newState) {\n case PAGE_LIFECYCLE_STATE_ACTIVE:\n case PAGE_LIFECYCLE_STATE_PASSIVE:\n if (now - item.meta[META_LEAVE] > item.params.timeout) {\n return {\n [META_EXPIRED]: true\n };\n }\n\n if (\n (newState === PAGE_LIFECYCLE_STATE_ACTIVE &&\n oldState === PAGE_LIFECYCLE_STATE_PASSIVE) ||\n (newState === PAGE_LIFECYCLE_STATE_PASSIVE &&\n oldState === PAGE_LIFECYCLE_STATE_ACTIVE)\n ) {\n return {};\n }\n\n return {\n [META_TIMESTAMP]: now\n };\n\n case PAGE_LIFECYCLE_STATE_HIDDEN:\n return {\n [META_DIRTY]:\n item.meta[META_DIRTY] || now - item.meta[META_TIMESTAMP] > 100,\n [META_DURATION]:\n item.meta[META_DURATION] + (now - item.meta[META_TIMESTAMP]),\n [META_LEAVE]: now\n };\n\n case PAGE_LIFECYCLE_STATE_TERMINATED:\n return {\n [META_DIRTY]:\n item.meta[META_DIRTY] || now - item.meta[META_LEAVE] > 100\n };\n\n default:\n return {};\n }\n }\n\n this.pending = this.pending.map((item) => {\n if (item.lifecycle !== LIFECYCLE_PAGE) return item;\n\n return {\n ...item,\n meta: {\n ...item.meta,\n ...updateDuration(item)\n }\n };\n });\n\n if (this.lastAction) {\n this.lastAction = {\n ...this.lastAction,\n meta: {\n ...this.lastAction.meta,\n ...updateDuration(this.lastAction)\n }\n };\n }\n }\n\n _processLifecycle(lifecycle) {\n const toRetrack = [];\n\n this.pending.forEach((item) => {\n if (\n item.meta[META_EXPIRED] &&\n !item.meta[META_CANCELLED] &&\n item.meta[META_RETRACK]\n ) {\n toRetrack.push({\n ...item.args,\n eventData: {\n ...(item.args.eventData || {}),\n [IDPTNC]: randomString(),\n returning: true\n }\n });\n }\n });\n\n toRetrack.forEach((item) => this._push(item));\n\n this.pending = this.pending.filter((item) => {\n if (item.meta[META_EXPIRED]) return false;\n\n if (item.meta[META_DIRTY]) {\n this.beaconQueue.push({\n lifecycle: item.lifecycle,\n endpoint: item.endpoint,\n params: {\n ...item.params\n },\n meta: {\n ...item.meta\n },\n successCallback: item.callback,\n errorCallback: item.errorCallback\n });\n }\n\n if (item.meta[META_CANCELLED]) return false;\n\n if (item.lifecycle === LIFECYCLE_PAGE && lifecycle !== LIFECYCLE_PAGE) {\n return true;\n }\n\n return false;\n });\n\n this.pending = this.pending.map((item) => ({\n ...item,\n meta: {\n ...item.meta,\n [META_DIRTY]: false,\n [META_SENT]: true\n }\n }));\n\n if (lifecycle === LIFECYCLE_PAGE && this.lastAction) {\n this.beaconQueue.push({\n lifecycle: LIFECYCLE_PAGE,\n endpoint: ENDPOINT_TRACK,\n params: {\n ...this.lastAction.params\n },\n meta: {\n ...this.lastAction.meta,\n [META_SENT]: true\n }\n });\n }\n\n return toRetrack.length > 0;\n }\n\n _drainBeaconQueue() {\n const useCookies = this.config(KEY_USE_COOKIES);\n\n function isEmptyBeaconParams(params) {\n const { [IDPTNC]: id, cookie, project, event, ...rest } = params;\n\n return Object.keys(rest).length > 0;\n }\n\n const idMap = this.beaconQueue.reduce((idMap, item) => {\n idMap[item.params[IDPTNC]] = [];\n\n return idMap;\n }, {});\n\n this.beaconQueue.forEach((item) => {\n idMap[item.params[IDPTNC]].push(item);\n });\n\n this.beaconQueue = [];\n\n const toSend = Object.keys(idMap)\n .map((id) => {\n const items = idMap[id];\n\n const data = {\n endpoint: undefined,\n params: {},\n onSuccess: [],\n onError: []\n };\n\n items.forEach((item) => {\n if (!data.endpoint) {\n if (item.endpoint === ENDPOINT_TRACK && item.meta[META_SENT]) {\n data.endpoint = ENDPOINT_UPDATE;\n } else {\n data.endpoint = item.endpoint;\n }\n }\n\n data.params.project = item.params.project;\n data.params.event = item.params.event;\n data.params[IDPTNC] = item.params[IDPTNC];\n\n if (useCookies) {\n data.params.cookie = this.getCookie() || this.cookie;\n }\n\n if (\n (item.lifecycle === LIFECYCLE_PAGE ||\n item.params[IDPTNC] === this.lastAction?.id) &&\n item.meta[META_DURATION] > 0\n ) {\n data.params.duration = item.meta[META_DURATION];\n }\n\n if (item.meta[SCROLL_DEPTH]) {\n data.params[`${ACTION_PROPERTY_PREFIX}${SCROLL_DEPTH}`] =\n Math.round(item.meta[SCROLL_DEPTH] * 10_000) / 10_000;\n }\n\n if (!item.meta[META_SENT]) {\n data.params = { ...data.params, ...item.params };\n\n if (isFunction(item.successCallback)) {\n data.onSuccess.push(item.successCallback);\n }\n\n if (isFunction(item.errorCallback)) {\n data.onError.push(item.errorCallback);\n }\n }\n });\n\n if (!data.params.project) {\n data.params.project =\n this.config(KEY_DOMAIN) || Woopra.getHostnameNoWww();\n }\n\n return data;\n })\n .filter((item) => isEmptyBeaconParams(item.params));\n\n const sendBeacon =\n navigator.sendBeacon && navigator.sendBeacon.bind(navigator);\n const useBeacon =\n Boolean(this.config(KEY_BEACONS)) && isFunction(sendBeacon);\n\n // TODO: fallback to sending via loadScript if sendBeacon fails\n // this probably requires a more stream-like approach to processing the queue\n if (toSend.length > 0) {\n if (useBeacon) {\n const payloads = [''];\n\n const lines = toSend.map(({ endpoint, params }) =>\n JSON.stringify({ endpoint, params })\n );\n\n // chunk beacons into < 64 KiB chunks\n lines.forEach((line) => {\n if (\n new Blob([`${payloads[payloads.length - 1]}${line}`]).size >= 65_000\n ) {\n payloads.push('');\n }\n payloads[payloads.length - 1] += `${line}\\n`;\n });\n\n payloads.forEach((payload, index) => {\n const formData = new FormData();\n\n formData.append('payload', payload.slice(0, -1));\n\n try {\n sendBeacon(this.getEndpoint('push'), formData);\n } catch (e) {\n console.error('Woopra: sendBeacon failed:', e);\n }\n });\n\n toSend.forEach((item) => {\n item.onSuccess.forEach((callback) =>\n callCallback(callback, item.params.event)\n );\n });\n } else {\n toSend.forEach((item) => {\n const endpoint = this.getEndpoint(item.endpoint);\n\n const queryString = Woopra.buildUrlParams({\n close: true,\n ...item.params\n });\n const scriptUrl = `${endpoint}?${queryString}`;\n\n const onSuccess = () =>\n item.onSuccess.forEach((callback) =>\n callCallback(callback, item.params.event)\n );\n const onError = () =>\n item.onError.forEach((callback) =>\n callCallback(callback, item.params.event)\n );\n\n Woopra.loadScript(scriptUrl, onSuccess, onError);\n });\n }\n }\n }\n\n sendBeacons(lifecycle = LIFECYCLE_ACTION) {\n this._processLifecycle(lifecycle);\n this._drainBeaconQueue();\n }\n\n /**\n * synchronous sleep\n */\n sleep() {\n // Why does this exist?\n }\n\n _touch(last_activity = Date.now()) {\n this.last_activity = last_activity;\n this.idle = 0;\n }\n\n // User Action tracking and event handlers\n\n /**\n * Clicks\n */\n\n /**\n * Measure when the user last moved their mouse to update idle state\n */\n moved(e, last_activity) {\n this._touch(last_activity);\n }\n\n onClick(e) {\n if (!this.config(KEY_CLICK_TRACKING)) return;\n\n const useBeacon = Boolean(this.config(KEY_BEACONS));\n\n const { target } = e;\n\n const clickTarget = findParentElement(\n target,\n this.config(KEY_CLICK_TRACKING_MATCHER_SELECTORS)\n );\n\n if (clickTarget) {\n const tagName = clickTarget.tagName.toLowerCase();\n\n // get attributes starting with data-woopra-\n const customProperties = clickTarget\n .getAttributeNames()\n .reduce((result, name) => {\n if (Woopra.startsWith(name, 'data-woopra-')) {\n result[name.slice(12)] = clickTarget.getAttribute(name);\n }\n\n return result;\n }, {});\n\n const eventName =\n clickTarget.getAttribute('data-woopra') || 'button click';\n\n const properties = {\n 'page url': this.getPageUrl(),\n 'page title': this.getPageTitle(),\n text:\n clickTarget.innerText || clickTarget.value || clickTarget.textContent,\n title: clickTarget.textContent,\n type: tagName === 'a' ? 'link' : clickTarget.type,\n tagname: tagName,\n classname: clickTarget.className,\n 'dom path': getDOMPath(clickTarget),\n url: clickTarget.href,\n 'pointer type': e.pointerType,\n ...customProperties\n };\n\n if (this.config(KEY_SAVE_URL_HASH)) {\n const hash = this.getPageHash();\n\n if (hash !== '' && hash !== '#') {\n properties['page hash'] = hash;\n }\n }\n\n this.track(eventName, properties, {\n useBeacon\n });\n }\n }\n\n onLink(e, link) {\n const useBeacon = Boolean(this.config(KEY_BEACONS));\n const downloadTypes = this.config(KEY_DOWNLOAD_EXTENSIONS);\n\n const downloadFileTypeRegexp = new RegExp(\n `(?:${downloadTypes.join('|')})($|\\&)`,\n 'i'\n );\n\n const isDownloadFileType = downloadFileTypeRegexp.test(link.pathname);\n\n if (this.config(KEY_DOWNLOAD_TRACKING) && isDownloadFileType) {\n fire(EVENT_DOWNLOAD, link.href);\n\n if (link.target !== TARGET_BLANK && Woopra.leftClick(e)) {\n link.setAttribute(DATA_TRACKED_ATTRIBUTE, 1);\n\n if (!useBeacon) {\n e.preventDefault();\n e.stopPropagation();\n\n setTimeout(() => {\n link.click();\n }, this.config(KEY_DOWNLOAD_PAUSE));\n }\n }\n }\n\n // Make sure\n // * outgoing tracking is enabled\n // * this URL does not match a download URL (doesn't end\n // in a binary file extension)\n // * not ignoring subdomains OR link hostname is not a partial\n // match of current hostname (to check for subdomains),\n // * hostname is not empty\n if (\n this.config(KEY_OUTGOING_TRACKING) &&\n !isDownloadFileType &&\n Woopra.isOutgoingLink(link.hostname)\n ) {\n fire(EVENT_OUTGOING, link.href);\n\n if (link.target !== TARGET_BLANK && Woopra.leftClick(e)) {\n link.setAttribute(DATA_TRACKED_ATTRIBUTE, 1);\n\n if (!useBeacon) {\n e.preventDefault();\n e.stopPropagation();\n\n setTimeout(() => {\n link.click();\n }, this.config(KEY_OUTGOING_PAUSE));\n }\n }\n }\n }\n\n downloaded(url) {\n const useBeacon = Boolean(this.config(KEY_BEACONS));\n\n this.track(\n EVENT_DOWNLOAD,\n {\n url\n },\n { useBeacon }\n );\n }\n\n outgoing(url) {\n const useBeacon = Boolean(this.config(KEY_BEACONS));\n\n this.track(\n EVENT_OUTGOING,\n {\n url\n },\n { useBeacon }\n );\n }\n\n onUnload() {\n if (!this.isUnloading) {\n this.isUnloading = true;\n this._updateDurations(\n PAGE_LIFECYCLE_STATE_HIDDEN,\n PAGE_LIFECYCLE_STATE_TERMINATED\n );\n this.sendBeacons(LIFECYCLE_PAGE);\n }\n }\n\n onPageStateChange(e) {\n const { newState, oldState } = e;\n\n switch (newState) {\n case PAGE_LIFECYCLE_STATE_ACTIVE:\n this._updateDurations(oldState, newState);\n this.sendBeacons();\n this._touch();\n break;\n\n case PAGE_LIFECYCLE_STATE_PASSIVE:\n this._updateDurations(oldState, newState);\n this.sendBeacons();\n break;\n\n case PAGE_LIFECYCLE_STATE_HIDDEN:\n this._updateDurations(oldState, newState);\n this.sendBeacons();\n break;\n\n case PAGE_LIFECYCLE_STATE_TERMINATED:\n this.onUnload();\n break;\n }\n }\n\n onScroll(e) {\n this._touch();\n\n const scrollDepth = getScrollDepth();\n\n const pages = this.pending.filter(\n (item) => item.lifecycle === LIFECYCLE_PAGE\n );\n\n pages.forEach((pv) => {\n pv.meta[SCROLL_DEPTH] = Math.min(\n 1,\n Math.max(scrollDepth, pv.meta[SCROLL_DEPTH] || 0)\n );\n });\n }\n\n /**\n * Event handler for decorating an element with a URL (for now only\n * anchor tags)\n */\n autoDecorate(elem) {\n const xdm = this.config(KEY_CROSS_DOMAIN);\n\n if (!xdm) return;\n\n const domains = isString(xdm) ? [xdm] : isArray(xdm) ? xdm : [];\n\n let canDecorate;\n\n for (let i = 0; i < domains.length; i++) {\n if (\n elem.hostname.indexOf(domains[i]) !== -1 &&\n elem.hostname !== Woopra.location('hostname')\n ) {\n canDecorate = true;\n break;\n }\n }\n\n if (canDecorate) {\n const decorated = this.decorate(elem);\n\n if (decorated) {\n elem.href = decorated;\n // bind an event handler on mouseup to remove the url\n }\n }\n }\n\n /**\n * Resets cookie\n */\n reset() {\n Woopra.docCookies.removeItem(\n this.config(KEY_COOKIE_NAME),\n this.config(KEY_COOKIE_PATH),\n this.config(KEY_COOKIE_DOMAIN)\n );\n this.cookie = null;\n this._setupCookie();\n }\n\n /**\n * Decorates a given URL with a __woopraid query param with value of\n * the current cookie\n */\n decorate(url) {\n let el;\n let query;\n let pathname;\n let host;\n\n if (isString(url)) {\n el = document.createElement('a');\n el.href = url;\n query = el.search ? '&' : '?';\n } else if (url && url.href) {\n el = url;\n }\n\n if (el) {\n query = el.search ? '&' : '?';\n pathname =\n el.pathname && el.pathname.charAt(0) === '/'\n ? el.pathname\n : `/${el.pathname}`;\n\n host =\n el.hostname +\n (el.port && el.port !== '' && el.port !== '80' && el.port !== '0'\n ? `:${el.port}`\n : '');\n\n return `${el.protocol}//${host}${pathname}${el.search}${query}${XDM_PARAM_NAME}=${this.cookie}${el.hash}`;\n }\n }\n\n /**\n * Undecorates a URL with __woopraid query param\n */\n undecorate(url) {\n const regex = new RegExp(`[?&]+(?:${XDM_PARAM_NAME})=([^&#]*)`, 'gi');\n let _url = url;\n\n if (url && url.href) {\n _url = url.href;\n }\n\n if (_url) {\n return _url.replace(regex, '');\n }\n }\n\n getPageUrl() {\n if (this.config(KEY_IGNORE_QUERY_URL)) {\n return Woopra.location('pathname');\n }\n return `${Woopra.location('pathname')}${Woopra.location('search')}`;\n }\n\n getPageHash() {\n return Woopra.location('hash');\n }\n\n getPageTitle() {\n return document.getElementsByTagName('title').length === 0\n ? ''\n : document.getElementsByTagName('title')[0].innerHTML;\n }\n\n getDomainName() {\n return Woopra.location('hostname');\n }\n\n getURI() {\n return Woopra.location('href');\n }\n\n /**\n * Retrieves a Woopra unique id from a URL's query param (__woopraid)\n *\n * @param {String} href The full URL to extract from\n */\n getUrlId(href = Woopra.location('href')) {\n const matches = href.match(URL_ID_REGEX);\n\n if (matches && matches[1]) {\n return matches[1];\n }\n }\n\n getOptionParams() {\n // default params\n const o = {\n project: this.config(KEY_DOMAIN) || Woopra.getHostnameNoWww(),\n instance: this.instanceName,\n meta: Woopra.docCookies.getItem('wooMeta') || '',\n screen: `${window.screen.width}x${window.screen.height}`,\n language:\n window.navigator.browserLanguage || window.navigator.language || '',\n app: this.config(KEY_APP),\n referer: document.referrer\n };\n\n if (!this.config(KEY_DOMAIN)) {\n o._warn = 'no_domain';\n\n if (Woopra.getHostnameNoWww() !== Woopra.getDomain()) {\n o._warn += ',domain_mismatch';\n }\n }\n\n // set cookie if configured\n if (this.config(KEY_USE_COOKIES)) {\n o.cookie = this.getCookie() || this.cookie;\n }\n\n // set ip if configured\n if (this.config(KEY_IP)) {\n o.ip = this.config(KEY_IP);\n }\n\n return o;\n }\n\n /**\n * Stop ping timers and cleanup any globals. Shouldn't really\n * be needed by clients.\n */\n dispose() {\n this.stopPing();\n\n for (let id in this.__l) {\n if (this.__l.hasOwnProperty(id)) {\n removeHandler(id, this.instanceName);\n }\n }\n this.__l = null;\n\n // cleanup global\n if (!isUndefined(window[this.instanceName])) {\n try {\n delete window[this.instanceName];\n } catch (e) {\n window[this.instanceName] = undefined;\n }\n }\n }\n}\n","import { isFunction, isUndefined } from 'lodash-es';\nimport attachGlobalEvents from './lib/global-events';\nimport Tracker from './tracker';\nimport Woopra from './woopra';\n\nif (!window.WoopraTracker) attachGlobalEvents();\n\nwindow.WoopraTracker = Tracker;\nwindow.WoopraLoadScript = Woopra.loadScript;\n\nif (!isUndefined(window.exports)) {\n Woopra.Tracker = Tracker;\n window.exports.Woopra = Woopra;\n\n if (isFunction(window.woopraLoaded)) {\n window.woopraLoaded();\n window.woopraLoaded = null;\n }\n}\n\n// Initialize instances & preloaded settings/events\nvar _queue = window.__woo || window._w;\nif (!isUndefined(_queue)) {\n for (var name in _queue) {\n if (_queue.hasOwnProperty(name)) {\n var instance = new Tracker(name);\n instance.init();\n\n // DO NOT REMOVE\n // compatibility with old tracker and chat\n if (isUndefined(window.woopraTracker)) {\n window.woopraTracker = instance;\n }\n }\n }\n}\n"],"names":["isUndefined","value","undefined","freeGlobal","global","Object","freeSelf","self","root","Function","Symbol","objectProto","prototype","hasOwnProperty","nativeObjectToString","toString","symToStringTag","toStringTag","nullTag","undefinedTag","baseGetTag","isOwn","call","tag","unmasked","e","result","getRawTag","objectToString","isObject","type","asyncTag","funcTag","genTag","proxyTag","isFunction","now","Date","reWhitespace","reTrimStart","baseTrim","string","slice","index","length","test","charAt","trimmedEndIndex","replace","isObjectLike","symbolTag","isSymbol","NAN","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","parseInt","toNumber","other","valueOf","isBinary","FUNC_ERROR_TEXT","nativeMax","Math","max","nativeMin","min","debounce","func","wait","options","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","TypeError","invokeFunc","time","args","thisArg","apply","shouldInvoke","timeSinceLastCall","timerExpired","trailingEdge","setTimeout","timeWaiting","remainingWait","debounced","isInvoking","arguments","this","leadingEdge","clearTimeout","cancel","flush","ENDPOINTS","_ENDPOINTS","XDM_PARAM_NAME","CAMPAIGN_KEYS","SECOND_LEVEL_TLDS","RANDOM_STRING_CHARS","URL_ID_REGEX","RegExp","LIFECYCLE_ACTION","LIFECYCLE_PAGE","SCROLL_DEPTH","ACTION_PV","IDPTNC","TARGET_BLANK","DATA_TRACKED_ATTRIBUTE","ACTION_PROPERTY_PREFIX","ORG_PROPERTY_PREFIX","ENDPOINT_TRACK","ENDPOINT_UPDATE","PAGE_LIFECYCLE_STATE_ACTIVE","PAGE_LIFECYCLE_STATE_PASSIVE","PAGE_LIFECYCLE_STATE_HIDDEN","PAGE_LIFECYCLE_STATE_FROZEN","PAGE_LIFECYCLE_STATE_TERMINATED","EVENT_BEFOREUNLOAD","EVENT_BLUR","EVENT_CLICK","EVENT_DOWNLOAD","EVENT_FOCUS","EVENT_FREEZE","EVENT_LINK_CLICK","EVENT_MOUSEMOVE","EVENT_OUTGOING","EVENT_PAGEHIDE","EVENT_PAGESHOW","EVENT_RESUME","EVENT_SCROLL","EVENT_STATECHANGE","EVENT_UNLOAD","EVENT_VISIBILITYCHANGE","KEY_APP","KEY_APPIER_APP_ID","KEY_AUTO_DECORATE","KEY_BEACONS","KEY_CAMPAIGN_ONCE","KEY_CLICK_TRACKING_MATCHER_SELECTORS","KEY_CLICK_PAUSE","KEY_CONTEXT","KEY_COOKIE_DOMAIN","KEY_COOKIE_EXPIRE","KEY_COOKIE_NAME","KEY_COOKIE_PATH","KEY_COOKIE_SECURE","KEY_CROSS_DOMAIN","KEY_DOMAIN","KEY_DOWNLOAD_EXTENSIONS","KEY_DOWNLOAD_PAUSE","KEY_DOWNLOAD_TRACKING","KEY_FORM_PAUSE","KEY_HIDE_CAMPAIGN","KEY_HIDE_XDM_DATA","KEY_IDLE_THRESHOLD","KEY_IDLE_TIMEOUT","KEY_IGNORE_QUERY_URL","KEY_MAP_QUERY_PARAMS","KEY_OUTGOING_IGNORE_SUBDOMAIN","KEY_OUTGOING_PAUSE","KEY_OUTGOING_TRACKING","KEY_PERSONALIZATION","KEY_PING","KEY_PING_INTERVAL","KEY_PROTOCOL","KEY_REGION","KEY_SAVE_URL_HASH","KEY_THIRD_PARTY","KEY_USE_COOKIES","META_CANCELLED","META_DIRTY","META_DURATION","META_EXPIRED","META_LEAVE","META_RETRACK","META_SENT","META_TIMESTAMP","ACTION_PROPERTY_ALIASES","DEFAULT_DOWNLOAD_EXTENSIONS","ELEMENT_MATCHER_LINK","ELEMENT_MATCHER_CLICK","globals","_KEY_AUTO_DECORATE$KE","handlers","removeHandler","id","instance","addEventListener","element","callback","on","parent","event","instanceName","__l","push","fire","handler","_l","_event","i","Array","EventTargetShim","_registry","_proto","listener","opts","_getRegistry","removeEventListener","typeRegistry","handlerIndex","indexOf","splice","dispatchEvent","evt","target","freeze","forEach","StateChangeEvent","initDict","newState","oldState","originalEvent","IS_SAFARI","safari","pushNotification","SUPPORTS_PAGE_TRANSITION_EVENTS","EVENTS","onbeforeunload","preventDefault","returnValue","LEGAL_STATE_TRANSITIONS","map","arr","reduce","acc","val","idx","getCurrentState","document","visibilityState","hasFocus","PageLifecycle$1","_EventTargetShim","PageLifecycle","_this","state","_state","_unsavedChanges","_handleEvents","bind","_assertThisInitialized","_safariBeforeUnloadTimeout","defaultPrevented","_dispatchChangesIfNeeded","_proto2","addUnsavedChanges","removeUnsavedChanges","idIndex","path","order","oldIndex","newIndex","keys","getLegalStateTransitionPath","persisted","key","get","wasDiscarded","isArray","stringTag","isString","transform","getPrototype","getPrototypeOf","arg","objectTag","funcProto","funcToString","objectCtorString","isPlainObject","proto","Ctor","constructor","nativeIsFinite","isFinite","randomString","s","rnum","floor","random","substring","isLeftClick","window","_isUndefined","which","button","metaKey","altKey","ctrlKey","shiftKey","getElement","selector","_options","_isString","el","querySelectorAll","getElementById","substr","getElementsByClassName","prefixObjectKeys","object","prefix","blacklist","obj","isBlacklisted","jsonStringifyObjectValues","_isPlainObject","_isArray","JSON","stringify","_unused","getScrollDepth","scrollHeight","body","scrollDepth","scrollY","innerHeight","callCallback","action","console","error","stack","matchesElement","matcher","some","sel","matches","findParentElement","elem","tagName","parentNode","getDOMPath","count","childNodes","siblingElement","nodeName","toLowerCase","hasAttribute","unshift","join","onClick","srcElement","getAttribute","onMouseDown","onMouseMove","onScroll","_throttle","onPageStateChange","noop","WoopraAction","woopra","params","meta","update","lastArg","_extends","$action","cancelAction","baseClamp","number","lower","upper","INFINITY","symbolProto","symbolToString","baseToString","array","iteratee","arrayMap","MAX_INTEGER","toInteger","toFinite","remainder","hasItem","sKey","encodeURIComponent","cookie","decodeURIComponent","aKeys","split","nLen","nIdx","sPath","sDomain","sValue","vEnd","bSecure","sExpires","Number","Infinity","String","toUTCString","TYPE_BUTTON","TYPE_SUBMIT","TYPE_RESET","removeScript","script","removeChild","Woopra","getHostname","location","docCookies","property","historyReplaceState","history","replaceState","data","title","url","hideUrlParams","regex","href","getUrlParams","vars","m","buildUrlParams","p","getCustomData","method","getDomain","hostname","domain","lastIndexOf","getHostnameNoWww","isOutgoingLink","targetHostname","currentHostname","currentDomain","startsWith","hideCrossDomainId","mapQueryParams","mapping","redirect","link","getCampaignData","campaign","hideCampaignData","leftClick","loadScript","errorCallback","_noop","createElement","async","onreadystatechange","onload","onerror","readyState","src","appendChild","head","serializeForm","form","exclude","elements","name","checked","j","selected","_on","_fire","attachEvent","position","endsWith","end","Tracker","_this$options","visitorData","sessionData","orgData","_isFunction","navigator","sendBeacon","setDate","getDate","idle","last_activity","loaded","dirtyCookie","sentCampaign","version","pending","beaconQueue","lastAction","init","_processQueue","_setupCookie","_bindEvents","config","_wpt","__woo","_w","_e","events","url_id","getUrlId","getCookie","setItem","_this2","downloaded","onLink","l","moved","outgoing","autoDecorate","_dataSetter","dataStore","_isObject","getVisitorUrlData","identify","getItem","getProtocol","protocol","getEndpoint","Error","thirdPartyPath","region","endpoint","visit","orgKey","orgValue","visitorProperties","identifyOrg","funcName","_push","_meta","_this3","types","lifecycle","getOptionParams","eventName","close","timeout","_step","rawData","_iterator","_createForOfIteratorHelperLoose","done","_step$value","original","alias","eventData","_types$i","newData","org","contextData","fullEventData","dirty","Boolean","useBeacon","isUnloading","retrack","beforeCallback","item","queue","sendBeacons","scriptUrl","track","hash","onSuccess","onBeforeSend","onError","getPageUrl","getPageTitle","getDomainName","uri","getURI","returning","getPageHash","augmentAction","startPing","idptnc","_eventData","_step2","project","_iterator2","_step2$value","_this$lastAction","hasCancelled","_extends2","trackForm","els","_this4","bindEl","ev","props","trackFormHandler","trackFinished","properties","personData","noSubmit","setAttribute","stopPropagation","timer","submit","trackClick","_this5","trackClickHandler","noNav","click","_this6","pingInterval","setInterval","ping","stopPing","clearInterval","_updateDurations","updateDuration","_ref2","_ref3","_ref4","_ref","_processLifecycle","_extends5","_this7","toRetrack","_extends3","filter","successCallback","_extends4","_drainBeaconQueue","_this8","useCookies","isEmptyBeaconParams","rest","_objectWithoutPropertiesLoose","_toPropertyKey","idMap","toSend","items","_this8$lastAction","duration","round","payloads","_ref5","line","Blob","size","payload","formData","FormData","append","sleep","_touch","clickTarget","customProperties","getAttributeNames","text","innerText","textContent","tagname","classname","className","pointerType","downloadTypes","isDownloadFileType","pathname","onUnload","pv","xdm","canDecorate","domains","decorated","decorate","reset","removeItem","query","host","search","port","undecorate","_url","getElementsByTagName","innerHTML","match","o","screen","width","height","language","browserLanguage","app","referer","referrer","_warn","ip","dispose","WoopraTracker","WoopraLoadScript","exports","woopraLoaded","_queue","woopraTracker"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,21,22,23,24,25,26,29,31,32,33,34,35,36,41,42]} \ No newline at end of file +{"version":3,"file":"w.js","sources":["../node_modules/lodash-es/isUndefined.js","../node_modules/lodash-es/_freeGlobal.js","../node_modules/lodash-es/_root.js","../node_modules/lodash-es/_Symbol.js","../node_modules/lodash-es/_getRawTag.js","../node_modules/lodash-es/_objectToString.js","../node_modules/lodash-es/_baseGetTag.js","../node_modules/lodash-es/isObject.js","../node_modules/lodash-es/isFunction.js","../node_modules/lodash-es/now.js","../node_modules/lodash-es/_trimmedEndIndex.js","../node_modules/lodash-es/_baseTrim.js","../node_modules/lodash-es/isObjectLike.js","../node_modules/lodash-es/isSymbol.js","../node_modules/lodash-es/toNumber.js","../node_modules/lodash-es/debounce.js","../node_modules/lodash-es/throttle.js","../src/constants.js","../src/globals.js","../src/lib/events.js","../src/lib/page-lifecycle.js","../node_modules/lodash-es/isArray.js","../node_modules/lodash-es/isString.js","../node_modules/lodash-es/_getPrototype.js","../node_modules/lodash-es/_overArg.js","../node_modules/lodash-es/isPlainObject.js","../node_modules/lodash-es/isFinite.js","../src/lib/utils.js","../src/lib/global-events.js","../node_modules/lodash-es/noop.js","../src/action.js","../node_modules/lodash-es/_baseClamp.js","../node_modules/lodash-es/_baseToString.js","../node_modules/lodash-es/_arrayMap.js","../node_modules/lodash-es/toFinite.js","../node_modules/lodash-es/toInteger.js","../node_modules/lodash-es/toString.js","../src/lib/cookies.js","../src/lib/form.js","../src/lib/script.js","../src/woopra.js","../node_modules/lodash-es/startsWith.js","../node_modules/lodash-es/endsWith.js","../src/tracker.js","../src/index.js"],"sourcesContent":["/**\n * Checks if `value` is `undefined`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n * @example\n *\n * _.isUndefined(void 0);\n * // => true\n *\n * _.isUndefined(null);\n * // => false\n */\nfunction isUndefined(value) {\n return value === undefined;\n}\n\nexport default isUndefined;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nexport default freeGlobal;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nexport default root;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nexport default Symbol;\n","import Symbol from './_Symbol.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nexport default getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nexport default objectToString;\n","import Symbol from './_Symbol.js';\nimport getRawTag from './_getRawTag.js';\nimport objectToString from './_objectToString.js';\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nexport default baseGetTag;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nexport default isObject;\n","import baseGetTag from './_baseGetTag.js';\nimport isObject from './isObject.js';\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nexport default isFunction;\n","import root from './_root.js';\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nexport default now;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\nexport default trimmedEndIndex;\n","import trimmedEndIndex from './_trimmedEndIndex.js';\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nexport default baseTrim;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nexport default isObjectLike;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nexport default isSymbol;\n","import baseTrim from './_baseTrim.js';\nimport isObject from './isObject.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nexport default toNumber;\n","import isObject from './isObject.js';\nimport now from './now.js';\nimport toNumber from './toNumber.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nexport default debounce;\n","import debounce from './debounce.js';\nimport isObject from './isObject.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\nfunction throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n}\n\nexport default throttle;\n","export const VERSION = 11;\nexport const REGION_EU = 'eu';\nexport const REGION_KR = 'kr';\nexport const REGION_US = 'us';\nexport const ENDPOINTS = {\n [REGION_EU]: 'www.woopra.com/track/',\n [REGION_KR]: 'kr.track.airis.appier.net/track/',\n [REGION_US]: 'us.track.airis.appier.net/track/'\n};\nexport const XDM_PARAM_NAME = '__woopraid';\nexport const CAMPAIGN_KEYS = [\n 'campaign',\n 'content',\n 'id',\n 'medium',\n 'source',\n 'term'\n];\nexport const SECOND_LEVEL_TLDS = [\n 'com.au',\n 'net.au',\n 'org.au',\n 'co.hu',\n 'com.ru',\n 'ac.za',\n 'net.za',\n 'com.za',\n 'co.za',\n 'co.uk',\n 'org.uk',\n 'me.uk',\n 'net.uk'\n];\nexport const RANDOM_STRING_CHARS =\n '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';\nexport const MIN_PING_INTERVAL = 6_000;\nexport const MAX_PING_INTERVAL = 60_000;\nexport const URL_ID_REGEX = new RegExp(XDM_PARAM_NAME + '=([^&#]+)');\n\nexport const LIFECYCLE_ACTION = 'action';\nexport const LIFECYCLE_PAGE = 'page';\n\nexport const SCROLL_DEPTH = 'scroll depth';\n\nexport const ACTION_PV = 'pv';\n\nexport const IDPTNC = 'idptnc';\n\nexport const TARGET_BLANK = '_blank';\n\nexport const DATA_TRACKED_ATTRIBUTE = 'data-tracked';\n\nexport const ACTION_PROPERTY_PREFIX = 'ce_';\nexport const VISIT_PROPERTY_PREFIX = 'cs_';\nexport const VISITOR_PROPERTY_PREFIX = 'cv_';\nexport const ORG_PROPERTY_PREFIX = 'co_';\n\nexport const ENDPOINT_TRACK = 'ce';\nexport const ENDPOINT_UPDATE = 'update';\nexport const ENDPOINT_IDENTIFY = 'identify';\n\nexport const PAGE_LIFECYCLE_STATE_ACTIVE = 'active';\nexport const PAGE_LIFECYCLE_STATE_PASSIVE = 'passive';\nexport const PAGE_LIFECYCLE_STATE_HIDDEN = 'hidden';\nexport const PAGE_LIFECYCLE_STATE_FROZEN = 'frozen';\nexport const PAGE_LIFECYCLE_STATE_TERMINATED = 'terminated';\n\nexport const EVENT_BEFOREUNLOAD = 'beforeunload';\nexport const EVENT_BLUR = 'blur';\nexport const EVENT_CLICK = 'click';\nexport const EVENT_DOWNLOAD = 'download';\nexport const EVENT_FOCUS = 'focus';\nexport const EVENT_FREEZE = 'freeze';\nexport const EVENT_LINK_CLICK = 'link';\nexport const EVENT_MOUSEDOWN = 'mousedown';\nexport const EVENT_MOUSEMOVE = 'mousemove';\nexport const EVENT_OUTGOING = 'outgoing';\nexport const EVENT_PAGEHIDE = 'pagehide';\nexport const EVENT_PAGESHOW = 'pageshow';\nexport const EVENT_RESUME = 'resume';\nexport const EVENT_SCROLL = 'scroll';\nexport const EVENT_STATECHANGE = 'statechange';\nexport const EVENT_UNLOAD = 'unload';\nexport const EVENT_VISIBILITYCHANGE = 'visibilitychange';\n\nexport const KEY_APP = 'app';\nexport const KEY_APPIER_APP_ID = 'appier_app_id';\nexport const KEY_AUGMENT_ACTION = 'augment_action';\nexport const KEY_AUTO_DECORATE = 'auto_decorate';\nexport const KEY_BEACONS = 'beacons';\nexport const KEY_CAMPAIGN_ONCE = 'campaign_once';\nexport const KEY_CLICK_TRACKING_MATCHER_SELECTORS =\n 'click_tracking_matcher_selectors';\nexport const KEY_CLICK_PAUSE = 'click_pause';\nexport const KEY_CLICK_TRACKING = 'click_tracking';\nexport const KEY_CONTEXT = 'context';\nexport const KEY_COOKIE_DOMAIN = 'cookie_domain';\nexport const KEY_COOKIE_EXPIRE = 'cookie_expire';\nexport const KEY_COOKIE_NAME = 'cookie_name';\nexport const KEY_COOKIE_PATH = 'cookie_path';\nexport const KEY_COOKIE_SECURE = 'cookie_secure';\nexport const KEY_CROSS_DOMAIN = 'cross_domain';\nexport const KEY_DOMAIN = 'domain';\nexport const KEY_DOWNLOAD_EXTENSIONS = 'download_extensions';\nexport const KEY_DOWNLOAD_PAUSE = 'download_pause';\nexport const KEY_DOWNLOAD_TRACKING = 'download_tracking';\nexport const KEY_FORM_PAUSE = 'form_pause';\nexport const KEY_HIDE_CAMPAIGN = 'hide_campaign';\nexport const KEY_HIDE_XDM_DATA = 'hide_xdm_data';\nexport const KEY_IDLE_THRESHOLD = 'idle_threshold';\nexport const KEY_IDLE_TIMEOUT = 'idle_timeout';\nexport const KEY_IGNORE_QUERY_URL = 'ignore_query_url';\nexport const KEY_IP = 'ip';\nexport const KEY_MAP_QUERY_PARAMS = 'map_query_params';\nexport const KEY_OUTGOING_IGNORE_SUBDOMAIN = 'outgoing_ignore_subdomain';\nexport const KEY_OUTGOING_PAUSE = 'outgoing_pause';\nexport const KEY_OUTGOING_TRACKING = 'outgoing_tracking';\nexport const KEY_PERSONALIZATION = 'personalization';\nexport const KEY_PING = 'ping';\nexport const KEY_PING_INTERVAL = 'ping_interval';\nexport const KEY_PROTOCOL = 'protocol';\nexport const KEY_REGION = 'region';\nexport const KEY_SAVE_URL_HASH = 'save_url_hash';\nexport const KEY_THIRD_PARTY = 'third_party';\nexport const KEY_USE_COOKIES = 'use_cookies';\n\nexport const META_CANCELLED = 'cancelled';\nexport const META_DIRTY = 'dirty';\nexport const META_DURATION = 'duration';\nexport const META_EXPIRED = 'expired';\nexport const META_LEAVE = 'leave';\nexport const META_RETRACK = 'retrack';\nexport const META_SENT = 'sent';\nexport const META_TIMESTAMP = 'timestamp';\n\nexport const ACTION_PROPERTY_ALIASES = [\n [IDPTNC, IDPTNC],\n ['$duration', 'duration'],\n ['$domain', KEY_DOMAIN],\n ['$app', KEY_APP],\n ['$timestamp', 'timestamp'],\n ['$action', 'event'],\n [KEY_APPIER_APP_ID, KEY_APPIER_APP_ID]\n];\n\nexport const DEFAULT_DOWNLOAD_EXTENSIONS = [\n 'avi',\n 'css',\n 'dmg',\n 'doc',\n 'eps',\n 'exe',\n 'js',\n 'm4v',\n 'mov',\n 'mp3',\n 'mp4',\n 'msi',\n 'pdf',\n 'ppt',\n 'rar',\n 'svg',\n 'txt',\n 'vsd',\n 'vxd',\n 'wma',\n 'wmv',\n 'xls',\n 'xlsx',\n 'zip'\n];\n\nexport const ELEMENT_MATCHER_LINK = ['a'];\n\nexport const ELEMENT_MATCHER_CLICK = [\n 'a',\n 'button',\n 'input[type=button]',\n 'input[type=submit]',\n '[role=button]'\n];\n","import {\n KEY_AUTO_DECORATE,\n KEY_DOWNLOAD_TRACKING,\n KEY_OUTGOING_IGNORE_SUBDOMAIN,\n KEY_OUTGOING_TRACKING\n} from './constants';\n\nexport default {\n [KEY_AUTO_DECORATE]: undefined,\n [KEY_DOWNLOAD_TRACKING]: false,\n [KEY_OUTGOING_IGNORE_SUBDOMAIN]: true,\n [KEY_OUTGOING_TRACKING]: false\n};\n","const handlers = {};\n\nexport function removeHandler(id, instance) {\n handlers[id][instance] = null;\n}\n\nexport function addEventListener(element, type, callback) {\n if (element?.addEventListener) {\n element.addEventListener(type, callback);\n }\n}\n\nexport function on(parent, event, callback) {\n const id = parent.instanceName;\n\n if (!handlers[event]) {\n handlers[event] = {};\n }\n handlers[event][id] = parent;\n\n if (parent.__l) {\n if (!parent.__l[event]) {\n parent.__l[event] = [];\n }\n parent.__l[event].push(callback);\n }\n}\n\nexport function fire(event) {\n let handler;\n const _event = handlers[event];\n let _l;\n\n if (_event) {\n for (const id in _event) {\n if (_event.hasOwnProperty(id)) {\n handler = _event[id];\n _l = handler && handler.__l;\n if (_l && _l[event]) {\n for (let i = 0; i < _l[event].length; i++) {\n _l[event][i].apply(this, Array.prototype.slice.call(arguments, 1));\n }\n }\n }\n }\n }\n}\n","/*\n Copyright 2018 Google Inc. All Rights Reserved.\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n http://www.apache.org/licenses/LICENSE-2.0\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n Modifications Copyright (c) 2022 Woopra, Inc.\n*/\n\n/**\n * Original source: https://github.com/GoogleChromeLabs/page-lifecycle\n * MODIFICATIONS:\n * - inline imports\n * - always use shims\n * - use constants in place of string literals\n */\n\nimport {\n EVENT_BEFOREUNLOAD,\n EVENT_BLUR,\n EVENT_FOCUS,\n EVENT_FREEZE,\n EVENT_PAGEHIDE,\n EVENT_PAGESHOW,\n EVENT_RESUME,\n EVENT_UNLOAD,\n EVENT_VISIBILITYCHANGE,\n PAGE_LIFECYCLE_STATE_ACTIVE,\n PAGE_LIFECYCLE_STATE_FROZEN,\n PAGE_LIFECYCLE_STATE_HIDDEN,\n PAGE_LIFECYCLE_STATE_PASSIVE,\n PAGE_LIFECYCLE_STATE_TERMINATED\n} from '../constants';\n\nclass EventTargetShim {\n /**\n * Creates the event registry.\n */\n constructor() {\n this._registry = {};\n }\n\n /**\n * @param {string} type\n * @param {EventListener|function(!Event):(boolean|undefined)} listener\n * @param {(boolean|!AddEventListenerOptions)=} opts\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-eventtarget-addeventlistener\n */\n addEventListener(type, listener, opts = false) {\n this._getRegistry(type).push(listener);\n }\n\n /**\n * @param {string} type\n * @param {EventListener|function(!Event):(boolean|undefined)} listener\n * @param {(boolean|!EventListenerOptions)=} opts\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-eventtarget-removeeventlistener\n */\n removeEventListener(type, listener, opts = false) {\n const typeRegistry = this._getRegistry(type);\n const handlerIndex = typeRegistry.indexOf(listener);\n if (handlerIndex > -1) {\n typeRegistry.splice(handlerIndex, 1);\n }\n }\n\n /**\n * @param {!Event|!EventShim} evt\n * @return {boolean}\n * @see https://dom.spec.whatwg.org/#dom-eventtarget-dispatchevent\n */\n dispatchEvent(evt) {\n // Set the target then freeze the event object to prevent modification.\n evt.target = this;\n Object.freeze(evt);\n\n this._getRegistry(evt.type).forEach((listener) => listener(evt));\n return true;\n }\n\n /**\n * Returns an array of handlers associated with the passed event type.\n * If no handlers have been registered, an empty array is returned.\n * @private\n * @param {string} type The event type.\n * @return {!Array} An array of handler functions.\n */\n _getRegistry(type) {\n return (this._registry[type] = this._registry[type] || []);\n }\n}\n\nclass StateChangeEvent {\n constructor(type, initDict) {\n this.type = type;\n this.newState = initDict.newState;\n this.oldState = initDict.oldState;\n this.originalEvent = initDict.originalEvent;\n }\n}\n\n// Detect Safari to work around Safari-specific bugs.\nconst IS_SAFARI = typeof safari === 'object' && safari.pushNotification;\n\nconst SUPPORTS_PAGE_TRANSITION_EVENTS = 'onpageshow' in self;\n\nconst EVENTS = [\n EVENT_FOCUS,\n EVENT_BLUR,\n EVENT_VISIBILITYCHANGE,\n EVENT_FREEZE,\n EVENT_RESUME,\n EVENT_PAGESHOW,\n // IE9-10 do not support the pagehide event, so we fall back to unload\n // Note: unload *MUST ONLY* be added conditionally, otherwise it will\n // prevent page navigation caching (a.k.a bfcache).\n SUPPORTS_PAGE_TRANSITION_EVENTS ? EVENT_PAGEHIDE : EVENT_UNLOAD\n];\n\n/**\n * @param {!Event} evt\n * @return {string}\n */\nconst onbeforeunload = (evt) => {\n evt.preventDefault();\n return (evt.returnValue = 'Are you sure?');\n};\n\n/**\n * Converts an array of states into an object where the state is the key\n * and the value is the index.\n * @param {!Array} arr\n * @return {!Object}\n */\nconst toIndexedObject = (arr) =>\n arr.reduce((acc, val, idx) => {\n acc[val] = idx;\n return acc;\n }, {});\n\n/**\n * @type {!Array}\n */\nconst LEGAL_STATE_TRANSITIONS = [\n // The normal unload process (bfcache process is addressed above).\n [\n PAGE_LIFECYCLE_STATE_ACTIVE,\n PAGE_LIFECYCLE_STATE_PASSIVE,\n PAGE_LIFECYCLE_STATE_HIDDEN,\n PAGE_LIFECYCLE_STATE_TERMINATED\n ],\n\n // An active page transitioning to frozen,\n // or an unloading page going into the bfcache.\n [\n PAGE_LIFECYCLE_STATE_ACTIVE,\n PAGE_LIFECYCLE_STATE_PASSIVE,\n PAGE_LIFECYCLE_STATE_HIDDEN,\n PAGE_LIFECYCLE_STATE_FROZEN\n ],\n\n // A hidden page transitioning back to active.\n [\n PAGE_LIFECYCLE_STATE_HIDDEN,\n PAGE_LIFECYCLE_STATE_PASSIVE,\n PAGE_LIFECYCLE_STATE_ACTIVE\n ],\n\n // A frozen page being resumed\n [PAGE_LIFECYCLE_STATE_FROZEN, PAGE_LIFECYCLE_STATE_HIDDEN],\n\n // A frozen (bfcached) page navigated back to\n // Note: [FROZEN, HIDDEN] can happen here, but it's already covered above.\n [PAGE_LIFECYCLE_STATE_FROZEN, PAGE_LIFECYCLE_STATE_ACTIVE],\n [PAGE_LIFECYCLE_STATE_FROZEN, PAGE_LIFECYCLE_STATE_PASSIVE]\n].map(toIndexedObject);\n\n/**\n * Accepts a current state and a future state and returns an array of legal\n * state transition paths. This is needed to normalize behavior across browsers\n * since some browsers do not fire events in certain cases and thus skip\n * states.\n * @param {string} oldState\n * @param {string} newState\n * @return {!Array}\n */\nconst getLegalStateTransitionPath = (oldState, newState) => {\n // We're intentionally not using for...of here so when we transpile to ES5\n // we don't need to include the Symbol polyfills.\n for (let order, i = 0; (order = LEGAL_STATE_TRANSITIONS[i]); ++i) {\n const oldIndex = order[oldState];\n const newIndex = order[newState];\n\n if (oldIndex >= 0 && newIndex >= 0 && newIndex > oldIndex) {\n // Differences greater than one should be reported\n // because it means a state was skipped.\n return Object.keys(order).slice(oldIndex, newIndex + 1);\n }\n }\n return [];\n // TODO(philipwalton): it shouldn't be possible to get here, but\n // consider some kind of warning or call to action if it happens.\n // console.warn(`Invalid state change detected: ${oldState} > ${newState}`);\n};\n\n/**\n * Returns the current state based on the document's visibility and\n * in input focus states. Note this method is only used to determine\n * active vs passive vs hidden states, as other states require listening\n * for events.\n * @return {string}\n */\nconst getCurrentState = () => {\n if (document.visibilityState === PAGE_LIFECYCLE_STATE_HIDDEN) {\n return PAGE_LIFECYCLE_STATE_HIDDEN;\n }\n if (document.hasFocus()) {\n return PAGE_LIFECYCLE_STATE_ACTIVE;\n }\n return PAGE_LIFECYCLE_STATE_PASSIVE;\n};\n\n/**\n * Class definition for the exported, singleton lifecycle instance.\n */\nclass PageLifecycle extends EventTargetShim {\n /**\n * Initializes state, state history, and adds event listeners to monitor\n * state changes.\n */\n constructor() {\n super();\n\n const state = getCurrentState();\n\n this._state = state;\n this._unsavedChanges = [];\n\n // Bind the callback and add event listeners.\n this._handleEvents = this._handleEvents.bind(this);\n\n // Add capturing events on window so they run immediately.\n EVENTS.forEach((evt) => addEventListener(evt, this._handleEvents, true));\n\n // Safari does not reliably fire the `pagehide` or `visibilitychange`\n // events when closing a tab, so we have to use `beforeunload` with a\n // timeout to check whether the default action was prevented.\n // - https://bugs.webkit.org/show_bug.cgi?id=151610\n // - https://bugs.webkit.org/show_bug.cgi?id=151234\n // NOTE: we only add this to Safari because adding it to Firefox would\n // prevent the page from being eligible for bfcache.\n if (IS_SAFARI) {\n addEventListener(EVENT_BEFOREUNLOAD, (evt) => {\n this._safariBeforeUnloadTimeout = setTimeout(() => {\n if (!(evt.defaultPrevented || evt.returnValue.length > 0)) {\n this._dispatchChangesIfNeeded(evt, PAGE_LIFECYCLE_STATE_HIDDEN);\n }\n }, 0);\n });\n }\n }\n\n /**\n * @return {string}\n */\n get state() {\n return this._state;\n }\n\n /**\n * Returns the value of document.wasDiscarded. This is arguably unnecessary\n * but I think there's value in having the entire API in one place and\n * consistent across browsers.\n * @return {boolean}\n */\n get pageWasDiscarded() {\n return document.wasDiscarded || false;\n }\n\n /**\n * @param {Symbol|Object} id A unique symbol or object identifying the\n *. pending state. This ID is required when removing the state later.\n */\n addUnsavedChanges(id) {\n // Don't add duplicate state. Note: ideally this would be a set, but for\n // better browser compatibility we're using an array.\n if (!this._unsavedChanges.indexOf(id) > -1) {\n // If this is the first state being added,\n // also add a beforeunload listener.\n if (this._unsavedChanges.length === 0) {\n addEventListener(EVENT_BEFOREUNLOAD, onbeforeunload);\n }\n this._unsavedChanges.push(id);\n }\n }\n\n /**\n * @param {Symbol|Object} id A unique symbol or object identifying the\n *. pending state. This ID is required when removing the state later.\n */\n removeUnsavedChanges(id) {\n const idIndex = this._unsavedChanges.indexOf(id);\n\n if (idIndex > -1) {\n this._unsavedChanges.splice(idIndex, 1);\n\n // If there's no more pending state, remove the event listener.\n if (this._unsavedChanges.length === 0) {\n removeEventListener(EVENT_BEFOREUNLOAD, onbeforeunload);\n }\n }\n }\n\n /**\n * @private\n * @param {!Event} originalEvent\n * @param {string} newState\n */\n _dispatchChangesIfNeeded(originalEvent, newState) {\n if (newState !== this._state) {\n const oldState = this._state;\n const path = getLegalStateTransitionPath(oldState, newState);\n\n for (let i = 0; i < path.length - 1; ++i) {\n const oldState = path[i];\n const newState = path[i + 1];\n\n this._state = newState;\n this.dispatchEvent(\n new StateChangeEvent('statechange', {\n oldState,\n newState,\n originalEvent\n })\n );\n }\n }\n }\n\n /**\n * @private\n * @param {!Event} evt\n */\n _handleEvents(evt) {\n if (IS_SAFARI) {\n clearTimeout(this._safariBeforeUnloadTimeout);\n }\n\n switch (evt.type) {\n case EVENT_PAGESHOW:\n case EVENT_RESUME:\n this._dispatchChangesIfNeeded(evt, getCurrentState());\n break;\n case EVENT_FOCUS:\n this._dispatchChangesIfNeeded(evt, PAGE_LIFECYCLE_STATE_ACTIVE);\n break;\n case EVENT_BLUR:\n // The `blur` event can fire while the page is being unloaded, so we\n // only need to update the state if the current state is \"active\".\n if (this._state === PAGE_LIFECYCLE_STATE_ACTIVE) {\n this._dispatchChangesIfNeeded(evt, getCurrentState());\n }\n break;\n case EVENT_PAGEHIDE:\n case EVENT_UNLOAD:\n this._dispatchChangesIfNeeded(\n evt,\n evt.persisted\n ? PAGE_LIFECYCLE_STATE_FROZEN\n : PAGE_LIFECYCLE_STATE_TERMINATED\n );\n break;\n case EVENT_VISIBILITYCHANGE:\n // The document's `visibilityState` will change to hidden as the page\n // is being unloaded, but in such cases the lifecycle state shouldn't\n // change.\n if (\n this._state !== PAGE_LIFECYCLE_STATE_FROZEN &&\n this._state !== PAGE_LIFECYCLE_STATE_TERMINATED\n ) {\n this._dispatchChangesIfNeeded(evt, getCurrentState());\n }\n break;\n case EVENT_FREEZE:\n this._dispatchChangesIfNeeded(evt, PAGE_LIFECYCLE_STATE_FROZEN);\n break;\n }\n }\n}\n\nexport default new PageLifecycle();\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nexport default isArray;\n","import baseGetTag from './_baseGetTag.js';\nimport isArray from './isArray.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar stringTag = '[object String]';\n\n/**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\nfunction isString(value) {\n return typeof value == 'string' ||\n (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n}\n\nexport default isString;\n","import overArg from './_overArg.js';\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nexport default getPrototype;\n","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\nexport default overArg;\n","import baseGetTag from './_baseGetTag.js';\nimport getPrototype from './_getPrototype.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n}\n\nexport default isPlainObject;\n","import root from './_root.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsFinite = root.isFinite;\n\n/**\n * Checks if `value` is a finite primitive number.\n *\n * **Note:** This method is based on\n * [`Number.isFinite`](https://mdn.io/Number/isFinite).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.\n * @example\n *\n * _.isFinite(3);\n * // => true\n *\n * _.isFinite(Number.MIN_VALUE);\n * // => true\n *\n * _.isFinite(Infinity);\n * // => false\n *\n * _.isFinite('3');\n * // => false\n */\nfunction isFinite(value) {\n return typeof value == 'number' && nativeIsFinite(value);\n}\n\nexport default isFinite;\n","import {\n isArray,\n isFinite,\n isFunction,\n isPlainObject,\n isString,\n isUndefined\n} from 'lodash-es';\n\nimport { RANDOM_STRING_CHARS } from '../constants';\n\n/**\n * Generates a random 12 character string\n *\n * @return {String} Returns a random 12 character string\n */\nexport function randomString() {\n let s = '';\n\n for (let i = 0; i < 12; i++) {\n const rnum = Math.floor(Math.random() * RANDOM_STRING_CHARS.length);\n s += RANDOM_STRING_CHARS.substring(rnum, rnum + 1);\n }\n\n return s;\n}\n\nexport function isLeftClick(evt = window.event) {\n const button =\n (!isUndefined(evt.which) && evt.which === 1) ||\n (!isUndefined(evt.button) && evt.button === 0);\n return button && !evt.metaKey && !evt.altKey && !evt.ctrlKey && !evt.shiftKey;\n}\n\n/**\n * Helper to either query an element by id, or return element if passed\n * through options\n *\n * Supports searching by ids and classnames (or querySelector if browser supported)\n */\nexport function getElement(selector, options) {\n const _options = isString(selector) ? options || {} : selector || {};\n\n if (_options.el) {\n return _options.el;\n } else if (isString(selector)) {\n if (document.querySelectorAll) {\n return document.querySelectorAll(selector);\n } else if (selector[0] === '#') {\n return document.getElementById(selector.substr(1));\n } else if (selector[0] === '.') {\n return document.getElementsByClassName(selector.substr(1));\n }\n }\n}\n\nexport function prefixObjectKeys(object, prefix, blacklist) {\n const obj = {};\n\n if (isUndefined(object)) return obj;\n\n for (const key in object) {\n if (object.hasOwnProperty(key)) {\n const value = object[key];\n\n let isBlacklisted = false;\n\n for (let i = 0; i < blacklist.length; i++) {\n if (blacklist[i][0] === key) {\n isBlacklisted = true;\n break;\n }\n }\n\n if (\n !isBlacklisted &&\n value !== 'undefined' &&\n value !== 'null' &&\n !isUndefined(value)\n ) {\n obj[`${prefix}${key}`] = value;\n }\n }\n }\n\n return obj;\n}\n\nexport function jsonStringifyObjectValues(object) {\n const obj = {};\n\n if (isUndefined(object)) return obj;\n\n for (const key in object) {\n if (object.hasOwnProperty(key)) {\n if (isPlainObject(object[key]) || isArray(object[key])) {\n try {\n obj[key] = JSON.stringify(object[key]);\n } catch {\n obj[key] = object[key];\n }\n } else obj[key] = object[key];\n }\n }\n\n return obj;\n}\n\nexport function getScrollDepth() {\n const { scrollHeight } = document.body;\n\n const scrollDepth =\n ((window.scrollY || 0) + window.innerHeight) / scrollHeight;\n\n return Math.max(0, Math.min(1, isFinite(scrollDepth) ? scrollDepth : 0));\n}\n\nexport function callCallback(callback, action) {\n try {\n callback();\n } catch (e) {\n console.error(`Error in Woopra ${action} callback`); // eslint-disable-line no-console\n console.error(e.stack); // eslint-disable-line no-console\n }\n}\n\nfunction matchesElement(element, matcher) {\n return matcher.some((sel) => element.matches(sel));\n}\n\nexport function findParentElement(element, matcher) {\n let elem = element;\n\n while (!isUndefined(elem) && elem !== null) {\n if (elem.tagName && matchesElement(elem, matcher)) break;\n\n elem = elem.parentNode;\n }\n\n return elem;\n}\n\nexport function hasBeaconSupport() {\n return isFunction(navigator.sendBeacon);\n}\n\nexport function getDOMPath(element) {\n const stack = [];\n\n let elem = element;\n\n while (elem.parentNode) {\n let count = 0;\n let index = 0;\n\n for (let i = 0; i < elem.parentNode.childNodes.length; i++) {\n const siblingElement = elem.parentNode.childNodes[i];\n\n if (siblingElement.nodeName === elem.nodeName) {\n if (siblingElement === elem) index = count;\n\n count++;\n }\n }\n\n const nodeName = elem.nodeName.toLowerCase();\n\n if (elem.hasAttribute('id') && elem.id) {\n stack.unshift(`${nodeName}#${elem.id}`);\n } else if (count > 1) {\n stack.unshift(`${nodeName}[${index}]`);\n } else {\n stack.unshift(nodeName);\n }\n\n elem = elem.parentNode;\n }\n\n return stack.slice(1).join(' > ');\n}\n","import { isUndefined, throttle } from 'lodash-es';\n\nimport {\n DATA_TRACKED_ATTRIBUTE,\n ELEMENT_MATCHER_LINK,\n EVENT_CLICK,\n EVENT_LINK_CLICK,\n EVENT_MOUSEDOWN,\n EVENT_MOUSEMOVE,\n EVENT_SCROLL,\n EVENT_STATECHANGE,\n KEY_AUTO_DECORATE,\n KEY_DOWNLOAD_TRACKING,\n KEY_OUTGOING_TRACKING\n} from '../constants';\nimport globals from '../globals';\nimport { addEventListener, fire } from './events';\nimport PageLifecycle from './page-lifecycle';\nimport { findParentElement, isLeftClick } from './utils';\n\nfunction onClick(e) {\n let elem = e.srcElement || e.target;\n\n if (isLeftClick(e)) {\n fire(EVENT_CLICK, e, elem);\n }\n\n if (globals[KEY_DOWNLOAD_TRACKING] || globals[KEY_OUTGOING_TRACKING]) {\n elem = findParentElement(e.srcElement || e.target, ELEMENT_MATCHER_LINK);\n\n if (\n !isUndefined(elem) &&\n elem !== null &&\n !elem.getAttribute(DATA_TRACKED_ATTRIBUTE)\n ) {\n fire(EVENT_LINK_CLICK, e, elem);\n }\n }\n}\n\nfunction onMouseDown(e) {\n let elem;\n\n fire(EVENT_MOUSEMOVE, e, Date.now());\n\n if (globals[KEY_AUTO_DECORATE]) {\n elem = findParentElement(e.srcElement || e.target, ELEMENT_MATCHER_LINK);\n\n if (!isUndefined(elem) && elem !== null) {\n fire(KEY_AUTO_DECORATE, elem);\n }\n }\n}\n\nfunction onMouseMove(e) {\n fire(EVENT_MOUSEMOVE, e, Date.now());\n}\n\nconst onScroll = throttle(function onScroll(e) {\n fire(EVENT_SCROLL, e);\n}, 500);\n\nfunction onPageStateChange(e) {\n fire(EVENT_STATECHANGE, e);\n}\n\nconst CAPTURE = { capture: true };\nconst CAPTURE_PASSIVE = { capture: true, passive: true };\n\n// attaches events\n// needs to be handled here, instead of in a tracking instance because\n// these events should only be fired once on a page\nexport default function attachGlobalEvents() {\n addEventListener(document, EVENT_CLICK, onClick, CAPTURE);\n addEventListener(document, EVENT_MOUSEDOWN, onMouseDown, CAPTURE);\n addEventListener(document, EVENT_MOUSEMOVE, onMouseMove, CAPTURE_PASSIVE);\n addEventListener(window, EVENT_SCROLL, onScroll, CAPTURE_PASSIVE);\n\n PageLifecycle.addEventListener(EVENT_STATECHANGE, onPageStateChange);\n}\n","/**\n * This method returns `undefined`.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Util\n * @example\n *\n * _.times(2, _.noop);\n * // => [undefined, undefined]\n */\nfunction noop() {\n // No operation performed.\n}\n\nexport default noop;\n","export default class WoopraAction {\n constructor(woopra, id, params, meta) {\n this.woopra = woopra;\n this.id = id;\n this.params = params;\n this.meta = meta;\n }\n\n update(options = {}, lastArg) {\n if (options.event && options.event !== this.params.event) {\n this.params.event = options.event;\n }\n\n this.woopra.update(\n this.id,\n { ...options, $action: this.params.event },\n lastArg\n );\n }\n\n cancel() {\n this.woopra.cancelAction(this.id);\n }\n}\n","/**\n * The base implementation of `_.clamp` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n */\nfunction baseClamp(number, lower, upper) {\n if (number === number) {\n if (upper !== undefined) {\n number = number <= upper ? number : upper;\n }\n if (lower !== undefined) {\n number = number >= lower ? number : lower;\n }\n }\n return number;\n}\n\nexport default baseClamp;\n","import Symbol from './_Symbol.js';\nimport arrayMap from './_arrayMap.js';\nimport isArray from './isArray.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nexport default baseToString;\n","/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\n\nexport default arrayMap;\n","import toNumber from './toNumber.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0,\n MAX_INTEGER = 1.7976931348623157e+308;\n\n/**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\nfunction toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === INFINITY || value === -INFINITY) {\n var sign = (value < 0 ? -1 : 1);\n return sign * MAX_INTEGER;\n }\n return value === value ? value : 0;\n}\n\nexport default toFinite;\n","import toFinite from './toFinite.js';\n\n/**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\nfunction toInteger(value) {\n var result = toFinite(value),\n remainder = result % 1;\n\n return result === result ? (remainder ? result - remainder : result) : 0;\n}\n\nexport default toInteger;\n","import baseToString from './_baseToString.js';\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\nexport default toString;\n","/*\\\n|*|\n|*| :: cookies.js ::\n|*|\n|*| A complete cookies reader/writer framework with full unicode support.\n|*|\n|*| Revision #1 - September 4, 2014\n|*|\n|*| https://developer.mozilla.org/en-US/docs/Web/API/document.cookie\n|*| https://developer.mozilla.org/User:fusionchess\n|*|\n|*| This framework is released under the GNU Public License, version 3 or later.\n|*| http://www.gnu.org/licenses/gpl-3.0-standalone.html\n|*|\n|*| Syntaxes:\n|*|\n|*| * docCookies.setItem(name, value[, end[, path[, domain[, secure]]]])\n|*| * docCookies.getItem(name)\n|*| * docCookies.removeItem(name[, path[, domain]])\n|*| * docCookies.hasItem(name)\n|*| * docCookies.keys()\n|*|\n\\*/\n\nexport function getItem(sKey) {\n if (!sKey) {\n return null;\n }\n return (\n decodeURIComponent(\n document.cookie.replace(\n new RegExp(\n '(?:(?:^|.*;)\\\\s*' +\n encodeURIComponent(sKey).replace(/[\\-\\.\\+\\*]/g, '\\\\$&') +\n '\\\\s*\\\\=\\\\s*([^;]*).*$)|^.*$'\n ),\n '$1'\n )\n ) || null\n );\n}\n\nexport function setItem(sKey, sValue, vEnd, sPath, sDomain, bSecure) {\n if (!sKey || /^(?:expires|max\\-age|path|domain|secure)$/i.test(sKey)) {\n return false;\n }\n let sExpires = '';\n if (vEnd) {\n switch (vEnd.constructor) {\n case Number:\n sExpires =\n vEnd === Infinity\n ? '; expires=Fri, 31 Dec 9999 23:59:59 GMT'\n : '; max-age=' + vEnd;\n break;\n case String:\n sExpires = '; expires=' + vEnd;\n break;\n case Date:\n sExpires = '; expires=' + vEnd.toUTCString();\n break;\n }\n }\n document.cookie =\n encodeURIComponent(sKey) +\n '=' +\n encodeURIComponent(sValue) +\n sExpires +\n (sDomain ? '; domain=' + sDomain : '') +\n (sPath ? '; path=' + sPath : '') +\n (bSecure ? '; secure' : '');\n return true;\n}\n\nexport function removeItem(sKey, sPath, sDomain) {\n if (!hasItem(sKey)) {\n return false;\n }\n document.cookie =\n encodeURIComponent(sKey) +\n '=; expires=Thu, 01 Jan 1970 00:00:00 GMT' +\n (sDomain ? '; domain=' + sDomain : '') +\n (sPath ? '; path=' + sPath : '');\n return true;\n}\n\nexport function hasItem(sKey) {\n if (!sKey) {\n return false;\n }\n return new RegExp(\n '(?:^|;\\\\s*)' +\n encodeURIComponent(sKey).replace(/[\\-\\.\\+\\*]/g, '\\\\$&') +\n '\\\\s*\\\\='\n ).test(document.cookie);\n}\n\nexport function keys() {\n const aKeys = document.cookie\n .replace(/((?:^|\\s*;)[^\\=]+)(?=;|$)|^\\s*|\\s*(?:\\=[^;]*)?(?:\\1|$)/g, '')\n .split(/\\s*(?:\\=[^;]*)?;\\s*/);\n for (let nLen = aKeys.length, nIdx = 0; nIdx < nLen; nIdx++) {\n aKeys[nIdx] = decodeURIComponent(aKeys[nIdx]);\n }\n return aKeys;\n}\n","const TYPE_BUTTON = 'button';\nconst TYPE_SUBMIT = 'submit';\nconst TYPE_RESET = 'reset';\n\n// https://code.google.com/p/form-serialize/\n// modified to return an object\nexport function serializeForm(form, options = {}) {\n if (!form || form.nodeName !== 'FORM') {\n return;\n }\n\n const exclude = options.exclude || [];\n const data = {};\n\n for (let i = form.elements.length - 1; i >= 0; i = i - 1) {\n if (\n form.elements[i].name === '' ||\n exclude.indexOf(form.elements[i].name) > -1\n ) {\n continue;\n }\n switch (form.elements[i].nodeName) {\n case 'INPUT':\n switch (form.elements[i].type) {\n case 'text':\n case 'hidden':\n case TYPE_BUTTON:\n case TYPE_RESET:\n case TYPE_SUBMIT:\n data[form.elements[i].name] = form.elements[i].value;\n break;\n case 'checkbox':\n case 'radio':\n if (form.elements[i].checked) {\n data[form.elements[i].name] = form.elements[i].value;\n }\n break;\n case 'file':\n break;\n }\n break;\n case 'TEXTAREA':\n data[form.elements[i].name] = form.elements[i].value;\n break;\n case 'SELECT':\n switch (form.elements[i].type) {\n case 'select-one':\n data[form.elements[i].name] = form.elements[i].value;\n break;\n case 'select-multiple':\n for (\n let j = form.elements[i].options.length - 1;\n j >= 0;\n j = j - 1\n ) {\n if (form.elements[i].options[j].selected) {\n data[form.elements[i].name] = form.elements[i].options[j].value;\n }\n }\n break;\n }\n break;\n case 'BUTTON':\n switch (form.elements[i].type) {\n case TYPE_RESET:\n case TYPE_SUBMIT:\n case TYPE_BUTTON:\n data[form.elements[i].name] = form.elements[i].value;\n break;\n }\n break;\n }\n }\n return data;\n}\n","import { isUndefined, noop } from 'lodash-es';\n\nexport function removeScript(script) {\n if (script && script.parentNode) {\n script.parentNode.removeChild(script);\n }\n}\n\nconst statusIsSuccessful = (readyState) =>\n readyState === 4 || readyState === 'complete' || readyState === 'loaded';\n\nexport function loadScript(url, callback = noop, errorCallback = noop) {\n const script = document.createElement('script');\n\n script.type = 'text/javascript';\n script.async = true;\n\n if (!isUndefined(script.onreadystatechange)) {\n script.onreadystatechange = function onreadystatechange() {\n if (statusIsSuccessful(this.readyState)) {\n callback();\n removeScript(script);\n }\n };\n } else {\n script.onload = () => {\n callback();\n removeScript(script);\n };\n script.onerror = (e) => {\n errorCallback(e);\n removeScript(script);\n };\n }\n\n script.src = url;\n\n if (document.body) document.body.appendChild(script);\n else document.head.appendChild(script);\n}\n","import { endsWith, isUndefined, startsWith } from 'lodash-es';\n\nimport * as docCookies from './lib/cookies';\nimport { addEventListener, fire, on } from './lib/events';\nimport { serializeForm } from './lib/form';\nimport { loadScript, removeScript } from './lib/script';\nimport { getElement, isLeftClick, randomString } from './lib/utils';\nimport {\n CAMPAIGN_KEYS,\n KEY_OUTGOING_IGNORE_SUBDOMAIN,\n SECOND_LEVEL_TLDS,\n XDM_PARAM_NAME\n} from './constants';\nimport globals from './globals';\n\nconst Woopra = {};\n\nWoopra.docCookies = docCookies;\n\n/**\n * Wrapper for window.location to allow stubs in testing\n */\nWoopra.location = function location(property, value) {\n // make sure property is valid\n if (!isUndefined(window.location[property])) {\n if (!isUndefined(value)) {\n window.location[property] = value;\n } else {\n return window.location[property];\n }\n }\n};\n\nfunction getHostname() {\n return Woopra.location('hostname');\n}\n\n/**\n * This exists to please the Safari gods. Sinon can't stub window in Safari.\n */\nWoopra.historyReplaceState =\n window.history && window.history.replaceState\n ? function historyReplaceState(data, title, url) {\n return window.history.replaceState(data, title, url);\n }\n : function () {};\n\n/**\n * Hides any URL parameters by calling window.history.replaceState\n *\n * @param {Array} params A list of parameter prefixes that will be hidden\n * @return {String} Returns the new URL that will be used\n */\nWoopra.hideUrlParams = function hideUrlParams(params) {\n const regex = new RegExp(\n `[?&]+((?:${params.join('|')})[^=&]*)=([^&#]*)`,\n 'gi'\n );\n const href = Woopra.location('href').replace(regex, '');\n\n Woopra.historyReplaceState(null, null, href);\n\n return href;\n};\n\n/**\n * Retrieves the current URL parameters as an object\n *\n * @return {Object} An object for all of the URL parameters\n */\nWoopra.getUrlParams = function getUrlParams() {\n const vars = {};\n const href = Woopra.location('href');\n\n if (href) {\n href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function (m, key, value) {\n vars[key] = decodeURIComponent(value.split('+').join(' '));\n });\n }\n\n return vars;\n};\n\nWoopra.buildUrlParams = function buildUrlParams(params, prefix = '') {\n const p = [];\n\n if (isUndefined(params)) {\n return params;\n }\n\n for (const key in params) {\n if (params.hasOwnProperty(key)) {\n if (\n params[key] !== 'undefined' &&\n params[key] !== 'null' &&\n !isUndefined(params[key])\n ) {\n p.push(\n `${prefix}${encodeURIComponent(key)}=${encodeURIComponent(\n params[key]\n )}`\n );\n }\n }\n }\n return p.join('&');\n};\n\n/**\n * Parses the URL parameters for data beginning with a certain prefix\n *\n * @param {Function} method The callback method for each key found matching `prefix`\n * @param {string} prefix The prefix that the parameter should start with\n */\nWoopra.getCustomData = function getCustomData(method, prefix = 'wv_') {\n const vars = Woopra.getUrlParams();\n\n for (const i in vars) {\n if (vars.hasOwnProperty(i)) {\n const value = vars[i];\n\n if (i.substring(0, prefix.length) === prefix) {\n const key = i.substring(prefix.length);\n method.call(this, key, value);\n }\n }\n }\n};\n\n/**\n * Retrieves the current client domain name using the hostname\n * and returning the last two tokens with a `.` separator (domain + tld).\n *\n * This can be an issue if there is a second level domain\n */\nWoopra.getDomain = function getDomain(hostname = getHostname()) {\n const domain = hostname.substring(\n hostname.lastIndexOf('.', hostname.lastIndexOf('.') - 1) + 1\n );\n\n // check if domain is in list of second level domains, ignore if so\n if (SECOND_LEVEL_TLDS.indexOf(domain) !== -1) {\n return hostname.substring(\n hostname.lastIndexOf('.', hostname.indexOf(domain) - 2) + 1\n );\n }\n\n return domain;\n};\n\n/**\n * Returns the current hostname with 'www' stripped out\n */\nWoopra.getHostnameNoWww = function getHostnameNoWww() {\n const hostname = getHostname();\n\n if (hostname.indexOf('www.') === 0) {\n return hostname.replace('www.', '');\n }\n\n return hostname;\n};\n\n/**\n * Determines if the current URL should be considered an outgoing URL\n */\nWoopra.isOutgoingLink = function isOutgoingLink(targetHostname) {\n const currentHostname = getHostname();\n const currentDomain = Woopra.getDomain(currentHostname);\n\n return (\n targetHostname !== currentHostname &&\n targetHostname.replace(/^www\\./, '') !==\n currentHostname.replace(/^www\\./, '') &&\n (!globals[KEY_OUTGOING_IGNORE_SUBDOMAIN] ||\n currentDomain !== Woopra.getDomain(targetHostname)) &&\n !Woopra.startsWith(targetHostname, 'javascript') &&\n targetHostname !== '' &&\n targetHostname !== '#'\n );\n};\n\nWoopra.hideCrossDomainId = function hideCrossDomainId() {\n return Woopra.hideUrlParams([XDM_PARAM_NAME]);\n};\n\nWoopra.mapQueryParams = function mapQueryParams(mapping) {\n const vars = Woopra.getUrlParams();\n const params = {};\n\n for (const key in mapping) {\n const value = vars[key];\n if (!isUndefined(value)) {\n params[mapping[key]] = value;\n }\n }\n\n return params;\n};\n\nWoopra.redirect = function redirect(link) {\n Woopra.location('href', link);\n};\n\n/**\n * Parses current URL for parameters that start with either `utm_` or `woo_`\n * and have the keys `source`, `medium`, `content`, `campaign`, `term`\n *\n * @return {Object} Returns an object with campaign keys as keys\n */\nWoopra.getCampaignData = function getCampaignData() {\n const vars = Woopra.getUrlParams();\n const campaign = {};\n\n for (let i = 0; i < CAMPAIGN_KEYS.length; i++) {\n const key = CAMPAIGN_KEYS[i];\n const value = vars[`utm_${key}`] || vars[`woo_${key}`];\n\n if (!isUndefined(value)) {\n campaign[`campaign_${key === 'campaign' ? 'name' : key}`] = value;\n }\n }\n\n return campaign;\n};\n\n/**\n * Hides any campaign data (query params: wv_, woo_, utm_) from the URL\n * by using replaceState (if available)\n */\nWoopra.hideCampaignData = function hideCampaignData() {\n return Woopra.hideUrlParams(['wv_', 'woo_', 'utm_']);\n};\n\nWoopra.leftClick = isLeftClick;\nWoopra.randomString = randomString;\nWoopra.getElement = getElement;\nWoopra.loadScript = loadScript;\nWoopra.removeScript = removeScript;\nWoopra.serializeForm = serializeForm;\nWoopra._on = on;\nWoopra._fire = fire;\nWoopra.attachEvent = addEventListener;\nWoopra.startsWith = startsWith;\nWoopra.endsWith = endsWith;\n\nexport default Woopra;\n","import baseClamp from './_baseClamp.js';\nimport baseToString from './_baseToString.js';\nimport toInteger from './toInteger.js';\nimport toString from './toString.js';\n\n/**\n * Checks if `string` starts with the given target string.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {string} [target] The string to search for.\n * @param {number} [position=0] The position to search from.\n * @returns {boolean} Returns `true` if `string` starts with `target`,\n * else `false`.\n * @example\n *\n * _.startsWith('abc', 'a');\n * // => true\n *\n * _.startsWith('abc', 'b');\n * // => false\n *\n * _.startsWith('abc', 'b', 1);\n * // => true\n */\nfunction startsWith(string, target, position) {\n string = toString(string);\n position = position == null\n ? 0\n : baseClamp(toInteger(position), 0, string.length);\n\n target = baseToString(target);\n return string.slice(position, position + target.length) == target;\n}\n\nexport default startsWith;\n","import baseClamp from './_baseClamp.js';\nimport baseToString from './_baseToString.js';\nimport toInteger from './toInteger.js';\nimport toString from './toString.js';\n\n/**\n * Checks if `string` ends with the given target string.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {string} [target] The string to search for.\n * @param {number} [position=string.length] The position to search up to.\n * @returns {boolean} Returns `true` if `string` ends with `target`,\n * else `false`.\n * @example\n *\n * _.endsWith('abc', 'c');\n * // => true\n *\n * _.endsWith('abc', 'b');\n * // => false\n *\n * _.endsWith('abc', 'b', 2);\n * // => true\n */\nfunction endsWith(string, target, position) {\n string = toString(string);\n target = baseToString(target);\n\n var length = string.length;\n position = position === undefined\n ? length\n : baseClamp(toInteger(position), 0, length);\n\n var end = position;\n position -= target.length;\n return position >= 0 && string.slice(position, end) == target;\n}\n\nexport default endsWith;\n","import {\n isArray,\n isFunction,\n isObject,\n isString,\n isUndefined,\n noop\n} from 'lodash-es';\n\nimport { addEventListener, on, removeHandler } from './lib/events';\nimport {\n callCallback,\n findParentElement,\n getDOMPath,\n getElement,\n getScrollDepth,\n hasBeaconSupport,\n jsonStringifyObjectValues,\n prefixObjectKeys,\n randomString\n} from './lib/utils';\nimport WoopraAction from './action';\nimport {\n ACTION_PROPERTY_ALIASES,\n ACTION_PROPERTY_PREFIX,\n ACTION_PV,\n DATA_TRACKED_ATTRIBUTE,\n DEFAULT_DOWNLOAD_EXTENSIONS,\n ELEMENT_MATCHER_CLICK,\n ENDPOINT_IDENTIFY,\n ENDPOINT_TRACK,\n ENDPOINT_UPDATE,\n ENDPOINTS,\n EVENT_CLICK,\n EVENT_DOWNLOAD,\n EVENT_LINK_CLICK,\n EVENT_MOUSEMOVE,\n EVENT_OUTGOING,\n EVENT_SCROLL,\n EVENT_STATECHANGE,\n IDPTNC,\n KEY_APP,\n KEY_AUGMENT_ACTION,\n KEY_AUTO_DECORATE,\n KEY_BEACONS,\n KEY_CAMPAIGN_ONCE,\n KEY_CLICK_PAUSE,\n KEY_CLICK_TRACKING,\n KEY_CLICK_TRACKING_MATCHER_SELECTORS,\n KEY_CONTEXT,\n KEY_COOKIE_DOMAIN,\n KEY_COOKIE_EXPIRE,\n KEY_COOKIE_NAME,\n KEY_COOKIE_PATH,\n KEY_COOKIE_SECURE,\n KEY_CROSS_DOMAIN,\n KEY_DOMAIN,\n KEY_DOWNLOAD_EXTENSIONS,\n KEY_DOWNLOAD_PAUSE,\n KEY_DOWNLOAD_TRACKING,\n KEY_FORM_PAUSE,\n KEY_HIDE_CAMPAIGN,\n KEY_HIDE_XDM_DATA,\n KEY_IDLE_THRESHOLD,\n KEY_IDLE_TIMEOUT,\n KEY_IGNORE_QUERY_URL,\n KEY_IP,\n KEY_MAP_QUERY_PARAMS,\n KEY_OUTGOING_IGNORE_SUBDOMAIN,\n KEY_OUTGOING_PAUSE,\n KEY_OUTGOING_TRACKING,\n KEY_PERSONALIZATION,\n KEY_PING,\n KEY_PING_INTERVAL,\n KEY_PROTOCOL,\n KEY_REGION,\n KEY_SAVE_URL_HASH,\n KEY_THIRD_PARTY,\n KEY_USE_COOKIES,\n LIFECYCLE_ACTION,\n LIFECYCLE_PAGE,\n MAX_PING_INTERVAL,\n META_CANCELLED,\n META_DIRTY,\n META_DURATION,\n META_EXPIRED,\n META_LEAVE,\n META_RETRACK,\n META_SENT,\n META_TIMESTAMP,\n MIN_PING_INTERVAL,\n ORG_PROPERTY_PREFIX,\n PAGE_LIFECYCLE_STATE_ACTIVE,\n PAGE_LIFECYCLE_STATE_HIDDEN,\n PAGE_LIFECYCLE_STATE_PASSIVE,\n PAGE_LIFECYCLE_STATE_TERMINATED,\n REGION_EU,\n SCROLL_DEPTH,\n TARGET_BLANK,\n URL_ID_REGEX,\n VERSION,\n VISIT_PROPERTY_PREFIX,\n VISITOR_PROPERTY_PREFIX,\n XDM_PARAM_NAME\n} from './constants';\nimport globals from './globals';\nimport Woopra from './woopra';\n\nconst fire = Woopra._fire;\n\nexport default class Tracker {\n constructor(instanceName) {\n this.visitorData = {};\n this.sessionData = {};\n this.orgData = {};\n\n this.options = {\n [KEY_APP]: 'js-client',\n [KEY_BEACONS]: hasBeaconSupport(),\n [KEY_CAMPAIGN_ONCE]: false,\n [KEY_CLICK_TRACKING_MATCHER_SELECTORS]: ELEMENT_MATCHER_CLICK,\n [KEY_COOKIE_DOMAIN]: `.${Woopra.getHostnameNoWww()}`,\n [KEY_COOKIE_EXPIRE]: new Date(\n new Date().setDate(new Date().getDate() + 730)\n ),\n [KEY_COOKIE_NAME]: 'wooTracker',\n [KEY_COOKIE_PATH]: '/',\n [KEY_COOKIE_SECURE]: Woopra.location('protocol') === 'https:',\n [KEY_CROSS_DOMAIN]: false,\n [KEY_DOWNLOAD_EXTENSIONS]: DEFAULT_DOWNLOAD_EXTENSIONS,\n [KEY_DOWNLOAD_PAUSE]: 200,\n [KEY_DOWNLOAD_TRACKING]: false,\n [KEY_HIDE_CAMPAIGN]: false,\n [KEY_HIDE_XDM_DATA]: false,\n [KEY_IDLE_THRESHOLD]: 10 * 1_000,\n [KEY_IDLE_TIMEOUT]: 60 * 10 * 1_000,\n [KEY_IGNORE_QUERY_URL]: false,\n [KEY_MAP_QUERY_PARAMS]: {},\n [KEY_OUTGOING_IGNORE_SUBDOMAIN]: true,\n [KEY_OUTGOING_PAUSE]: 200,\n [KEY_OUTGOING_TRACKING]: false,\n [KEY_PERSONALIZATION]: true,\n [KEY_PING_INTERVAL]: 12 * 1_000,\n [KEY_PING]: false,\n [KEY_PROTOCOL]: 'https',\n [KEY_REGION]: REGION_EU,\n [KEY_SAVE_URL_HASH]: true,\n [KEY_THIRD_PARTY]: false,\n [KEY_CLICK_PAUSE]: 250,\n [KEY_FORM_PAUSE]: 250,\n [KEY_USE_COOKIES]: true\n };\n\n this.instanceName = instanceName || 'woopra';\n this.idle = 0;\n this.cookie = '';\n this.last_activity = Date.now();\n this.loaded = false;\n this.dirtyCookie = false;\n this.sentCampaign = false;\n this.version = VERSION;\n this.pending = [];\n this.beaconQueue = [];\n this.lastAction = null;\n\n if (instanceName && instanceName !== '') {\n window[instanceName] = this;\n }\n }\n\n init() {\n this.__l = {};\n this._processQueue('config');\n this._setupCookie();\n this._bindEvents();\n\n // Otherwise loading indicator gets stuck until the every response\n // in the queue has been received\n setTimeout(() => this._processQueue(), 1);\n\n this.loaded = true;\n\n const callback = this.config('initialized');\n\n if (isFunction(callback)) {\n callback(this.instanceName);\n }\n\n // Safe to remove cross domain url parameter after setupCookie is called\n // Should only need to be called once on load\n if (this.config(KEY_HIDE_XDM_DATA)) {\n Woopra.hideCrossDomainId();\n }\n }\n\n /**\n * Processes the tracker queue in case user tries to push events\n * before tracker is ready.\n */\n _processQueue(type) {\n var _wpt = window.__woo ? window.__woo[this.instanceName] : _wpt;\n _wpt = window._w ? window._w[this.instanceName] : _wpt;\n\n // if _wpt is undefined, means script was loaded asynchronously and\n // there is no queue\n\n if (_wpt && _wpt._e) {\n const events = _wpt._e;\n for (let i = 0; i < events.length; i++) {\n const action = events[i];\n if (\n !isUndefined(action) &&\n this[action[0]] &&\n (isUndefined(type) || type === action[0])\n ) {\n this[action[0]].apply(this, Array.prototype.slice.call(action, 1));\n }\n }\n }\n }\n\n /**\n * Sets up the tracking cookie\n */\n _setupCookie() {\n const url_id = this.getUrlId();\n\n this.cookie = this.getCookie();\n\n // overwrite saved cookie if id is in url\n if (url_id) {\n this.cookie = url_id;\n }\n\n // Setup cookie\n if (!this.cookie || this.cookie.length < 1) {\n this.cookie = randomString();\n }\n\n Woopra.docCookies.setItem(\n this.config(KEY_COOKIE_NAME),\n this.cookie,\n this.config(KEY_COOKIE_EXPIRE),\n this.config(KEY_COOKIE_PATH),\n this.config(KEY_COOKIE_DOMAIN),\n this.config(KEY_COOKIE_SECURE)\n );\n\n this.dirtyCookie = true;\n }\n\n /**\n * Binds some events to measure mouse and keyboard events\n */\n _bindEvents() {\n on(this, EVENT_CLICK, (e) => this.onClick(e));\n on(this, EVENT_DOWNLOAD, (url) => this.downloaded(url));\n on(this, EVENT_LINK_CLICK, (e, link) => this.onLink(e, link));\n on(this, EVENT_MOUSEMOVE, (e, l) => this.moved(e, l));\n on(this, EVENT_OUTGOING, (url) => this.outgoing(url));\n on(this, EVENT_SCROLL, (elem) => this.onScroll(elem));\n on(this, EVENT_STATECHANGE, (e) => this.onPageStateChange(e));\n on(this, KEY_AUTO_DECORATE, (elem) => this.autoDecorate(elem));\n }\n\n /**\n * Sets/gets values from dataStore depending on arguments passed\n *\n * @param dataStore Object The tracker property to read/write\n * @param key String/Object Returns property object if key and value is undefined,\n * acts as a getter if only `key` is defined and a string, and\n * acts as a setter if `key` and `value` are defined OR if `key` is an object.\n */\n _dataSetter(dataStore, key, value) {\n if (isUndefined(key)) {\n return dataStore;\n }\n\n if (isUndefined(value)) {\n if (isString(key)) {\n return dataStore[key];\n }\n if (isObject(key)) {\n for (const i in key) {\n if (key.hasOwnProperty(i)) {\n if (Woopra.startsWith(i, 'cookie_')) {\n this.dirtyCookie = true;\n }\n dataStore[i] = key[i];\n }\n }\n }\n } else {\n if (Woopra.startsWith(key, 'cookie_')) {\n this.dirtyCookie = true;\n }\n dataStore[key] = value;\n }\n\n return this;\n }\n\n getVisitorUrlData() {\n Woopra.getCustomData.call(this, this.identify, 'wv_');\n }\n\n /*\n * Returns the Woopra cookie string\n */\n getCookie() {\n return Woopra.docCookies.getItem(this.config(KEY_COOKIE_NAME));\n }\n\n getProtocol() {\n const protocol = this.config(KEY_PROTOCOL);\n return protocol && protocol !== '' ? `${protocol}:` : '';\n }\n\n /**\n * Generates a destination endpoint string to use depending on different\n * configuration options\n */\n getEndpoint(path = '') {\n const protocol = this.getProtocol();\n\n if (this.config(KEY_THIRD_PARTY) && !this.config(KEY_DOMAIN)) {\n throw new Error('Error: `domain` is not set.');\n }\n\n let thirdPartyPath = this.config(KEY_THIRD_PARTY)\n ? `tp/${this.config(KEY_DOMAIN)}`\n : '';\n\n if (path && !Woopra.endsWith(path, '/')) {\n path += '/';\n }\n\n if (thirdPartyPath && !Woopra.startsWith(path, '/')) {\n thirdPartyPath += '/';\n }\n\n const region = this.config(KEY_REGION);\n const endpoint = ENDPOINTS[region];\n\n if (!endpoint) throw new Error(`Error: Invalid region: ${region}`);\n\n return `${protocol}//${endpoint}${thirdPartyPath}${path}`;\n }\n\n /**\n * Sets configuration options\n */\n config(key, value) {\n const data = this._dataSetter(this.options, key, value);\n\n // dataSetter returns `this` when it is used as a setter\n if (data === this) {\n // clamp ping interval\n this.options[KEY_PING_INTERVAL] = Math.max(\n MIN_PING_INTERVAL,\n Math.min(this.options[KEY_PING_INTERVAL], MAX_PING_INTERVAL)\n );\n\n // set script wide variables for events that are bound on script load\n // since we shouldn't bind per tracker instance\n globals[KEY_OUTGOING_TRACKING] = this.options[KEY_OUTGOING_TRACKING];\n globals[KEY_DOWNLOAD_TRACKING] = this.options[KEY_DOWNLOAD_TRACKING];\n globals[KEY_AUTO_DECORATE] =\n isUndefined(globals[KEY_AUTO_DECORATE]) &&\n this.options[KEY_CROSS_DOMAIN]\n ? this.options[KEY_CROSS_DOMAIN]\n : globals[KEY_AUTO_DECORATE];\n globals[KEY_OUTGOING_IGNORE_SUBDOMAIN] =\n this.options[KEY_OUTGOING_IGNORE_SUBDOMAIN];\n\n if (this.dirtyCookie && this.loaded) {\n this._setupCookie();\n }\n }\n\n return data;\n }\n\n /**\n * Use to attach custom visit data that doesn't stick to visitor\n * ** Not in use yet\n */\n visit(key, value) {\n return this._dataSetter(this.sessionData, key, value);\n }\n\n /**\n * Attach custom visitor data\n */\n identify(...args) {\n let key = undefined;\n let value = undefined;\n let orgKey = undefined;\n let orgValue = undefined;\n\n // identify(props, orgProps)\n if (isObject(args[0]) && isObject(args[1])) {\n key = args[0];\n orgKey = args[1];\n }\n // identify(props, orgKey, orgValue)\n else if (isObject(args[0]) && isString(args[1])) {\n key = args[0];\n orgKey = args[1];\n orgValue = args[2];\n }\n // identify(key, value, orgProps)\n else if (isString(args[0]) && isString(args[1]) && isObject(args[2])) {\n key = args[0];\n value = args[1];\n orgKey = args[2];\n }\n // identify(key, value, orgKey, orgValue)\n else {\n key = args[0];\n value = args[1];\n orgKey = args[2];\n orgValue = args[3];\n }\n\n const visitorProperties = this._dataSetter(this.visitorData, key, value);\n\n if (orgKey) this._dataSetter(this.orgData, orgKey, orgValue);\n\n return visitorProperties;\n }\n\n /**\n * Attach custom org data\n */\n identifyOrg(key, value) {\n return this._dataSetter(this.orgData, key, value);\n }\n\n /**\n * Generic method to call any tracker method\n */\n call(funcName) {\n if (isFunction(this[funcName])) {\n this[funcName].apply(this, Array.prototype.slice.call(arguments, 1));\n }\n }\n\n /**\n * Builds the correct tracking Url and performs an HTTP request\n */\n _push(options = {}) {\n const types = [\n ['visitorData', VISITOR_PROPERTY_PREFIX],\n ['eventData', ACTION_PROPERTY_PREFIX],\n ['sessionData', VISIT_PROPERTY_PREFIX],\n ['orgData', ORG_PROPERTY_PREFIX]\n ];\n\n let data = {};\n\n const endpoint = this.getEndpoint(options.endpoint);\n const lifecycle = options.lifecycle || LIFECYCLE_ACTION;\n\n // Load custom visitor params from url\n this.getVisitorUrlData();\n\n if (this.config(KEY_HIDE_CAMPAIGN)) {\n Woopra.hideCampaignData();\n }\n\n // push tracker config values\n this._dataSetter(data, this.getOptionParams());\n\n // push eventName if it exists\n if (options.eventName) {\n data.event = options.eventName;\n }\n\n // push close if no personalization\n if (!this.config(KEY_PERSONALIZATION)) {\n data.close = true;\n }\n\n data.timeout = isUndefined(options.timeout)\n ? this.config(KEY_IDLE_TIMEOUT)\n : options.timeout;\n\n const rawData = {};\n\n for (const [original, alias] of ACTION_PROPERTY_ALIASES) {\n if (options.eventData && options.eventData[original]) {\n rawData[alias] = options.eventData[original];\n }\n }\n\n this._dataSetter(data, rawData);\n\n for (let i = 0; i < types.length; i++) {\n const [key, prefix] = types[i];\n\n const newData = jsonStringifyObjectValues(\n prefixObjectKeys(\n options[key],\n prefix,\n prefix === ACTION_PROPERTY_PREFIX ? ACTION_PROPERTY_ALIASES : []\n )\n );\n\n if (\n prefix === ORG_PROPERTY_PREFIX &&\n newData[`${ORG_PROPERTY_PREFIX}id`]\n ) {\n newData.org = newData[`${ORG_PROPERTY_PREFIX}id`];\n delete newData[`${ORG_PROPERTY_PREFIX}id`];\n }\n\n this._dataSetter(data, newData);\n }\n\n if (this.config(KEY_CONTEXT)) {\n try {\n const contextData = JSON.stringify(this.config(KEY_CONTEXT));\n data[KEY_CONTEXT] = encodeURIComponent(contextData);\n } catch (e) {}\n }\n\n if (options.fullEventData) data = options.fullEventData;\n\n const dirty = Boolean(options.useBeacon || this.isUnloading);\n\n const meta = {\n [META_DIRTY]: dirty,\n [META_DURATION]: 0,\n [META_RETRACK]: Boolean(options.retrack),\n [META_SENT]: !dirty,\n [META_TIMESTAMP]: Date.now()\n };\n\n const action = new WoopraAction(this, data[IDPTNC], data, meta);\n\n const callback = isFunction(options.callback)\n ? () => options.callback(action)\n : noop;\n const beforeCallback = isFunction(options.beforeCallback)\n ? () => options.beforeCallback(action)\n : noop;\n const errorCallback = options.errorCallback || noop;\n\n // cancel previous lifecycle page event if a new one is tracked\n if (lifecycle === LIFECYCLE_PAGE) {\n this.pending.forEach((item) => {\n if (item.lifecycle === LIFECYCLE_PAGE && item.args.eventData[IDPTNC]) {\n this.cancelAction(item.args.eventData[IDPTNC]);\n }\n });\n }\n\n if (lifecycle === LIFECYCLE_PAGE || options.useBeacon || this.isUnloading) {\n this.pending.push({\n lifecycle,\n endpoint: options.endpoint,\n params: data,\n args: options,\n meta,\n callback,\n errorCallback\n });\n }\n\n if (lifecycle !== LIFECYCLE_PAGE && options.endpoint === ENDPOINT_TRACK) {\n this.lastAction = action;\n }\n\n if (this.isUnloading || (options.useBeacon && !options.queue)) {\n this.sendBeacons();\n } else if (!options.queue) {\n const queryString = Woopra.buildUrlParams(data);\n const scriptUrl = `${endpoint}?${queryString}`;\n\n const onSuccess = () => callCallback(callback, data.event);\n const onError = () => callCallback(errorCallback, data.event);\n\n Woopra.loadScript(scriptUrl, onSuccess, onError);\n }\n\n setTimeout(() => callCallback(beforeCallback, data.event));\n }\n\n /**\n * Send an event to tracking servr\n */\n track(name, options) {\n let eventData = {};\n let eventName = '';\n let hash;\n let callback;\n let beforeCallback;\n let errorCallback;\n const lastArg = arguments[arguments.length - 1];\n let lifecycle = LIFECYCLE_ACTION;\n let queue = false;\n let useBeacon = false;\n let timeout;\n let retrack;\n\n if (isFunction(lastArg)) callback = lastArg;\n else if (isObject(lastArg)) {\n if (isFunction(lastArg.callback)) {\n ({ callback } = lastArg);\n } else if (isFunction(lastArg.onSuccess)) {\n ({ onSuccess: callback } = lastArg);\n }\n\n if (isFunction(lastArg.onBeforeSend)) {\n ({ onBeforeSend: beforeCallback } = lastArg);\n }\n if (isFunction(lastArg.onError)) {\n ({ onError: errorCallback } = lastArg);\n }\n\n if (!isUndefined(lastArg.lifecycle)) {\n ({ lifecycle } = lastArg);\n }\n if (!isUndefined(lastArg.timeout)) {\n ({ timeout } = lastArg);\n }\n if (!isUndefined(lastArg.retrack)) {\n ({ retrack } = lastArg);\n }\n\n if (this.config(KEY_BEACONS)) {\n if (!isUndefined(lastArg.queue)) queue = Boolean(lastArg.queue);\n\n if (!isUndefined(lastArg.useBeacon)) {\n useBeacon = Boolean(lastArg.useBeacon);\n } else if (queue) useBeacon = true;\n } else {\n useBeacon = false;\n }\n }\n\n // Load campaign params (load first to allow overrides)\n if (!this.config(KEY_CAMPAIGN_ONCE) || !this.sentCampaign) {\n eventData = { ...eventData, ...Woopra.getCampaignData() };\n this.sentCampaign = true;\n }\n\n // Load query params mapping into Woopra event\n eventData = {\n ...eventData,\n ...Woopra.mapQueryParams(this.config(KEY_MAP_QUERY_PARAMS))\n };\n\n // Track default: pageview\n if (isUndefined(name) || name === callback) {\n eventName = ACTION_PV;\n }\n // Track custom events\n else if (isUndefined(options) || options === callback) {\n if (isString(name)) {\n eventName = name;\n }\n if (isObject(name)) {\n if (name.name && name.name === ACTION_PV) {\n eventName = ACTION_PV;\n }\n\n this._dataSetter(eventData, name);\n }\n }\n // Track custom events in format of name,object\n else {\n this._dataSetter(eventData, options);\n eventName = name;\n }\n\n eventData[IDPTNC] = randomString();\n\n // Add some defaults for pageview\n if (eventName === ACTION_PV) {\n eventData.url = eventData.url || this.getPageUrl();\n eventData.title = eventData.title || this.getPageTitle();\n eventData.domain = eventData.domain || this.getDomainName();\n eventData.uri = eventData.uri || this.getURI();\n eventData[SCROLL_DEPTH] = getScrollDepth();\n eventData.returning = isUndefined(eventData.returning)\n ? false\n : eventData.returning;\n\n if (!lastArg || !lastArg.lifecycle) lifecycle = LIFECYCLE_PAGE;\n\n if (this.config(KEY_SAVE_URL_HASH)) {\n hash = eventData.hash || this.getPageHash();\n if (hash !== '' && hash !== '#') {\n eventData.hash = hash;\n }\n }\n }\n\n const augmentAction = this.config(KEY_AUGMENT_ACTION);\n\n if (isFunction(augmentAction)) {\n augmentAction.call(this, eventName, eventData);\n }\n\n this._push({\n endpoint: ENDPOINT_TRACK,\n visitorData: this.visitorData,\n sessionData: this.sessionData,\n orgData: this.orgData,\n eventName,\n eventData,\n lifecycle,\n callback,\n beforeCallback,\n errorCallback,\n queue,\n useBeacon,\n retrack,\n timeout\n });\n\n this.startPing();\n\n return this;\n }\n\n update(idptnc, options, lastArg) {\n let callback;\n let beforeCallback;\n let errorCallback;\n let queue = false;\n let useBeacon = true;\n\n if (isFunction(lastArg)) callback = lastArg;\n else if (isObject(lastArg)) {\n if (isFunction(lastArg.callback)) callback = lastArg.callback;\n else if (isFunction(lastArg.onSuccess)) callback = lastArg.onSuccess;\n if (isFunction(lastArg.onBeforeSend))\n beforeCallback = lastArg.onBeforeSend;\n if (isFunction(lastArg.onError)) errorCallback = lastArg.onError;\n\n if (this.config(KEY_BEACONS)) {\n if (!isUndefined(lastArg.queue)) queue = Boolean(lastArg.queue);\n\n if (!isUndefined(lastArg.useBeacon)) {\n useBeacon = Boolean(lastArg.useBeacon);\n } else if (queue) useBeacon = true;\n } else {\n useBeacon = false;\n }\n }\n\n const eventData = {\n [IDPTNC]: idptnc,\n project: this.config(KEY_DOMAIN) || Woopra.getHostnameNoWww()\n };\n\n const rawData = {};\n\n for (const [original, alias] of ACTION_PROPERTY_ALIASES) {\n if (options && options[original]) {\n rawData[alias] = options[original];\n }\n }\n\n if (this.config(KEY_USE_COOKIES)) {\n rawData.cookie = this.getCookie() || this.cookie;\n }\n\n this._dataSetter(eventData, rawData);\n\n this._dataSetter(\n eventData,\n jsonStringifyObjectValues(\n prefixObjectKeys(\n options,\n ACTION_PROPERTY_PREFIX,\n ACTION_PROPERTY_ALIASES\n )\n )\n );\n\n this._push({\n endpoint: ENDPOINT_UPDATE,\n fullEventData: eventData,\n callback,\n beforeCallback,\n errorCallback,\n queue,\n useBeacon\n });\n\n return this;\n }\n\n cancelAction(idptnc) {\n let hasCancelled = false;\n\n if (this.lastAction?.id === idptnc) {\n this.lastAction = null;\n }\n\n this.pending = this.pending.map((item) => {\n if (item.params[IDPTNC] === idptnc) {\n hasCancelled = true;\n\n return {\n ...item,\n meta: {\n ...item.meta,\n [META_CANCELLED]: true,\n [META_DIRTY]: true,\n [META_DURATION]:\n item.lifecycle === LIFECYCLE_PAGE\n ? item.meta[META_DURATION] +\n (Date.now() - item.meta[META_TIMESTAMP])\n : item.meta[META_DURATION],\n [META_RETRACK]: false\n }\n };\n }\n\n return item;\n });\n\n if (hasCancelled) {\n this.sendBeacons();\n }\n }\n\n /**\n * Tracks a single form and then resubmits it\n */\n trackForm(eventName = 'Tracked Form', selector, options) {\n let els;\n const _options = isString(selector) ? options || {} : selector || {};\n\n const bindEl = (el, ev, props, opts) => {\n addEventListener(el, 'submit', (e) => {\n this.trackFormHandler(e, el, ev, _options);\n });\n };\n\n if (_options.elements) {\n els = _options.elements;\n } else {\n els = getElement(selector, _options);\n }\n\n // attach event if form was found\n if (els && els.length > 0) {\n for (const i in els) {\n bindEl(els[i], eventName, _options);\n }\n }\n }\n\n trackFormHandler(e, el, eventName, options = {}) {\n let trackFinished = false;\n\n if (!el.getAttribute(DATA_TRACKED_ATTRIBUTE)) {\n const useBeacon = Boolean(this.config(KEY_BEACONS));\n\n const properties = Woopra.serializeForm(el, options);\n\n if (isFunction(options.identify)) {\n const personData = options.identify(properties) || {};\n\n if (personData) {\n this.identify(personData);\n }\n }\n\n const onBeforeSend = isFunction(options.onBeforeSend)\n ? options.onBeforeSend\n : undefined;\n const onSuccess = isFunction(options.callback)\n ? () => options.callback(properties)\n : undefined;\n const onError = isFunction(options.onError) ? options.onError : undefined;\n\n if (!options.noSubmit) el.setAttribute(DATA_TRACKED_ATTRIBUTE, 1);\n\n if (options.noSubmit || useBeacon) {\n this.track(eventName, properties, {\n onBeforeSend,\n onError,\n onSuccess,\n useBeacon\n });\n } else {\n e.preventDefault();\n e.stopPropagation();\n\n // set timeout to resubmit (default 250ms)\n // so even if woopra does not reply it will still\n // submit the form\n const timer = setTimeout(() => {\n if (!trackFinished) {\n el.submit();\n }\n }, this.config(KEY_FORM_PAUSE));\n\n this.track(eventName, properties, {\n onBeforeSend,\n onSuccess() {\n clearTimeout(timer);\n\n if (onSuccess) onSuccess();\n\n if (!trackFinished) el.submit();\n\n trackFinished = true;\n },\n onError\n });\n }\n }\n }\n\n /**\n * Tracks clicks\n *\n * @param {String} eventName The name of the event to track\n * @param {String} selector The id of element to track\n * @param {Object} properties Any event properties to track with\n * @param {Object} options (Optional) Options object\n * @param {Array} options.elements Supports an array of elements (jQuery object)\n * @param {Boolean} options.noNav (Default: false) If true, will only perform the track event and let the click event bubble up\n */\n trackClick(eventName = 'Item Clicked', selector, properties, options = {}) {\n let els = [];\n\n const bindEl = (el, ev, props, opts) => {\n addEventListener(el, EVENT_CLICK, (e) => {\n this.trackClickHandler(e, el, ev, props, opts);\n });\n };\n\n /**\n * Support an array of elements\n */\n if (options.elements) {\n els = options.elements;\n } else {\n els = getElement(selector, options);\n }\n\n if (els) {\n for (let i = 0; i < els.length; i++) {\n bindEl(els[i], eventName, properties, options);\n }\n }\n }\n\n trackClickHandler(e, el, eventName, properties, options) {\n let trackFinished = false;\n\n if (!el.getAttribute(DATA_TRACKED_ATTRIBUTE)) {\n const useBeacon = Boolean(this.config(KEY_BEACONS));\n\n const onBeforeSend = isFunction(options.onBeforeSend)\n ? options.onBeforeSend\n : undefined;\n const onSuccess = isFunction(options.callback)\n ? () => options.callback(properties)\n : undefined;\n const onError = isFunction(options.onError) ? options.onError : undefined;\n\n if (!options.noNav) el.setAttribute(DATA_TRACKED_ATTRIBUTE, 1);\n\n if (options.noNav || useBeacon) {\n this.track(eventName, properties, {\n onBeforeSend,\n onError,\n onSuccess,\n useBeacon\n });\n } else {\n e.preventDefault();\n\n // set timeout to resubmit (default 250ms)\n // so even if woopra does not reply it will still\n // click the link\n const timer = setTimeout(() => {\n if (!trackFinished) {\n el.click();\n }\n }, this.config(KEY_CLICK_PAUSE));\n\n this.track(eventName, properties, {\n onBeforeSend,\n onSuccess() {\n clearTimeout(timer);\n\n if (onSuccess) onSuccess();\n\n if (!trackFinished) el.click();\n\n trackFinished = true;\n },\n onError\n });\n }\n }\n }\n\n startPing() {\n if (isUndefined(this.pingInterval)) {\n this.pingInterval = setInterval(() => {\n this.ping();\n }, this.config(KEY_PING_INTERVAL));\n }\n }\n\n stopPing() {\n if (!isUndefined(this.pingInterval)) {\n clearInterval(this.pingInterval);\n delete this.pingInterval;\n }\n }\n\n /**\n * Pings tracker with visitor info\n */\n ping() {\n if (this.config(KEY_PING) && this.idle < this.config(KEY_IDLE_TIMEOUT)) {\n // this._push({\n // endpoint: 'ping'\n // });\n } else {\n this.stopPing();\n }\n\n const now = Date.now();\n if (now - this.last_activity > this.config(KEY_IDLE_THRESHOLD)) {\n this.idle = now - this.last_activity;\n }\n\n return this;\n }\n\n /**\n * Pushes visitor data to server without sending an event\n */\n push(callback) {\n this._push({\n endpoint: ENDPOINT_IDENTIFY,\n visitorData: this.visitorData,\n sessionData: this.sessionData,\n orgData: this.orgData,\n callback\n });\n\n this.sendBeacons();\n\n return this;\n }\n\n _updateDurations(oldState, newState) {\n const now = Date.now();\n\n function updateDuration(item) {\n switch (newState) {\n case PAGE_LIFECYCLE_STATE_ACTIVE:\n case PAGE_LIFECYCLE_STATE_PASSIVE:\n if (now - item.meta[META_LEAVE] > item.params.timeout) {\n return {\n [META_EXPIRED]: true\n };\n }\n\n if (\n (newState === PAGE_LIFECYCLE_STATE_ACTIVE &&\n oldState === PAGE_LIFECYCLE_STATE_PASSIVE) ||\n (newState === PAGE_LIFECYCLE_STATE_PASSIVE &&\n oldState === PAGE_LIFECYCLE_STATE_ACTIVE)\n ) {\n return {};\n }\n\n return {\n [META_TIMESTAMP]: now\n };\n\n case PAGE_LIFECYCLE_STATE_HIDDEN:\n return {\n [META_DIRTY]:\n item.meta[META_DIRTY] || now - item.meta[META_TIMESTAMP] > 100,\n [META_DURATION]:\n item.meta[META_DURATION] + (now - item.meta[META_TIMESTAMP]),\n [META_LEAVE]: now\n };\n\n case PAGE_LIFECYCLE_STATE_TERMINATED:\n return {\n [META_DIRTY]:\n item.meta[META_DIRTY] || now - item.meta[META_LEAVE] > 100\n };\n\n default:\n return {};\n }\n }\n\n this.pending = this.pending.map((item) => {\n if (item.lifecycle !== LIFECYCLE_PAGE) return item;\n\n return {\n ...item,\n meta: {\n ...item.meta,\n ...updateDuration(item)\n }\n };\n });\n\n if (this.lastAction) {\n this.lastAction = {\n ...this.lastAction,\n meta: {\n ...this.lastAction.meta,\n ...updateDuration(this.lastAction)\n }\n };\n }\n }\n\n _processLifecycle(lifecycle) {\n const toRetrack = [];\n\n this.pending.forEach((item) => {\n if (\n item.meta[META_EXPIRED] &&\n !item.meta[META_CANCELLED] &&\n item.meta[META_RETRACK]\n ) {\n toRetrack.push({\n ...item.args,\n eventData: {\n ...(item.args.eventData || {}),\n [IDPTNC]: randomString(),\n returning: true\n }\n });\n }\n });\n\n toRetrack.forEach((item) => this._push(item));\n\n this.pending = this.pending.filter((item) => {\n if (item.meta[META_EXPIRED]) return false;\n\n if (item.meta[META_DIRTY]) {\n this.beaconQueue.push({\n lifecycle: item.lifecycle,\n endpoint: item.endpoint,\n params: {\n ...item.params\n },\n meta: {\n ...item.meta\n },\n successCallback: item.callback,\n errorCallback: item.errorCallback\n });\n }\n\n if (item.meta[META_CANCELLED]) return false;\n\n if (item.lifecycle === LIFECYCLE_PAGE && lifecycle !== LIFECYCLE_PAGE) {\n return true;\n }\n\n return false;\n });\n\n this.pending = this.pending.map((item) => ({\n ...item,\n meta: {\n ...item.meta,\n [META_DIRTY]: false,\n [META_SENT]: true\n }\n }));\n\n if (lifecycle === LIFECYCLE_PAGE && this.lastAction) {\n this.beaconQueue.push({\n lifecycle: LIFECYCLE_PAGE,\n endpoint: ENDPOINT_TRACK,\n params: {\n ...this.lastAction.params\n },\n meta: {\n ...this.lastAction.meta,\n [META_SENT]: true\n }\n });\n }\n\n return toRetrack.length > 0;\n }\n\n _drainBeaconQueue() {\n const useCookies = this.config(KEY_USE_COOKIES);\n\n function isEmptyBeaconParams(params) {\n const { [IDPTNC]: id, cookie, project, event, ...rest } = params;\n\n return Object.keys(rest).length > 0;\n }\n\n const idMap = this.beaconQueue.reduce((idMap, item) => {\n idMap[item.params[IDPTNC]] = [];\n\n return idMap;\n }, {});\n\n this.beaconQueue.forEach((item) => {\n idMap[item.params[IDPTNC]].push(item);\n });\n\n this.beaconQueue = [];\n\n const toSend = Object.keys(idMap)\n .map((id) => {\n const items = idMap[id];\n\n const data = {\n endpoint: undefined,\n params: {},\n onSuccess: [],\n onError: []\n };\n\n items.forEach((item) => {\n if (!data.endpoint) {\n if (item.endpoint === ENDPOINT_TRACK && item.meta[META_SENT]) {\n data.endpoint = ENDPOINT_UPDATE;\n } else {\n data.endpoint = item.endpoint;\n }\n }\n\n data.params.project = item.params.project;\n data.params.event = item.params.event;\n data.params[IDPTNC] = item.params[IDPTNC];\n\n if (useCookies) {\n data.params.cookie = this.getCookie() || this.cookie;\n }\n\n if (\n (item.lifecycle === LIFECYCLE_PAGE ||\n item.params[IDPTNC] === this.lastAction?.id) &&\n item.meta[META_DURATION] > 0\n ) {\n data.params.duration = item.meta[META_DURATION];\n }\n\n if (item.meta[SCROLL_DEPTH]) {\n data.params[`${ACTION_PROPERTY_PREFIX}${SCROLL_DEPTH}`] =\n Math.round(item.meta[SCROLL_DEPTH] * 10_000) / 10_000;\n }\n\n if (!item.meta[META_SENT]) {\n data.params = { ...data.params, ...item.params };\n\n if (isFunction(item.successCallback)) {\n data.onSuccess.push(item.successCallback);\n }\n\n if (isFunction(item.errorCallback)) {\n data.onError.push(item.errorCallback);\n }\n }\n });\n\n if (!data.params.project) {\n data.params.project =\n this.config(KEY_DOMAIN) || Woopra.getHostnameNoWww();\n }\n\n return data;\n })\n .filter((item) => isEmptyBeaconParams(item.params));\n\n const sendBeacon =\n navigator.sendBeacon && navigator.sendBeacon.bind(navigator);\n const useBeacon =\n Boolean(this.config(KEY_BEACONS)) && isFunction(sendBeacon);\n\n // TODO: fallback to sending via loadScript if sendBeacon fails\n // this probably requires a more stream-like approach to processing the queue\n if (toSend.length > 0) {\n if (useBeacon) {\n const payloads = [''];\n\n const lines = toSend.map(({ endpoint, params }) =>\n JSON.stringify({ endpoint, params })\n );\n\n // chunk beacons into < 64 KiB chunks\n lines.forEach((line) => {\n if (\n new Blob([`${payloads[payloads.length - 1]}${line}`]).size >= 65_000\n ) {\n payloads.push('');\n }\n payloads[payloads.length - 1] += `${line}\\n`;\n });\n\n payloads.forEach((payload, index) => {\n const formData = new FormData();\n\n formData.append('payload', payload.slice(0, -1));\n\n try {\n sendBeacon(this.getEndpoint('push'), formData);\n } catch (e) {\n console.error('Woopra: sendBeacon failed:', e);\n }\n });\n\n toSend.forEach((item) => {\n item.onSuccess.forEach((callback) =>\n callCallback(callback, item.params.event)\n );\n });\n } else {\n toSend.forEach((item) => {\n const endpoint = this.getEndpoint(item.endpoint);\n\n const queryString = Woopra.buildUrlParams({\n close: true,\n ...item.params\n });\n const scriptUrl = `${endpoint}?${queryString}`;\n\n const onSuccess = () =>\n item.onSuccess.forEach((callback) =>\n callCallback(callback, item.params.event)\n );\n const onError = () =>\n item.onError.forEach((callback) =>\n callCallback(callback, item.params.event)\n );\n\n Woopra.loadScript(scriptUrl, onSuccess, onError);\n });\n }\n }\n }\n\n sendBeacons(lifecycle = LIFECYCLE_ACTION) {\n this._processLifecycle(lifecycle);\n this._drainBeaconQueue();\n }\n\n /**\n * synchronous sleep\n */\n sleep() {\n // Why does this exist?\n }\n\n _touch(last_activity = Date.now()) {\n this.last_activity = last_activity;\n this.idle = 0;\n }\n\n // User Action tracking and event handlers\n\n /**\n * Clicks\n */\n\n /**\n * Measure when the user last moved their mouse to update idle state\n */\n moved(e, last_activity) {\n this._touch(last_activity);\n }\n\n onClick(e) {\n if (!this.config(KEY_CLICK_TRACKING)) return;\n\n const useBeacon = Boolean(this.config(KEY_BEACONS));\n\n const { target } = e;\n\n const clickTarget = findParentElement(\n target,\n this.config(KEY_CLICK_TRACKING_MATCHER_SELECTORS)\n );\n\n if (clickTarget) {\n const tagName = clickTarget.tagName.toLowerCase();\n\n // get attributes starting with data-woopra-\n const customProperties = clickTarget\n .getAttributeNames()\n .reduce((result, name) => {\n if (Woopra.startsWith(name, 'data-woopra-')) {\n result[name.slice(12)] = clickTarget.getAttribute(name);\n }\n\n return result;\n }, {});\n\n const eventName =\n clickTarget.getAttribute('data-woopra') || 'button click';\n\n const properties = {\n 'page url': this.getPageUrl(),\n 'page title': this.getPageTitle(),\n text:\n clickTarget.innerText || clickTarget.value || clickTarget.textContent,\n title: clickTarget.textContent,\n type: tagName === 'a' ? 'link' : clickTarget.type,\n tagname: tagName,\n classname: clickTarget.className,\n 'dom path': getDOMPath(clickTarget),\n url: clickTarget.href,\n 'pointer type': e.pointerType,\n ...customProperties\n };\n\n if (this.config(KEY_SAVE_URL_HASH)) {\n const hash = this.getPageHash();\n\n if (hash !== '' && hash !== '#') {\n properties['page hash'] = hash;\n }\n }\n\n this.track(eventName, properties, {\n useBeacon\n });\n }\n }\n\n onLink(e, link) {\n const useBeacon = Boolean(this.config(KEY_BEACONS));\n const downloadTypes = this.config(KEY_DOWNLOAD_EXTENSIONS);\n\n const downloadFileTypeRegexp = new RegExp(\n `(?:${downloadTypes.join('|')})($|\\&)`,\n 'i'\n );\n\n const isDownloadFileType = downloadFileTypeRegexp.test(link.pathname);\n\n if (this.config(KEY_DOWNLOAD_TRACKING) && isDownloadFileType) {\n fire(EVENT_DOWNLOAD, link.href);\n\n if (link.target !== TARGET_BLANK && Woopra.leftClick(e)) {\n link.setAttribute(DATA_TRACKED_ATTRIBUTE, 1);\n\n if (!useBeacon) {\n e.preventDefault();\n e.stopPropagation();\n\n setTimeout(() => {\n link.click();\n }, this.config(KEY_DOWNLOAD_PAUSE));\n }\n }\n }\n\n // Make sure\n // * outgoing tracking is enabled\n // * this URL does not match a download URL (doesn't end\n // in a binary file extension)\n // * not ignoring subdomains OR link hostname is not a partial\n // match of current hostname (to check for subdomains),\n // * hostname is not empty\n if (\n this.config(KEY_OUTGOING_TRACKING) &&\n !isDownloadFileType &&\n Woopra.isOutgoingLink(link.hostname)\n ) {\n fire(EVENT_OUTGOING, link.href);\n\n if (link.target !== TARGET_BLANK && Woopra.leftClick(e)) {\n link.setAttribute(DATA_TRACKED_ATTRIBUTE, 1);\n\n if (!useBeacon) {\n e.preventDefault();\n e.stopPropagation();\n\n setTimeout(() => {\n link.click();\n }, this.config(KEY_OUTGOING_PAUSE));\n }\n }\n }\n }\n\n downloaded(url) {\n const useBeacon = Boolean(this.config(KEY_BEACONS));\n\n this.track(\n EVENT_DOWNLOAD,\n {\n url\n },\n { useBeacon }\n );\n }\n\n outgoing(url) {\n const useBeacon = Boolean(this.config(KEY_BEACONS));\n\n this.track(\n EVENT_OUTGOING,\n {\n url\n },\n { useBeacon }\n );\n }\n\n onUnload() {\n if (!this.isUnloading) {\n this.isUnloading = true;\n this._updateDurations(\n PAGE_LIFECYCLE_STATE_HIDDEN,\n PAGE_LIFECYCLE_STATE_TERMINATED\n );\n this.sendBeacons(LIFECYCLE_PAGE);\n }\n }\n\n onPageStateChange(e) {\n const { newState, oldState } = e;\n\n switch (newState) {\n case PAGE_LIFECYCLE_STATE_ACTIVE:\n this._updateDurations(oldState, newState);\n this.sendBeacons();\n this._touch();\n break;\n\n case PAGE_LIFECYCLE_STATE_PASSIVE:\n this._updateDurations(oldState, newState);\n this.sendBeacons();\n break;\n\n case PAGE_LIFECYCLE_STATE_HIDDEN:\n this._updateDurations(oldState, newState);\n this.sendBeacons();\n break;\n\n case PAGE_LIFECYCLE_STATE_TERMINATED:\n this.onUnload();\n break;\n }\n }\n\n onScroll(e) {\n this._touch();\n\n const scrollDepth = getScrollDepth();\n\n const pages = this.pending.filter(\n (item) => item.lifecycle === LIFECYCLE_PAGE\n );\n\n pages.forEach((pv) => {\n pv.meta[SCROLL_DEPTH] = Math.min(\n 1,\n Math.max(scrollDepth, pv.meta[SCROLL_DEPTH] || 0)\n );\n });\n }\n\n /**\n * Event handler for decorating an element with a URL (for now only\n * anchor tags)\n */\n autoDecorate(elem) {\n const xdm = this.config(KEY_CROSS_DOMAIN);\n\n if (!xdm) return;\n\n const domains = isString(xdm) ? [xdm] : isArray(xdm) ? xdm : [];\n\n let canDecorate;\n\n for (let i = 0; i < domains.length; i++) {\n if (\n elem.hostname.indexOf(domains[i]) !== -1 &&\n elem.hostname !== Woopra.location('hostname')\n ) {\n canDecorate = true;\n break;\n }\n }\n\n if (canDecorate) {\n const decorated = this.decorate(elem);\n\n if (decorated) {\n elem.href = decorated;\n // bind an event handler on mouseup to remove the url\n }\n }\n }\n\n /**\n * Resets cookie\n */\n reset() {\n Woopra.docCookies.removeItem(\n this.config(KEY_COOKIE_NAME),\n this.config(KEY_COOKIE_PATH),\n this.config(KEY_COOKIE_DOMAIN)\n );\n this.cookie = null;\n this._setupCookie();\n }\n\n /**\n * Decorates a given URL with a __woopraid query param with value of\n * the current cookie\n */\n decorate(url) {\n let el;\n let query;\n let pathname;\n let host;\n\n if (isString(url)) {\n el = document.createElement('a');\n el.href = url;\n query = el.search ? '&' : '?';\n } else if (url && url.href) {\n el = url;\n }\n\n if (el) {\n query = el.search ? '&' : '?';\n pathname =\n el.pathname && el.pathname.charAt(0) === '/'\n ? el.pathname\n : `/${el.pathname}`;\n\n host =\n el.hostname +\n (el.port && el.port !== '' && el.port !== '80' && el.port !== '0'\n ? `:${el.port}`\n : '');\n\n return `${el.protocol}//${host}${pathname}${el.search}${query}${XDM_PARAM_NAME}=${this.cookie}${el.hash}`;\n }\n }\n\n /**\n * Undecorates a URL with __woopraid query param\n */\n undecorate(url) {\n const regex = new RegExp(`[?&]+(?:${XDM_PARAM_NAME})=([^&#]*)`, 'gi');\n let _url = url;\n\n if (url && url.href) {\n _url = url.href;\n }\n\n if (_url) {\n return _url.replace(regex, '');\n }\n }\n\n getPageUrl() {\n if (this.config(KEY_IGNORE_QUERY_URL)) {\n return Woopra.location('pathname');\n }\n return `${Woopra.location('pathname')}${Woopra.location('search')}`;\n }\n\n getPageHash() {\n return Woopra.location('hash');\n }\n\n getPageTitle() {\n return document.getElementsByTagName('title').length === 0\n ? ''\n : document.getElementsByTagName('title')[0].innerHTML;\n }\n\n getDomainName() {\n return Woopra.location('hostname');\n }\n\n getURI() {\n return Woopra.location('href');\n }\n\n /**\n * Retrieves a Woopra unique id from a URL's query param (__woopraid)\n *\n * @param {String} href The full URL to extract from\n */\n getUrlId(href = Woopra.location('href')) {\n const matches = href.match(URL_ID_REGEX);\n\n if (matches && matches[1]) {\n return matches[1];\n }\n }\n\n getOptionParams() {\n // default params\n const o = {\n project: this.config(KEY_DOMAIN) || Woopra.getHostnameNoWww(),\n instance: this.instanceName,\n meta: Woopra.docCookies.getItem('wooMeta') || '',\n screen: `${window.screen.width}x${window.screen.height}`,\n language:\n window.navigator.browserLanguage || window.navigator.language || '',\n app: this.config(KEY_APP),\n referer: document.referrer\n };\n\n if (!this.config(KEY_DOMAIN)) {\n o._warn = 'no_domain';\n\n if (Woopra.getHostnameNoWww() !== Woopra.getDomain()) {\n o._warn += ',domain_mismatch';\n }\n }\n\n // set cookie if configured\n if (this.config(KEY_USE_COOKIES)) {\n o.cookie = this.getCookie() || this.cookie;\n }\n\n // set ip if configured\n if (this.config(KEY_IP)) {\n o.ip = this.config(KEY_IP);\n }\n\n return o;\n }\n\n /**\n * Stop ping timers and cleanup any globals. Shouldn't really\n * be needed by clients.\n */\n dispose() {\n this.stopPing();\n\n for (const id in this.__l) {\n if (this.__l.hasOwnProperty(id)) {\n removeHandler(id, this.instanceName);\n }\n }\n this.__l = null;\n\n // cleanup global\n if (!isUndefined(window[this.instanceName])) {\n try {\n delete window[this.instanceName];\n } catch (e) {\n window[this.instanceName] = undefined;\n }\n }\n }\n}\n","import { isFunction, isUndefined } from 'lodash-es';\n\nimport attachGlobalEvents from './lib/global-events';\nimport Tracker from './tracker';\nimport Woopra from './woopra';\n\nif (!window.WoopraTracker) attachGlobalEvents();\n\nwindow.WoopraTracker = Tracker;\nwindow.WoopraLoadScript = Woopra.loadScript;\n\nif (!isUndefined(window.exports)) {\n Woopra.Tracker = Tracker;\n window.exports.Woopra = Woopra;\n\n if (isFunction(window.woopraLoaded)) {\n window.woopraLoaded();\n window.woopraLoaded = null;\n }\n}\n\n// Initialize instances & preloaded settings/events\nconst _queue = window.__woo || window._w;\nif (!isUndefined(_queue)) {\n for (const name in _queue) {\n if (_queue.hasOwnProperty(name)) {\n const instance = new Tracker(name);\n instance.init();\n\n // DO NOT REMOVE\n // compatibility with old tracker and chat\n if (isUndefined(window.woopraTracker)) {\n window.woopraTracker = instance;\n }\n }\n }\n}\n"],"names":["isUndefined","value","undefined","freeGlobal","global","Object","freeSelf","self","root","Function","Symbol","objectProto","prototype","hasOwnProperty","nativeObjectToString","toString","symToStringTag","toStringTag","nullTag","undefinedTag","baseGetTag","isOwn","call","tag","unmasked","e","result","getRawTag","objectToString","isObject","type","asyncTag","funcTag","genTag","proxyTag","isFunction","now","Date","reWhitespace","reTrimStart","baseTrim","string","slice","index","length","test","charAt","trimmedEndIndex","replace","isObjectLike","symbolTag","isSymbol","NAN","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","parseInt","toNumber","other","valueOf","isBinary","FUNC_ERROR_TEXT","nativeMax","Math","max","nativeMin","min","debounce","func","wait","options","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","TypeError","invokeFunc","time","args","thisArg","apply","shouldInvoke","timeSinceLastCall","timerExpired","trailingEdge","setTimeout","timeWaiting","remainingWait","debounced","isInvoking","arguments","this","leadingEdge","clearTimeout","cancel","flush","ENDPOINTS","_ENDPOINTS","XDM_PARAM_NAME","CAMPAIGN_KEYS","SECOND_LEVEL_TLDS","RANDOM_STRING_CHARS","URL_ID_REGEX","RegExp","LIFECYCLE_ACTION","LIFECYCLE_PAGE","SCROLL_DEPTH","ACTION_PV","IDPTNC","TARGET_BLANK","DATA_TRACKED_ATTRIBUTE","ACTION_PROPERTY_PREFIX","ORG_PROPERTY_PREFIX","ENDPOINT_TRACK","ENDPOINT_UPDATE","PAGE_LIFECYCLE_STATE_ACTIVE","PAGE_LIFECYCLE_STATE_PASSIVE","PAGE_LIFECYCLE_STATE_HIDDEN","PAGE_LIFECYCLE_STATE_FROZEN","PAGE_LIFECYCLE_STATE_TERMINATED","EVENT_BEFOREUNLOAD","EVENT_BLUR","EVENT_CLICK","EVENT_DOWNLOAD","EVENT_FOCUS","EVENT_FREEZE","EVENT_LINK_CLICK","EVENT_MOUSEMOVE","EVENT_OUTGOING","EVENT_PAGEHIDE","EVENT_PAGESHOW","EVENT_RESUME","EVENT_SCROLL","EVENT_STATECHANGE","EVENT_UNLOAD","EVENT_VISIBILITYCHANGE","KEY_APP","KEY_APPIER_APP_ID","KEY_AUTO_DECORATE","KEY_BEACONS","KEY_CAMPAIGN_ONCE","KEY_CLICK_TRACKING_MATCHER_SELECTORS","KEY_CLICK_PAUSE","KEY_CONTEXT","KEY_COOKIE_DOMAIN","KEY_COOKIE_EXPIRE","KEY_COOKIE_NAME","KEY_COOKIE_PATH","KEY_COOKIE_SECURE","KEY_CROSS_DOMAIN","KEY_DOMAIN","KEY_DOWNLOAD_EXTENSIONS","KEY_DOWNLOAD_PAUSE","KEY_DOWNLOAD_TRACKING","KEY_FORM_PAUSE","KEY_HIDE_CAMPAIGN","KEY_HIDE_XDM_DATA","KEY_IDLE_THRESHOLD","KEY_IDLE_TIMEOUT","KEY_IGNORE_QUERY_URL","KEY_MAP_QUERY_PARAMS","KEY_OUTGOING_IGNORE_SUBDOMAIN","KEY_OUTGOING_PAUSE","KEY_OUTGOING_TRACKING","KEY_PERSONALIZATION","KEY_PING","KEY_PING_INTERVAL","KEY_PROTOCOL","KEY_REGION","KEY_SAVE_URL_HASH","KEY_THIRD_PARTY","KEY_USE_COOKIES","META_CANCELLED","META_DIRTY","META_DURATION","META_EXPIRED","META_LEAVE","META_RETRACK","META_SENT","META_TIMESTAMP","ACTION_PROPERTY_ALIASES","DEFAULT_DOWNLOAD_EXTENSIONS","ELEMENT_MATCHER_LINK","ELEMENT_MATCHER_CLICK","globals","_KEY_AUTO_DECORATE$KE","handlers","removeHandler","id","instance","addEventListener","element","callback","on","parent","event","instanceName","__l","push","fire","handler","_l","_event","i","Array","EventTargetShim","_registry","_proto","listener","opts","_getRegistry","removeEventListener","typeRegistry","handlerIndex","indexOf","splice","dispatchEvent","evt","target","freeze","forEach","StateChangeEvent","initDict","newState","oldState","originalEvent","IS_SAFARI","safari","pushNotification","SUPPORTS_PAGE_TRANSITION_EVENTS","EVENTS","onbeforeunload","preventDefault","returnValue","LEGAL_STATE_TRANSITIONS","map","arr","reduce","acc","val","idx","getCurrentState","document","visibilityState","hasFocus","PageLifecycle$1","_EventTargetShim","PageLifecycle","_this","state","_state","_unsavedChanges","_handleEvents","bind","_assertThisInitialized","_safariBeforeUnloadTimeout","defaultPrevented","_dispatchChangesIfNeeded","_proto2","addUnsavedChanges","removeUnsavedChanges","idIndex","path","order","oldIndex","newIndex","keys","getLegalStateTransitionPath","persisted","key","get","wasDiscarded","isArray","stringTag","isString","transform","getPrototype","getPrototypeOf","arg","objectTag","funcProto","funcToString","objectCtorString","isPlainObject","proto","Ctor","constructor","nativeIsFinite","isFinite","randomString","s","rnum","floor","random","substring","isLeftClick","window","_isUndefined","which","button","metaKey","altKey","ctrlKey","shiftKey","getElement","selector","_options","_isString","el","querySelectorAll","getElementById","substr","getElementsByClassName","prefixObjectKeys","object","prefix","blacklist","obj","isBlacklisted","jsonStringifyObjectValues","_isPlainObject","_isArray","JSON","stringify","_unused","getScrollDepth","scrollHeight","body","scrollDepth","scrollY","innerHeight","callCallback","action","console","error","stack","matchesElement","matcher","some","sel","matches","findParentElement","elem","tagName","parentNode","getDOMPath","count","childNodes","siblingElement","nodeName","toLowerCase","hasAttribute","unshift","join","onClick","srcElement","getAttribute","onMouseDown","onMouseMove","onScroll","_throttle","onPageStateChange","noop","WoopraAction","woopra","params","meta","update","lastArg","_extends","$action","cancelAction","baseClamp","number","lower","upper","INFINITY","symbolProto","symbolToString","baseToString","array","iteratee","arrayMap","MAX_INTEGER","toInteger","toFinite","remainder","hasItem","sKey","encodeURIComponent","cookie","decodeURIComponent","aKeys","split","nLen","nIdx","sPath","sDomain","sValue","vEnd","bSecure","sExpires","Number","Infinity","String","toUTCString","TYPE_BUTTON","TYPE_SUBMIT","TYPE_RESET","removeScript","script","removeChild","Woopra","getHostname","location","docCookies","property","historyReplaceState","history","replaceState","data","title","url","hideUrlParams","regex","href","getUrlParams","vars","m","buildUrlParams","p","getCustomData","method","getDomain","hostname","domain","lastIndexOf","getHostnameNoWww","isOutgoingLink","targetHostname","currentHostname","currentDomain","startsWith","hideCrossDomainId","mapQueryParams","mapping","redirect","link","getCampaignData","campaign","hideCampaignData","leftClick","loadScript","errorCallback","_noop","createElement","async","onreadystatechange","onload","onerror","readyState","src","appendChild","head","serializeForm","form","exclude","elements","name","checked","j","selected","_on","_fire","attachEvent","position","endsWith","end","Tracker","_this$options","visitorData","sessionData","orgData","_isFunction","navigator","sendBeacon","setDate","getDate","idle","last_activity","loaded","dirtyCookie","sentCampaign","version","pending","beaconQueue","lastAction","init","_processQueue","_setupCookie","_bindEvents","config","_wpt","__woo","_w","_e","events","url_id","getUrlId","getCookie","setItem","_this2","downloaded","onLink","l","moved","outgoing","autoDecorate","_dataSetter","dataStore","_isObject","getVisitorUrlData","identify","getItem","getProtocol","protocol","getEndpoint","Error","thirdPartyPath","region","endpoint","visit","orgKey","orgValue","visitorProperties","identifyOrg","funcName","_push","_meta","_this3","types","lifecycle","getOptionParams","eventName","close","timeout","_step","rawData","_iterator","_createForOfIteratorHelperLoose","done","_step$value","original","alias","eventData","_types$i","newData","org","contextData","fullEventData","dirty","Boolean","useBeacon","isUnloading","retrack","beforeCallback","item","queue","sendBeacons","scriptUrl","track","hash","onSuccess","onBeforeSend","onError","getPageUrl","getPageTitle","getDomainName","uri","getURI","returning","getPageHash","augmentAction","startPing","idptnc","_eventData","_step2","project","_iterator2","_step2$value","_this$lastAction","hasCancelled","_extends2","trackForm","els","_this4","bindEl","ev","props","trackFormHandler","trackFinished","properties","personData","noSubmit","setAttribute","stopPropagation","timer","submit","trackClick","_this5","trackClickHandler","noNav","click","_this6","pingInterval","setInterval","ping","stopPing","clearInterval","_updateDurations","updateDuration","_ref2","_ref3","_ref4","_ref","_processLifecycle","_extends5","_this7","toRetrack","_extends3","filter","successCallback","_extends4","_drainBeaconQueue","_this8","useCookies","isEmptyBeaconParams","rest","_objectWithoutPropertiesLoose","_toPropertyKey","idMap","toSend","items","_this8$lastAction","duration","round","payloads","_ref5","line","Blob","size","payload","formData","FormData","append","sleep","_touch","clickTarget","customProperties","getAttributeNames","text","innerText","textContent","tagname","classname","className","pointerType","downloadTypes","isDownloadFileType","pathname","onUnload","pv","xdm","canDecorate","domains","decorated","decorate","reset","removeItem","query","host","search","port","undecorate","_url","getElementsByTagName","innerHTML","match","o","screen","width","height","language","browserLanguage","app","referer","referrer","_warn","ip","dispose","WoopraTracker","WoopraLoadScript","exports","woopraLoaded","_queue","woopraTracker"],"mappings":";;;;;yBAiBA,SAASA,EAAYC,GACnB,YAAiBC,IAAVD,CACT,CClBA,IAAIE,EAA8B,iBAAVC,QAAsBA,QAAUA,OAAOC,SAAWA,QAAUD,OCEhFE,EAA0B,iBAARC,MAAoBA,MAAQA,KAAKF,SAAWA,QAAUE,KAGxEC,EAAOL,GAAcG,GAAYG,SAAS,cAATA,GCHjCC,EAASF,EAAKE,OCAdC,EAAcN,OAAOO,UAGrBC,EAAiBF,EAAYE,eAO7BC,EAAuBH,EAAYI,SAGnCC,EAAiBN,EAASA,EAAOO,iBAAcf,ECfnD,IAOIY,EAPcT,OAAOO,UAOcG,SCHvC,IAAIG,EAAU,gBACVC,EAAe,qBAGfH,EAAiBN,EAASA,EAAOO,iBAAcf,EASnD,SAASkB,EAAWnB,GAClB,OAAa,MAATA,OACeC,IAAVD,EAAsBkB,EAAeD,EAEtCF,GAAkBA,KAAkBX,OAAOJ,GFGrD,SAAmBA,GACjB,IAAIoB,EAAQR,EAAeS,KAAKrB,EAAOe,GACnCO,EAAMtB,EAAMe,GAEhB,IACEf,EAAMe,QAAkBd,EACxB,IAAIsB,GAAW,CACjB,CAAE,MAAOC,GAAI,CAEb,IAAIC,EAASZ,EAAqBQ,KAAKrB,GAQvC,OAPIuB,IACEH,EACFpB,EAAMe,GAAkBO,SAEjBtB,EAAMe,IAGVU,CACT,CEpBMC,CAAU1B,GDNhB,SAAwBA,GACtB,OAAOa,EAAqBQ,KAAKrB,EACnC,CCKM2B,CAAe3B,EACrB,CCAA,SAAS4B,EAAS5B,GAChB,IAAI6B,SAAc7B,EAClB,OAAgB,MAATA,IAA0B,UAAR6B,GAA4B,YAARA,EAC/C,CCxBA,IAAIC,EAAW,yBACXC,EAAU,oBACVC,EAAS,6BACTC,EAAW,iBAmBf,SAASC,EAAWlC,GAClB,IAAK4B,EAAS5B,GACZ,OAAO,EAIT,IAAIsB,EAAMH,EAAWnB,GACrB,OAAOsB,GAAOS,GAAWT,GAAOU,GAAUV,GAAOQ,GAAYR,GAAOW,CACtE,CChBA,IAAIE,EAAM,WACR,OAAO5B,EAAK6B,KAAKD,KACnB,ECnBIE,EAAe,KCEnB,IAAIC,EAAc,OASlB,SAASC,EAASC,GAChB,OAAOA,EACHA,EAAOC,MAAM,EDHnB,SAAyBD,GAGvB,IAFA,IAAIE,EAAQF,EAAOG,OAEZD,KAAWL,EAAaO,KAAKJ,EAAOK,OAAOH,MAClD,OAAOA,CACT,CCFsBI,CAAgBN,GAAU,GAAGO,QAAQT,EAAa,IAClEE,CACN,CCQA,SAASQ,EAAahD,GACpB,OAAgB,MAATA,GAAiC,iBAATA,CACjC,CCtBA,IAAIiD,EAAY,kBAmBhB,SAASC,EAASlD,GAChB,MAAuB,iBAATA,GACXgD,EAAahD,IAAUmB,EAAWnB,IAAUiD,CACjD,CCrBA,IAAIE,EAAM,IAGNC,EAAa,qBAGbC,EAAa,aAGbC,EAAY,cAGZC,EAAeC,SAyBnB,SAASC,EAASzD,GAChB,GAAoB,iBAATA,EACT,OAAOA,EAET,GAAIkD,EAASlD,GACX,OAAOmD,EAET,GAAIvB,EAAS5B,GAAQ,CACnB,IAAI0D,EAAgC,mBAAjB1D,EAAM2D,QAAwB3D,EAAM2D,UAAY3D,EACnEA,EAAQ4B,EAAS8B,GAAUA,EAAQ,GAAMA,CAC3C,CACA,GAAoB,iBAAT1D,EACT,OAAiB,IAAVA,EAAcA,GAASA,EAEhCA,EAAQuC,EAASvC,GACjB,IAAI4D,EAAWP,EAAWT,KAAK5C,GAC/B,OAAQ4D,GAAYN,EAAUV,KAAK5C,GAC/BuD,EAAavD,EAAMyC,MAAM,GAAImB,EAAW,EAAI,GAC3CR,EAAWR,KAAK5C,GAASmD,GAAOnD,CACvC,CCxDA,IAAI6D,EAAkB,sBAGlBC,EAAYC,KAAKC,IACjBC,EAAYF,KAAKG,IAwDrB,SAASC,EAASC,EAAMC,EAAMC,GAC5B,IAAIC,EACAC,EACAC,EACAhD,EACAiD,EACAC,EACAC,EAAiB,EACjBC,GAAU,EACVC,GAAS,EACTC,GAAW,EAEf,GAAmB,mBAARX,EACT,MAAM,IAAIY,UAAUnB,GAUtB,SAASoB,EAAWC,GAClB,IAAIC,EAAOZ,EACPa,EAAUZ,EAKd,OAHAD,EAAWC,OAAWvE,EACtB2E,EAAiBM,EACjBzD,EAAS2C,EAAKiB,MAAMD,EAASD,EAE/B,CAqBA,SAASG,EAAaJ,GACpB,IAAIK,EAAoBL,EAAOP,EAM/B,YAAyB1E,IAAjB0E,GAA+BY,GAAqBlB,GACzDkB,EAAoB,GAAOT,GANJI,EAAON,GAM8BH,CACjE,CAEA,SAASe,IACP,IAAIN,EAAO/C,IACX,GAAImD,EAAaJ,GACf,OAAOO,EAAaP,GAGtBR,EAAUgB,WAAWF,EA3BvB,SAAuBN,GACrB,IAEIS,EAActB,GAFMa,EAAOP,GAI/B,OAAOG,EACHb,EAAU0B,EAAalB,GAJDS,EAAON,IAK7Be,CACN,CAmBqCC,CAAcV,GACnD,CAEA,SAASO,EAAaP,GAKpB,OAJAR,OAAUzE,EAIN8E,GAAYR,EACPU,EAAWC,IAEpBX,EAAWC,OAAWvE,EACfwB,EACT,CAcA,SAASoE,IACP,IAAIX,EAAO/C,IACP2D,EAAaR,EAAaJ,GAM9B,GAJAX,EAAWwB,UACXvB,EAAWwB,KACXrB,EAAeO,EAEXY,EAAY,CACd,QAAgB7F,IAAZyE,EACF,OAzEN,SAAqBQ,GAMnB,OAJAN,EAAiBM,EAEjBR,EAAUgB,WAAWF,EAAcnB,GAE5BQ,EAAUI,EAAWC,GAAQzD,CACtC,CAkEawE,CAAYtB,GAErB,GAAIG,EAIF,OAFAoB,aAAaxB,GACbA,EAAUgB,WAAWF,EAAcnB,GAC5BY,EAAWN,EAEtB,CAIA,YAHgB1E,IAAZyE,IACFA,EAAUgB,WAAWF,EAAcnB,IAE9B5C,CACT,CAGA,OA3GA4C,EAAOZ,EAASY,IAAS,EACrBzC,EAAS0C,KACXO,IAAYP,EAAQO,QAEpBJ,GADAK,EAAS,YAAaR,GACHR,EAAUL,EAASa,EAAQG,UAAY,EAAGJ,GAAQI,EACrEM,EAAW,aAAcT,IAAYA,EAAQS,SAAWA,GAoG1Dc,EAAUM,OApCV,gBACkBlG,IAAZyE,GACFwB,aAAaxB,GAEfE,EAAiB,EACjBL,EAAWI,EAAeH,EAAWE,OAAUzE,CACjD,EA+BA4F,EAAUO,MA7BV,WACE,YAAmBnG,IAAZyE,EAAwBjD,EAASgE,EAAatD,IACvD,EA4BO0D,CACT,CCxLA,MCJO,MAIMQ,IAASC,EAAA,CAAA,GACV,GAAG,wBAAuBA,EAC1B,GAAG,mCAAkCA,EACrC,GAAG,mCAAkCA,GAEpCC,EAAiB,aACjBC,EAAgB,CAC3B,WACA,UACA,KACA,SACA,SACA,QAEWC,EAAoB,CAC/B,SACA,SACA,SACA,QACA,SACA,QACA,SACA,SACA,QACA,QACA,SACA,QACA,UAEWC,EACX,iEAGWC,EAAe,IAAIC,OAAOL,EAAiB,aAE3CM,EAAmB,SACnBC,EAAiB,OAEjBC,EAAe,eAEfC,EAAY,KAEZC,EAAS,SAETC,EAAe,SAEfC,EAAyB,eAEzBC,EAAyB,MAGzBC,EAAsB,MAEtBC,GAAiB,KACjBC,GAAkB,SAGlBC,GAA8B,SAC9BC,GAA+B,UAC/BC,GAA8B,SAC9BC,GAA8B,SAC9BC,GAAkC,aAElCC,GAAqB,eACrBC,GAAa,OACbC,GAAc,QACdC,GAAiB,WACjBC,GAAc,QACdC,GAAe,SACfC,GAAmB,OAEnBC,GAAkB,YAClBC,GAAiB,WACjBC,GAAiB,WACjBC,GAAiB,WACjBC,GAAe,SACfC,GAAe,SACfC,GAAoB,cACpBC,GAAe,SACfC,GAAyB,mBAEzBC,GAAU,MACVC,GAAoB,gBAEpBC,GAAoB,gBACpBC,GAAc,UACdC,GAAoB,gBACpBC,GACX,mCACWC,GAAkB,cAElBC,GAAc,UACdC,GAAoB,gBACpBC,GAAoB,gBACpBC,GAAkB,cAClBC,GAAkB,cAClBC,GAAoB,gBACpBC,GAAmB,eACnBC,GAAa,SACbC,GAA0B,sBAC1BC,GAAqB,iBACrBC,GAAwB,oBACxBC,GAAiB,aACjBC,GAAoB,gBACpBC,GAAoB,gBACpBC,GAAqB,iBACrBC,GAAmB,eACnBC,GAAuB,mBAEvBC,GAAuB,mBACvBC,GAAgC,4BAChCC,GAAqB,iBACrBC,GAAwB,oBACxBC,GAAsB,kBACtBC,GAAW,OACXC,GAAoB,gBACpBC,GAAe,WACfC,GAAa,SACbC,GAAoB,gBACpBC,GAAkB,cAClBC,GAAkB,cAElBC,GAAiB,YACjBC,GAAa,QACbC,GAAgB,WAChBC,GAAe,UACfC,GAAa,QACbC,GAAe,UACfC,GAAY,OACZC,GAAiB,YAEjBC,GAA0B,CACrC,CAACxE,EAAQA,GACT,CAAC,YAAa,YACd,CAAC,UAAW0C,IACZ,CAAC,OAAQd,IACT,CAAC,aAAc,aACf,CAAC,UAAW,SACZ,CAACC,GAAmBA,KAGT4C,GAA8B,CACzC,MACA,MACA,MACA,MACA,MACA,MACA,KACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OACA,OAGWC,GAAuB,CAAC,KAExBC,GAAwB,CACnC,IACA,SACA,qBACA,qBACA,iBC5KFC,KAAAC,EAAAA,CAAAA,GACG/C,SAAoB9I,EAAS6L,EAC7BhC,KAAwB,EAAKgC,EAC7BxB,KAAgC,EAAIwB,EACpCtB,KAAwB,EAAKsB,GCX1BC,GAAW,CAAA,EAEV,SAASC,GAAcC,EAAIC,GAChCH,GAASE,GAAIC,GAAY,IAC3B,CAEO,SAASC,GAAiBC,EAASvK,EAAMwK,GACnC,MAAPD,GAAAA,EAASD,kBACXC,EAAQD,iBAAiBtK,EAAMwK,EAEnC,CAEO,SAASC,GAAGC,EAAQC,EAAOH,GAChC,IAAMJ,EAAKM,EAAOE,aAEbV,GAASS,KACZT,GAASS,GAAS,IAEpBT,GAASS,GAAOP,GAAMM,EAElBA,EAAOG,MACJH,EAAOG,IAAIF,KACdD,EAAOG,IAAIF,GAAS,IAEtBD,EAAOG,IAAIF,GAAOG,KAAKN,GAE3B,CAEO,SAASO,GAAKJ,GACnB,IAAIK,EAEAC,EADEC,EAAShB,GAASS,GAGxB,GAAIO,EACF,IAAK,IAAMd,KAAMc,EACf,GAAIA,EAAOnM,eAAeqL,KAExBa,GADAD,EAAUE,EAAOd,KACDY,EAAQH,MACdI,EAAGN,GACX,IAAK,IAAIQ,EAAI,EAAGA,EAAIF,EAAGN,GAAO7J,OAAQqK,IACpCF,EAAGN,GAAOQ,GAAG3H,MAAMW,KAAMiH,MAAMtM,UAAU8B,MAAMpB,KAAK0E,UAAW,GAM3E,kpDCRsB,IAEhBmH,GAAe,WAInB,SAAAA,IACElH,KAAKmH,UAAY,EACnB,CAEA,IAAAC,EAAAF,EAAAvM,UAiDC,OAjDDyM,EAOAjB,iBAAA,SAAiBtK,EAAMwL,EAAUC,GAC/BtH,KAAKuH,aAAa1L,GAAM8K,KAAKU,EAC/B,EAEAD,EAOAI,oBAAA,SAAoB3L,EAAMwL,EAAUC,GAClC,IAAMG,EAAezH,KAAKuH,aAAa1L,GACjC6L,EAAeD,EAAaE,QAAQN,GACtCK,GAAgB,GAClBD,EAAaG,OAAOF,EAAc,EAEtC,EAEAN,EAKAS,cAAA,SAAcC,GAMZ,OAJAA,EAAIC,OAAS/H,KACb5F,OAAO4N,OAAOF,GAEd9H,KAAKuH,aAAaO,EAAIjM,MAAMoM,SAAQ,SAACZ,GAAQ,OAAKA,EAASS,OACpD,CACT,EAEAV,EAOAG,aAAA,SAAa1L,GACX,OAAQmE,KAAKmH,UAAUtL,GAAQmE,KAAKmH,UAAUtL,IAAS,IACxDqL,CAAA,CAzDkB,GA4DfgB,GACJ,SAAYrM,EAAMsM,GAChBnI,KAAKnE,KAAOA,EACZmE,KAAKoI,SAAWD,EAASC,SACzBpI,KAAKqI,SAAWF,EAASE,SACzBrI,KAAKsI,cAAgBH,EAASG,aAChC,EAIIC,GAA8B,iBAAXC,QAAuBA,OAAOC,iBAEjDC,GAAkC,eAAgBpO,KAElDqO,GAAS,CACb1G,GACAH,GACAc,GACAV,GACAM,GACAD,GAIAmG,GAAkCpG,GAAiBK,IAO/CiG,GAAiB,SAACd,GAEtB,OADAA,EAAIe,iBACIf,EAAIgB,YAAc,eAC5B,EAiBMC,GAA0B,CAE9B,CACEvH,GACAC,GACAC,GACAE,IAKF,CACEJ,GACAC,GACAC,GACAC,IAIF,CACED,GACAD,GACAD,IAIF,CAACG,GAA6BD,IAI9B,CAACC,GAA6BH,IAC9B,CAACG,GAA6BF,KAC9BuH,KAzCsB,SAACC,GAAG,OAC1BA,EAAIC,QAAO,SAACC,EAAKC,EAAKC,GAEpB,OADAF,EAAIC,GAAOC,EACJF,CACR,GAAE,CAAE,EAAC,IA0EFG,GAAkB,WACtB,OAAIC,SAASC,kBAAoB9H,GACxBA,GAEL6H,SAASE,WACJjI,GAEFC,EACT,EA0KeiI,GAAA,aArKIC,WAKjB,SAAAC,IAAc,IAAAC,EACZA,EAAAF,EAAAtO,YAAO2E,KAEP,IAAM8J,EAAQR,KA0Bb,OAxBDO,EAAKE,OAASD,EACdD,EAAKG,gBAAkB,GAGvBH,EAAKI,cAAgBJ,EAAKI,cAAcC,8HAAIC,CAAAN,IAG5ClB,GAAOV,SAAQ,SAACH,GAAG,OAAK3B,iBAAiB2B,EAAK+B,EAAKI,eAAe,MAS9D1B,IACFpC,iBAAiBtE,IAAoB,SAACiG,GACpC+B,EAAKO,2BAA6B1K,YAAW,WACrCoI,EAAIuC,kBAAoBvC,EAAIgB,YAAYnM,OAAS,GACrDkN,EAAKS,yBAAyBxC,EAAKpG,GAEtC,GAAE,EACL,IACDmI,CACH,GAnCiBF,KAAAC,0EAqCjB,UAAAW,EAAAX,EAAAjP,UAeC,OAED4P,EAIAC,kBAAA,SAAkBvE,IAGXjG,KAAKgK,gBAAgBrC,QAAQ1B,IAAO,IAGH,IAAhCjG,KAAKgK,gBAAgBrN,QACvBwJ,iBAAiBtE,GAAoB+G,IAEvC5I,KAAKgK,gBAAgBrD,KAAKV,GAE9B,EAEAsE,EAIAE,qBAAA,SAAqBxE,GACnB,IAAMyE,EAAU1K,KAAKgK,gBAAgBrC,QAAQ1B,GAEzCyE,GAAW,IACb1K,KAAKgK,gBAAgBpC,OAAO8C,EAAS,GAGD,IAAhC1K,KAAKgK,gBAAgBrN,QACvB6K,oBAAoB3F,GAAoB+G,IAG9C,EAEA2B,EAKAD,yBAAA,SAAyBhC,EAAeF,GACtC,GAAIA,IAAapI,KAAK+J,OAIpB,IAHA,IACMY,EAvIwB,SAACtC,EAAUD,GAG7C,IAAK,IAAIwC,EAAO5D,EAAI,EAAI4D,EAAQ7B,GAAwB/B,KAAOA,EAAG,CAChE,IAAM6D,EAAWD,EAAMvC,GACjByC,EAAWF,EAAMxC,GAEvB,GAAIyC,GAAY,GAAKC,GAAY,GAAKA,EAAWD,EAG/C,OAAOzQ,OAAO2Q,KAAKH,GAAOnO,MAAMoO,EAAUC,EAAW,EAEzD,CACA,MAAO,EAIT,CAsHmBE,CADIhL,KAAK+J,OAC6B3B,GAE1CpB,EAAI,EAAGA,EAAI2D,EAAKhO,OAAS,IAAKqK,EAAG,CACxC,IAAMqB,EAAWsC,EAAK3D,GAChBoB,EAAWuC,EAAK3D,EAAI,GAE1BhH,KAAK+J,OAAS3B,EACdpI,KAAK6H,cACH,IAAIK,GAAiB,cAAe,CAClCG,SAAAA,EACAD,SAAAA,EACAE,cAAAA,IAGN,CAEJ,EAEAiC,EAIAN,cAAA,SAAcnC,GAKZ,OAJIS,IACFrI,aAAaF,KAAKoK,4BAGZtC,EAAIjM,MACV,KAAK0G,GACL,KAAKC,GACHxC,KAAKsK,yBAAyBxC,EAAKwB,MACnC,MACF,KAAKrH,GACHjC,KAAKsK,yBAAyBxC,EAAKtG,IACnC,MACF,KAAKM,GAGC9B,KAAK+J,SAAWvI,IAClBxB,KAAKsK,yBAAyBxC,EAAKwB,MAErC,MACF,KAAKhH,GACL,KAAKK,GACH3C,KAAKsK,yBACHxC,EACAA,EAAImD,UACAtJ,GACAC,IAEN,MACF,KAAKgB,GAKD5C,KAAK+J,SAAWpI,IAChB3B,KAAK+J,SAAWnI,IAEhB5B,KAAKsK,yBAAyBxC,EAAKwB,MAErC,MACF,KAAKpH,GACHlC,KAAKsK,yBAAyBxC,EAAKnG,QAGxCiI,KAAA,CAAA,CAAAsB,IAAA,QAAAC,IA1HD,WACE,OAAOnL,KAAK+J,MACd,GAEA,CAAAmB,IAAA,mBAAAC,IAMA,WACE,OAAO5B,SAAS6B,eAAgB,CAClC,sFAACxB,CAAA,EApDyB1C,KClNxBmE,GAAUpE,MAAMoE,QClBhBC,GAAY,kBAmBhB,SAASC,GAASvR,GAChB,MAAuB,iBAATA,IACVqR,GAAQrR,IAAUgD,EAAahD,IAAUmB,EAAWnB,IAAUsR,EACpE,CCxBA,ICKiBlN,GAAMoN,GDLnBC,ICKarN,GDLUhE,OAAOsR,eCKXF,GDL2BpR,OCMzC,SAASuR,GACd,OAAOvN,GAAKoN,GAAUG,MCLtBC,GAAY,kBAGZC,GAAYrR,SAASG,UACrBD,GAAcN,OAAOO,UAGrBmR,GAAeD,GAAU/Q,SAGzBF,GAAiBF,GAAYE,eAG7BmR,GAAmBD,GAAazQ,KAAKjB,QA8BzC,SAAS4R,GAAchS,GACrB,IAAKgD,EAAahD,IAAUmB,EAAWnB,IAAU4R,GAC/C,OAAO,EAET,IAAIK,EAAQR,GAAazR,GACzB,GAAc,OAAViS,EACF,OAAO,EAET,IAAIC,EAAOtR,GAAeS,KAAK4Q,EAAO,gBAAkBA,EAAME,YAC9D,MAAsB,mBAARD,GAAsBA,aAAgBA,GAClDJ,GAAazQ,KAAK6Q,IAASH,EAC/B,CCxDA,IAAIK,GAAiB7R,EAAK8R,SCanB,SAASC,KAGd,IAFA,IAAIC,EAAI,GAECvF,EAAI,EAAGA,EAAI,GAAIA,IAAK,CAC3B,IAAMwF,EAAOzO,KAAK0O,MAAsB/L,GAAhB3C,KAAK2O,UAC7BH,GAAK7L,EAAoBiM,UAAUH,EAAMA,EAAO,EAClD,CAEA,OAAOD,CACT,CAEO,SAASK,GAAY9E,GAI1B,YAJ6B,IAAHA,IAAAA,EAAM+E,OAAOrG,SAEnCsG,EAAYhF,EAAIiF,QAAwB,IAAdjF,EAAIiF,QAC9BD,EAAYhF,EAAIkF,SAA0B,IAAflF,EAAIkF,UACjBlF,EAAImF,UAAYnF,EAAIoF,SAAWpF,EAAIqF,UAAYrF,EAAIsF,QACvE,CAQO,SAASC,GAAWC,EAAUhP,GACnC,IAAMiP,EAAWC,GAASF,GAAYhP,GAAW,CAAE,EAAGgP,GAAY,GAElE,GAAIC,EAASE,GACX,OAAOF,EAASE,GACX,GAAID,GAASF,GAAW,CAC7B,GAAI/D,SAASmE,iBACX,OAAOnE,SAASmE,iBAAiBJ,GAC5B,GAAoB,MAAhBA,EAAS,GAClB,OAAO/D,SAASoE,eAAeL,EAASM,OAAO,IAC1C,GAAoB,MAAhBN,EAAS,GAClB,OAAO/D,SAASsE,uBAAuBP,EAASM,OAAO,GAE3D,CACF,CAEO,SAASE,GAAiBC,EAAQC,EAAQC,GAC/C,IAAMC,EAAM,CAAA,EAEZ,GAAIpB,EAAYiB,GAAS,OAAOG,EAEhC,IAAK,IAAMhD,KAAO6C,EAChB,GAAIA,EAAOnT,eAAesQ,GAAM,CAK9B,IAJA,IAAMlR,EAAQ+T,EAAO7C,GAEjBiD,GAAgB,EAEXnH,EAAI,EAAGA,EAAIiH,EAAUtR,OAAQqK,IACpC,GAAIiH,EAAUjH,GAAG,KAAOkE,EAAK,CAC3BiD,GAAgB,EAChB,KACF,CAICA,GACS,cAAVnU,GACU,SAAVA,GACC8S,EAAY9S,KAEbkU,KAAOF,EAAS9C,GAASlR,EAE7B,CAGF,OAAOkU,CACT,CAEO,SAASE,GAA0BL,GACxC,IAAMG,EAAM,CAAA,EAEZ,GAAIpB,EAAYiB,GAAS,OAAOG,EAEhC,IAAK,IAAMhD,KAAO6C,EAChB,GAAIA,EAAOnT,eAAesQ,GACxB,GAAImD,GAAcN,EAAO7C,KAASoD,GAAQP,EAAO7C,IAC/C,IACEgD,EAAIhD,GAAOqD,KAAKC,UAAUT,EAAO7C,GAClC,CAAC,MAAAuD,GACAP,EAAIhD,GAAO6C,EAAO7C,EACpB,MACKgD,EAAIhD,GAAO6C,EAAO7C,GAI7B,OAAOgD,CACT,CAEO,SAASQ,KACd,ID9EgB1U,EC8ER2U,EAAiBpF,SAASqF,KAA1BD,aAEFE,IACFhC,OAAOiC,SAAW,GAAKjC,OAAOkC,aAAeJ,EAEjD,OAAO5Q,KAAKC,IAAI,EAAGD,KAAKG,IAAI,EDlFL,iBADPlE,ECmFwB6U,IDlFLzC,GAAepS,GCkFK6U,EAAc,GACvE,CAEO,SAASG,GAAa3I,EAAU4I,GACrC,IACE5I,GACD,CAAC,MAAO7K,GACP0T,QAAQC,MAAK,mBAAoBF,EAAiB,aAClDC,QAAQC,MAAM3T,EAAE4T,MAClB,CACF,CAEA,SAASC,GAAejJ,EAASkJ,GAC/B,OAAOA,EAAQC,MAAK,SAACC,GAAG,OAAKpJ,EAAQqJ,QAAQD,KAC/C,CAEO,SAASE,GAAkBtJ,EAASkJ,GAGzC,IAFA,IAAIK,EAAOvJ,IAEH0G,EAAY6C,IAAkB,OAATA,GACvBA,EAAKC,SAAWP,GAAeM,EAAML,KAEzCK,EAAOA,EAAKE,WAGd,OAAOF,CACT,CAMO,SAASG,GAAW1J,GAKzB,IAJA,IAAMgJ,EAAQ,GAEVO,EAAOvJ,EAEJuJ,EAAKE,YAAY,CAItB,IAHA,IAAIE,EAAQ,EACRrT,EAAQ,EAEHsK,EAAI,EAAGA,EAAI2I,EAAKE,WAAWG,WAAWrT,OAAQqK,IAAK,CAC1D,IAAMiJ,EAAiBN,EAAKE,WAAWG,WAAWhJ,GAE9CiJ,EAAeC,WAAaP,EAAKO,WAC/BD,IAAmBN,IAAMjT,EAAQqT,GAErCA,IAEJ,CAEA,IAAMG,EAAWP,EAAKO,SAASC,cAE3BR,EAAKS,aAAa,OAAST,EAAK1J,GAClCmJ,EAAMiB,QAAWH,MAAYP,EAAK1J,IACzB8J,EAAQ,EACjBX,EAAMiB,QAAWH,EAAYxT,IAAAA,OAE7B0S,EAAMiB,QAAQH,GAGhBP,EAAOA,EAAKE,UACd,CAEA,OAAOT,EAAM3S,MAAM,GAAG6T,KAAK,MAC7B,CC/JA,SAASC,GAAQ/U,GACf,IAAImU,EAAOnU,EAAEgV,YAAchV,EAAEuM,OAEzB6E,GAAYpR,IACdoL,GAAK7E,GAAavG,EAAGmU,IAGnB9J,GAAQ/B,KAA0B+B,GAAQrB,OAIzCsI,EAHH6C,EAAOD,GAAkBlU,EAAEgV,YAAchV,EAAEuM,OAAQpC,MAIxC,OAATgK,GACCA,EAAKc,aAAatP,IAEnByF,GAAKzE,GAAkB3G,EAAGmU,GAGhC,CAEA,SAASe,GAAYlV,GACnB,IAAImU,EAEJ/I,GAAKxE,GAAiB5G,EAAGY,KAAKD,OAE1B0J,GAAQ9C,MAGL+J,EAFL6C,EAAOD,GAAkBlU,EAAEgV,YAAchV,EAAEuM,OAAQpC,MAEhB,OAATgK,GACxB/I,GAAK7D,GAAmB4M,GAG9B,CAEA,SAASgB,GAAYnV,GACnBoL,GAAKxE,GAAiB5G,EAAGY,KAAKD,MAChC,CAEA,IAAMyU,GZRN,SAAkBxS,EAAMC,EAAMC,GAC5B,IAAIO,GAAU,EACVE,GAAW,EAEf,GAAmB,mBAARX,EACT,MAAM,IAAIY,UAnDQ,uBAyDpB,OAJIpD,EAAS0C,KACXO,EAAU,YAAaP,IAAYA,EAAQO,QAAUA,EACrDE,EAAW,aAAcT,IAAYA,EAAQS,SAAWA,GAEnDZ,EAASC,EAAMC,EAAM,CAC1BQ,QAAWA,EACXJ,QAAWJ,EACXU,SAAYA,GAEhB,CYRiB8R,EAAS,SAAkBrV,GAC1CoL,GAAKnE,GAAcjH,EACrB,GAAG,KAEH,SAASsV,GAAkBtV,GACzBoL,GAAKlE,GAAmBlH,EAC1B,CCpDA,SAASuV,KACP,KCbmBC,GAAY,WAC/B,SAAAA,EAAYC,EAAQhL,EAAIiL,EAAQC,GAC9BnR,KAAKiR,OAASA,EACdjR,KAAKiG,GAAKA,EACVjG,KAAKkR,OAASA,EACdlR,KAAKmR,KAAOA,CACd,CAAC,IAAA/J,EAAA4J,EAAArW,UAgBA,OAhBAyM,EAEDgK,OAAA,SAAO9S,EAAc+S,QAAP,IAAP/S,IAAAA,EAAU,CAAA,GACXA,EAAQkI,OAASlI,EAAQkI,QAAUxG,KAAKkR,OAAO1K,QACjDxG,KAAKkR,OAAO1K,MAAQlI,EAAQkI,OAG9BxG,KAAKiR,OAAOG,OACVpR,KAAKiG,GAAEqL,GAAA,CAAA,EACFhT,EAAO,CAAEiT,QAASvR,KAAKkR,OAAO1K,QACnC6K,IAEHjK,EAEDjH,OAAA,WACEH,KAAKiR,OAAOO,aAAaxR,KAAKiG,KAC/B+K,CAAA,CAtB8B,GCSjC,SAASS,GAAUC,EAAQC,EAAOC,GAShC,OARIF,GAAWA,SACCzX,IAAV2X,IACFF,EAASA,GAAUE,EAAQF,EAASE,QAExB3X,IAAV0X,IACFD,EAASA,GAAUC,EAAQD,EAASC,IAGjCD,CACT,CCbA,IAAIG,GAAW,IAGXC,GAAcrX,EAASA,EAAOE,eAAYV,EAC1C8X,GAAiBD,GAAcA,GAAYhX,cAAWb,EAU1D,SAAS+X,GAAahY,GAEpB,GAAoB,iBAATA,EACT,OAAOA,EAET,GAAIqR,GAAQrR,GAEV,OClBJ,SAAkBiY,EAAOC,GAKvB,IAJA,IAAIxV,GAAS,EACTC,EAAkB,MAATsV,EAAgB,EAAIA,EAAMtV,OACnClB,EAASwL,MAAMtK,KAEVD,EAAQC,GACflB,EAAOiB,GAASwV,EAASD,EAAMvV,GAAQA,EAAOuV,GAEhD,OAAOxW,CACT,CDSW0W,CAASnY,EAAOgY,IAAgB,GAEzC,GAAI9U,EAASlD,GACX,OAAO+X,GAAiBA,GAAe1W,KAAKrB,GAAS,GAEvD,IAAIyB,EAAUzB,EAAQ,GACtB,MAAkB,KAAVyB,GAAkB,EAAIzB,IAAW6X,GAAY,KAAOpW,CAC9D,CE/BA,IAAIoW,GAAW,IACXO,GAAc,sBCwBlB,SAASC,GAAUrY,GACjB,IAAIyB,EDAN,SAAkBzB,GAChB,OAAKA,GAGLA,EAAQyD,EAASzD,MACH6X,IAAY7X,KAAW6X,IACvB7X,EAAQ,GAAK,EAAI,GACfoY,GAETpY,GAAUA,EAAQA,EAAQ,EAPd,IAAVA,EAAcA,EAAQ,CAQjC,CCVesY,CAAStY,GAClBuY,EAAY9W,EAAS,EAEzB,OAAOA,GAAWA,EAAU8W,EAAY9W,EAAS8W,EAAY9W,EAAU,CACzE,CCVA,SAASX,GAASd,GAChB,OAAgB,MAATA,EAAgB,GAAKgY,GAAahY,EAC3C,CC6DO,SAASwY,GAAQC,GACtB,QAAKA,GAGE,IAAI7R,OACT,cACE8R,mBAAmBD,GAAM1V,QAAQ,cAAe,QAChD,WACFH,KAAK2M,SAASoJ,OAClB,8CAvEO,SAAiBF,GACtB,OAAKA,GAIHG,mBACErJ,SAASoJ,OAAO5V,QACd,IAAI6D,OACF,mBACE8R,mBAAmBD,GAAM1V,QAAQ,cAAe,QAChD,+BAEJ,QAVG,IAcX,kBAyDO,WAIL,IAHA,IAAM8V,EAAQtJ,SAASoJ,OACpB5V,QAAQ,0DAA2D,IACnE+V,MAAM,uBACAC,EAAOF,EAAMlW,OAAQqW,EAAO,EAAGA,EAAOD,EAAMC,IACnDH,EAAMG,GAAQJ,mBAAmBC,EAAMG,IAEzC,OAAOH,CACT,aA/BO,SAAoBJ,EAAMQ,EAAOC,GACtC,QAAKV,GAAQC,KAGblJ,SAASoJ,OACPD,mBAAmBD,GACnB,4CACCS,EAAU,YAAcA,EAAU,KAClCD,EAAQ,UAAYA,EAAQ,KACxB,EACT,UA1CO,SAAiBR,EAAMU,EAAQC,EAAMH,EAAOC,EAASG,GAC1D,IAAKZ,GAAQ,6CAA6C7V,KAAK6V,GAC7D,OAAO,EAET,IAAIa,EAAW,GACf,GAAIF,EACF,OAAQA,EAAKjH,aACX,KAAKoH,OACHD,EACEF,IAASI,IACL,0CACA,aAAeJ,EACrB,MACF,KAAKK,OACHH,EAAW,aAAeF,EAC1B,MACF,KAAKhX,KACHkX,EAAW,aAAeF,EAAKM,cAYrC,OARAnK,SAASoJ,OACPD,mBAAmBD,GACnB,IACAC,mBAAmBS,GACnBG,GACCJ,EAAU,YAAcA,EAAU,KAClCD,EAAQ,UAAYA,EAAQ,KAC5BI,EAAU,WAAa,KACnB,CACT,ICxEMM,GAAc,SACdC,GAAc,SACdC,GAAa,QCAZ,SAASC,GAAaC,GACvBA,GAAUA,EAAOlE,YACnBkE,EAAOlE,WAAWmE,YAAYD,EAElC,CCSA,IAAME,GAAS,CAAA,EAkBf,SAASC,KACP,OAAOD,GAAOE,SAAS,WACzB,CAlBAF,GAAOG,WAAaA,GAKpBH,GAAOE,SAAW,SAAkBE,EAAUra,GAE5C,IAAK8S,EAAYD,OAAOsH,SAASE,IAAY,CAC3C,GAAKvH,EAAY9S,GAGf,OAAO6S,OAAOsH,SAASE,GAFvBxH,OAAOsH,SAASE,GAAYra,CAIhC,CACF,EASAia,GAAOK,oBACLzH,OAAO0H,SAAW1H,OAAO0H,QAAQC,aAC7B,SAA6BC,EAAMC,EAAOC,GACxC,OAAO9H,OAAO0H,QAAQC,aAAaC,EAAMC,EAAOC,EAClD,EACA,WAAY,EAQlBV,GAAOW,cAAgB,SAAuB1D,GAC5C,IAAM2D,EAAQ,IAAIjU,OACJsQ,YAAAA,EAAOZ,KAAK,KAAI,oBAC5B,MAEIwE,EAAOb,GAAOE,SAAS,QAAQpX,QAAQ8X,EAAO,IAIpD,OAFAZ,GAAOK,oBAAoB,KAAM,KAAMQ,GAEhCA,CACT,EAOAb,GAAOc,aAAe,WACpB,IAAMC,EAAO,CAAA,EACPF,EAAOb,GAAOE,SAAS,QAQ7B,OANIW,GACFA,EAAK/X,QAAQ,2BAA2B,SAAUkY,EAAG/J,EAAKlR,GACxDgb,EAAK9J,GAAO0H,mBAAmB5Y,EAAM8Y,MAAM,KAAKxC,KAAK,KACvD,IAGK0E,CACT,EAEAf,GAAOiB,eAAiB,SAAwBhE,EAAQlD,QAAM,IAANA,IAAAA,EAAS,IAC/D,IAAMmH,EAAI,GAEV,GAAIrI,EAAYoE,GACd,OAAOA,EAGT,IAAK,IAAMhG,KAAOgG,EACZA,EAAOtW,eAAesQ,KAEN,cAAhBgG,EAAOhG,IACS,SAAhBgG,EAAOhG,IACN4B,EAAYoE,EAAOhG,KAEpBiK,EAAExO,KAAI,GACDqH,EAAS0E,mBAAmBxH,GAAI,IAAIwH,mBACrCxB,EAAOhG,MAMjB,OAAOiK,EAAE7E,KAAK,IAChB,EAQA2D,GAAOmB,cAAgB,SAAuBC,EAAQrH,QAAM,IAANA,IAAAA,EAAS,OAC7D,IAAMgH,EAAOf,GAAOc,eAEpB,IAAK,IAAM/N,KAAKgO,EACd,GAAIA,EAAKpa,eAAeoM,GAAI,CAC1B,IAAMhN,EAAQgb,EAAKhO,GAEnB,GAAIA,EAAE2F,UAAU,EAAGqB,EAAOrR,UAAYqR,EAAQ,CAC5C,IAAM9C,EAAMlE,EAAE2F,UAAUqB,EAAOrR,QAC/B0Y,EAAOha,KAAK2E,KAAMkL,EAAKlR,EACzB,CACF,CAEJ,EAQAia,GAAOqB,UAAY,SAAmBC,QAAQ,IAARA,IAAAA,EAAWrB,MAC/C,IAAMsB,EAASD,EAAS5I,UACtB4I,EAASE,YAAY,IAAKF,EAASE,YAAY,KAAO,GAAK,GAI7D,OAA2C,IAAvChV,EAAkBkH,QAAQ6N,GACrBD,EAAS5I,UACd4I,EAASE,YAAY,IAAKF,EAAS5N,QAAQ6N,GAAU,GAAK,GAIvDA,CACT,EAKAvB,GAAOyB,iBAAmB,WACxB,IAAMH,EAAWrB,KAEjB,OAAiC,IAA7BqB,EAAS5N,QAAQ,QACZ4N,EAASxY,QAAQ,OAAQ,IAG3BwY,CACT,EAKAtB,GAAO0B,eAAiB,SAAwBC,GAC9C,IAAMC,EAAkB3B,KAClB4B,EAAgB7B,GAAOqB,UAAUO,GAEvC,QACED,IAAmBC,GACnBD,EAAe7Y,QAAQ,SAAU,MAC/B8Y,EAAgB9Y,QAAQ,SAAU,KAClC8I,GAAQvB,KACRwR,IAAkB7B,GAAOqB,UAAUM,IACpC3B,GAAO8B,WAAWH,EAAgB,eAChB,KAAnBA,GACmB,MAAnBA,EAEJ,EAEA3B,GAAO+B,kBAAoB,WACzB,OAAO/B,GAAOW,cAAc,CAACrU,GAC/B,EAEA0T,GAAOgC,eAAiB,SAAwBC,GAC9C,IAAMlB,EAAOf,GAAOc,eACd7D,EAAS,CAAA,EAEf,IAAK,IAAMhG,KAAOgL,EAAS,CACzB,IAAMlc,EAAQgb,EAAK9J,GACd4B,EAAY9S,KACfkX,EAAOgF,EAAQhL,IAAQlR,EAE3B,CAEA,OAAOkX,CACT,EAEA+C,GAAOkC,SAAW,SAAkBC,GAClCnC,GAAOE,SAAS,OAAQiC,EAC1B,EAQAnC,GAAOoC,gBAAkB,WAIvB,IAHA,IAAMrB,EAAOf,GAAOc,eACduB,EAAW,CAAA,EAERtP,EAAI,EAAGA,EAAIxG,EAAc7D,OAAQqK,IAAK,CAC7C,IAAMkE,EAAM1K,EAAcwG,GACpBhN,EAAQgb,EAAY9J,OAAAA,IAAU8J,EAAY9J,OAAAA,GAE3C4B,EAAY9S,KACfsc,EAAQ,aAAqB,aAARpL,EAAqB,OAASA,IAASlR,EAEhE,CAEA,OAAOsc,CACT,EAMArC,GAAOsC,iBAAmB,WACxB,OAAOtC,GAAOW,cAAc,CAAC,MAAO,OAAQ,QAC9C,EAEAX,GAAOuC,UAAY5J,GACnBqH,GAAO3H,aAAeA,GACtB2H,GAAO5G,WAAaA,GACpB4G,GAAOwC,WDlOA,SAAoB9B,EAAKtO,EAAiBqQ,QAAT,IAARrQ,IAAAA,EAAQsQ,SAAsB,IAAbD,IAAAA,EAAaC,IAC5D,IAAM5C,EAASxK,SAASqN,cAAc,UAEtC7C,EAAOlY,KAAO,kBACdkY,EAAO8C,OAAQ,EAEV/J,EAAYiH,EAAO+C,qBAQtB/C,EAAOgD,OAAS,WACd1Q,IACAyN,GAAaC,IAEfA,EAAOiD,QAAU,SAACxb,GAChBkb,EAAclb,GACdsY,GAAaC,KAbfA,EAAO+C,mBAAqB,WAVL,IAACG,GACX,KADWA,EAWCjX,KAAKiX,aAVG,aAAfA,GAA4C,WAAfA,KAW3C5Q,IACAyN,GAAaC,KAcnBA,EAAOmD,IAAMvC,EAETpL,SAASqF,KAAMrF,SAASqF,KAAKuI,YAAYpD,GACxCxK,SAAS6N,KAAKD,YAAYpD,EACjC,ECuMAE,GAAOH,aAAeA,GACtBG,GAAOoD,cFzOA,SAAuBC,EAAMhZ,GAClC,QADyC,IAAPA,IAAAA,EAAU,CAAA,GACvCgZ,GAA0B,SAAlBA,EAAKpH,SAAlB,CAOA,IAHA,IAAMqH,EAAUjZ,EAAQiZ,SAAW,GAC7B9C,EAAO,CAAA,EAEJzN,EAAIsQ,EAAKE,SAAS7a,OAAS,EAAGqK,GAAK,EAAGA,GAAQ,EACrD,KAC4B,KAA1BsQ,EAAKE,SAASxQ,GAAGyQ,MACjBF,EAAQ5P,QAAQ2P,EAAKE,SAASxQ,GAAGyQ,OAAS,GAI5C,OAAQH,EAAKE,SAASxQ,GAAGkJ,UACvB,IAAK,QACH,OAAQoH,EAAKE,SAASxQ,GAAGnL,MACvB,IAAK,OACL,IAAK,SACL,KAAK8X,GACL,KAAKE,GACL,KAAKD,GACHa,EAAK6C,EAAKE,SAASxQ,GAAGyQ,MAAQH,EAAKE,SAASxQ,GAAGhN,MAC/C,MACF,IAAK,WACL,IAAK,QACCsd,EAAKE,SAASxQ,GAAG0Q,UACnBjD,EAAK6C,EAAKE,SAASxQ,GAAGyQ,MAAQH,EAAKE,SAASxQ,GAAGhN,OAMrD,MACF,IAAK,WACHya,EAAK6C,EAAKE,SAASxQ,GAAGyQ,MAAQH,EAAKE,SAASxQ,GAAGhN,MAC/C,MACF,IAAK,SACH,OAAQsd,EAAKE,SAASxQ,GAAGnL,MACvB,IAAK,aACH4Y,EAAK6C,EAAKE,SAASxQ,GAAGyQ,MAAQH,EAAKE,SAASxQ,GAAGhN,MAC/C,MACF,IAAK,kBACH,IACE,IAAI2d,EAAIL,EAAKE,SAASxQ,GAAG1I,QAAQ3B,OAAS,EAC1Cgb,GAAK,EACLA,GAAQ,EAEJL,EAAKE,SAASxQ,GAAG1I,QAAQqZ,GAAGC,WAC9BnD,EAAK6C,EAAKE,SAASxQ,GAAGyQ,MAAQH,EAAKE,SAASxQ,GAAG1I,QAAQqZ,GAAG3d,OAKlE,MACF,IAAK,SACH,OAAQsd,EAAKE,SAASxQ,GAAGnL,MACvB,KAAKgY,GACL,KAAKD,GACL,KAAKD,GACHc,EAAK6C,EAAKE,SAASxQ,GAAGyQ,MAAQH,EAAKE,SAASxQ,GAAGhN,OAMzD,OAAOya,CAhEP,CAiEF,EEsKAR,GAAO4D,IAAMvR,GACb2N,GAAO6D,MAAQlR,GACfqN,GAAO8D,YAAc5R,GACrB8N,GAAO8B,WCvNP,SAAoBvZ,EAAQuL,EAAQiQ,GAOlC,OANAxb,EAAS1B,GAAS0B,GAClBwb,EAAuB,MAAZA,EACP,EACAvG,GAAUY,GAAU2F,GAAW,EAAGxb,EAAOG,QAE7CoL,EAASiK,GAAajK,GACfvL,EAAOC,MAAMub,EAAUA,EAAWjQ,EAAOpL,SAAWoL,CAC7D,EDgNAkM,GAAOgE,SExNP,SAAkBzb,EAAQuL,EAAQiQ,GAChCxb,EAAS1B,GAAS0B,GAClBuL,EAASiK,GAAajK,GAEtB,IAAIpL,EAASH,EAAOG,OAKhBub,EAJJF,OAAwB/d,IAAb+d,EACPrb,EACA8U,GAAUY,GAAU2F,GAAW,EAAGrb,GAItC,OADAqb,GAAYjQ,EAAOpL,SACA,GAAKH,EAAOC,MAAMub,EAAUE,IAAQnQ,CACzD,ECoEA,IAAMnB,GAAOqN,GAAO6D,MAECK,GAAO,WAC1B,SAAAA,EAAY1R,GAAc,IAAA2R,EACxBpY,KAAKqY,YAAc,GACnBrY,KAAKsY,YAAc,GACnBtY,KAAKuY,QAAU,GAEfvY,KAAK1B,UAAO8Z,EAAA,CAAA,GACTvV,IAAU,YAAWuV,EACrBpV,IhByBEwV,EAAWC,UAAUC,YgBzBSN,EAChCnV,KAAoB,EAAKmV,EACzBlV,IAAuC0C,GAAqBwS,EAC5D/U,IAAiB,IAAO4Q,GAAOyB,mBAAkB0C,EACjD9U,IAAoB,IAAIlH,MACvB,IAAIA,MAAOuc,SAAQ,IAAIvc,MAAOwc,UAAY,MAC3CR,EACA7U,IAAkB,aAAY6U,EAC9B5U,IAAkB,IAAG4U,EACrB3U,IAAoD,WAAhCwQ,GAAOE,SAAS,YAAwBiE,EAC5D1U,KAAmB,EAAK0U,EACxBxU,IAA0B8B,GAA2B0S,EACrDvU,IAAqB,IAAGuU,EACxBtU,KAAwB,EAAKsU,EAC7BpU,KAAoB,EAAKoU,EACzBnU,KAAoB,EAAKmU,EACzBlU,IAAqB,IAAUkU,EAC/BjU,IAAmB,IAAeiU,EAClChU,KAAuB,EAAKgU,EAC5B/T,IAAuB,CAAE,EAAA+T,EACzB9T,KAAgC,EAAI8T,EACpC7T,IAAqB,IAAG6T,EACxB5T,KAAwB,EAAK4T,EAC7B3T,KAAsB,EAAI2T,EAC1BzT,IAAoB,KAAUyT,EAC9B1T,KAAW,EAAK0T,EAChBxT,IAAe,QAAOwT,EACtBvT,I1BhJkB,K0BgJIuT,EACtBtT,KAAoB,EAAIsT,EACxBrT,KAAkB,EAAKqT,EACvBjV,IAAkB,IAAGiV,EACrBrU,IAAiB,IAAGqU,EACpBpT,KAAkB,EAAIoT,GAGzBpY,KAAKyG,aAAeA,GAAgB,SACpCzG,KAAK6Y,KAAO,EACZ7Y,KAAK2S,OAAS,GACd3S,KAAK8Y,cAAgB1c,KAAKD,MAC1B6D,KAAK+Y,QAAS,EACd/Y,KAAKgZ,aAAc,EACnBhZ,KAAKiZ,cAAe,EACpBjZ,KAAKkZ,Q1BhKc,G0BiKnBlZ,KAAKmZ,QAAU,GACfnZ,KAAKoZ,YAAc,GACnBpZ,KAAKqZ,WAAa,KAEd5S,GAAiC,KAAjBA,IAClBoG,OAAOpG,GAAgBzG,KAE3B,CAAC,IAAAoH,EAAA+Q,EAAAxd,UAkkDA,OAlkDAyM,EAEDkS,KAAA,WAAO,IAAAzP,EAAA7J,KACLA,KAAK0G,IAAM,GACX1G,KAAKuZ,cAAc,UACnBvZ,KAAKwZ,eACLxZ,KAAKyZ,cAIL/Z,YAAW,WAAA,OAAMmK,EAAK0P,eAAe,GAAE,GAEvCvZ,KAAK+Y,QAAS,EAEd,IAAM1S,EAAWrG,KAAK0Z,OAAO,eAEzBlB,EAAWnS,IACbA,EAASrG,KAAKyG,cAKZzG,KAAK0Z,OAAOzV,KACdgQ,GAAO+B,mBAEX,EAEA5O,EAIAmS,cAAA,SAAc1d,GACZ,IAAI8d,EAAO9M,OAAO+M,MAAQ/M,OAAO+M,MAAM5Z,KAAKyG,cAAgBkT,EAM5D,IALAA,EAAO9M,OAAOgN,GAAKhN,OAAOgN,GAAG7Z,KAAKyG,cAAgBkT,IAKtCA,EAAKG,GAEf,IADA,IAAMC,EAASJ,EAAKG,GACX9S,EAAI,EAAGA,EAAI+S,EAAOpd,OAAQqK,IAAK,CACtC,IAAMiI,EAAS8K,EAAO/S,GAEnB8F,EAAYmC,KACbjP,KAAKiP,EAAO,MACXnC,EAAYjR,IAASA,IAASoT,EAAO,IAEtCjP,KAAKiP,EAAO,IAAI5P,MAAMW,KAAMiH,MAAMtM,UAAU8B,MAAMpB,KAAK4T,EAAQ,GAEnE,CAEJ,EAEA7H,EAGAoS,aAAA,WACE,IAAMQ,EAASha,KAAKia,WAEpBja,KAAK2S,OAAS3S,KAAKka,YAGfF,IACFha,KAAK2S,OAASqH,KAIXha,KAAK2S,QAAU3S,KAAK2S,OAAOhW,OAAS,KACvCqD,KAAK2S,OAASrG,MAGhB2H,GAAOG,WAAW+F,QAChBna,KAAK0Z,OAAOnW,IACZvD,KAAK2S,OACL3S,KAAK0Z,OAAOpW,IACZtD,KAAK0Z,OAAOlW,IACZxD,KAAK0Z,OAAOrW,IACZrD,KAAK0Z,OAAOjW,KAGdzD,KAAKgZ,aAAc,CACrB,EAEA5R,EAGAqS,YAAA,WAAc,IAAAW,EAAApa,KACZsG,GAAGtG,KAAM+B,IAAa,SAACvG,GAAC,OAAK4e,EAAK7J,QAAQ/U,MAC1C8K,GAAGtG,KAAMgC,IAAgB,SAAC2S,GAAG,OAAKyF,EAAKC,WAAW1F,MAClDrO,GAAGtG,KAAMmC,IAAkB,SAAC3G,EAAG4a,GAAI,OAAKgE,EAAKE,OAAO9e,EAAG4a,MACvD9P,GAAGtG,KAAMoC,IAAiB,SAAC5G,EAAG+e,GAAC,OAAKH,EAAKI,MAAMhf,EAAG+e,MAClDjU,GAAGtG,KAAMqC,IAAgB,SAACsS,GAAG,OAAKyF,EAAKK,SAAS9F,MAChDrO,GAAGtG,KAAMyC,IAAc,SAACkN,GAAI,OAAKyK,EAAKxJ,SAASjB,MAC/CrJ,GAAGtG,KAAM0C,IAAmB,SAAClH,GAAC,OAAK4e,EAAKtJ,kBAAkBtV,MAC1D8K,GAAGtG,KAAM+C,IAAmB,SAAC4M,GAAI,OAAKyK,EAAKM,aAAa/K,KAC1D,EAEAvI,EAQAuT,YAAA,SAAYC,EAAW1P,EAAKlR,GAC1B,GAAI8S,EAAY5B,GACd,OAAO0P,EAGT,GAAI9N,EAAY9S,GAAQ,CACtB,GAAIwT,GAAStC,GACX,OAAO0P,EAAU1P,GAEnB,GAAI2P,EAAS3P,GACX,IAAK,IAAMlE,KAAKkE,EACVA,EAAItQ,eAAeoM,KACjBiN,GAAO8B,WAAW/O,EAAG,aACvBhH,KAAKgZ,aAAc,GAErB4B,EAAU5T,GAAKkE,EAAIlE,GAI3B,MACMiN,GAAO8B,WAAW7K,EAAK,aACzBlL,KAAKgZ,aAAc,GAErB4B,EAAU1P,GAAOlR,EAGnB,OAAOgG,MACRoH,EAED0T,kBAAA,WACE7G,GAAOmB,cAAc/Z,KAAK2E,KAAMA,KAAK+a,SAAU,MACjD,EAEA3T,EAGA8S,UAAA,WACE,OAAOjG,GAAOG,WAAW4G,QAAQhb,KAAK0Z,OAAOnW,MAC9C6D,EAED6T,YAAA,WACE,IAAMC,EAAWlb,KAAK0Z,OAAO9U,IAC7B,OAAOsW,GAAyB,KAAbA,EAAqBA,MAAc,EACxD,EAEA9T,EAIA+T,YAAA,SAAYxQ,QAAI,IAAJA,IAAAA,EAAO,IACjB,IAAMuQ,EAAWlb,KAAKib,cAEtB,GAAIjb,KAAK0Z,OAAO3U,MAAqB/E,KAAK0Z,OAAO/V,IAC/C,MAAM,IAAIyX,MAAM,+BAGlB,IAAIC,EAAiBrb,KAAK0Z,OAAO3U,IACvB,MAAA/E,KAAK0Z,OAAO/V,IAClB,GAEAgH,IAASsJ,GAAOgE,SAAStN,EAAM,OACjCA,GAAQ,KAGN0Q,IAAmBpH,GAAO8B,WAAWpL,EAAM,OAC7C0Q,GAAkB,KAGpB,IAAMC,EAAStb,KAAK0Z,OAAO7U,IACrB0W,EAAWlb,EAAUib,GAE3B,IAAKC,EAAU,MAAM,IAAIH,MAAK,0BAA2BE,GAEzD,OAAUJ,EAAaK,KAAAA,EAAWF,EAAiB1Q,CACrD,EAEAvD,EAGAsS,OAAA,SAAOxO,EAAKlR,GACV,IAAMya,EAAOzU,KAAK2a,YAAY3a,KAAK1B,QAAS4M,EAAKlR,GA2BjD,OAxBIya,IAASzU,OAEXA,KAAK1B,QAAQqG,IAAqB5G,KAAKC,I1BnUZ,I0BqUzBD,KAAKG,IAAI8B,KAAK1B,QAAQqG,I1BpUG,M0ByU3BkB,GAAQrB,IAAyBxE,KAAK1B,QAAQkG,IAC9CqB,GAAQ/B,IAAyB9D,KAAK1B,QAAQwF,IAC9C+B,GAAQ9C,IACN+J,EAAYjH,GAAQ9C,MACpB/C,KAAK1B,QAAQoF,IACT1D,KAAK1B,QAAQoF,IACbmC,GAAQ9C,IACd8C,GAAQvB,IACNtE,KAAK1B,QAAQgG,IAEXtE,KAAKgZ,aAAehZ,KAAK+Y,QAC3B/Y,KAAKwZ,gBAIF/E,CACT,EAEArN,EAIAoU,MAAA,SAAMtQ,EAAKlR,GACT,OAAOgG,KAAK2a,YAAY3a,KAAKsY,YAAapN,EAAKlR,EACjD,EAEAoN,EAGA2T,SAAA,WACE,IAAI7P,OAAMjR,EACND,OAAQC,EACRwhB,OAASxhB,EACTyhB,OAAWzhB,EAGX4gB,EAAA9a,UAAApD,QAAA1C,OAAAA,EAAA8F,UAAgB,KAAK8a,EAAA9a,UAAApD,QAAA,OAAA1C,EAAA8F,UAAgB,KACvCmL,EAAGnL,UAAApD,eAAA1C,EAAA8F,UAAU,GACb0b,EAAM1b,UAAApD,eAAA1C,EAAA8F,UAAU,IAGT8a,EAAA9a,UAAApD,QAAA1C,OAAAA,EAAA8F,UAAgB,KAAKyN,GAAAzN,UAAApD,QAAA,OAAA1C,EAAA8F,UAAgB,KAC5CmL,EAAGnL,UAAApD,eAAA1C,EAAA8F,UAAU,GACb0b,EAAM1b,UAAApD,eAAA1C,EAAA8F,UAAU,GAChB2b,EAAQ3b,UAAApD,eAAA1C,EAAA8F,UAAU,IAGXyN,GAAAzN,UAAApD,QAAA1C,OAAAA,EAAA8F,eAAqByN,GAAAzN,UAAApD,QAAA1C,OAAAA,EAAA8F,UAAA,KAAqB8a,EAAA9a,UAAApD,eAAA1C,EAAA8F,UAAA,KACjDmL,EAAGnL,UAAApD,eAAA1C,EAAA8F,UAAU,GACb/F,EAAK+F,UAAApD,eAAA1C,EAAA8F,UAAU,GACf0b,EAAM1b,UAAApD,eAAA1C,EAAA8F,UAAU,KAIhBmL,EAAGnL,UAAApD,eAAA1C,EAAA8F,UAAU,GACb/F,EAAK+F,UAAApD,eAAA1C,EAAA8F,UAAU,GACf0b,EAAM1b,UAAApD,eAAA1C,EAAA8F,UAAU,GAChB2b,EAAQ3b,UAAApD,eAAA1C,EAAA8F,UAAU,IAGpB,IAAM4b,EAAoB3b,KAAK2a,YAAY3a,KAAKqY,YAAanN,EAAKlR,GAIlE,OAFIyhB,GAAQzb,KAAK2a,YAAY3a,KAAKuY,QAASkD,EAAQC,GAE5CC,CACT,EAEAvU,EAGAwU,YAAA,SAAY1Q,EAAKlR,GACf,OAAOgG,KAAK2a,YAAY3a,KAAKuY,QAASrN,EAAKlR,EAC7C,EAEAoN,EAGA/L,KAAA,SAAKwgB,GACCrD,EAAWxY,KAAK6b,KAClB7b,KAAK6b,GAAUxc,MAAMW,KAAMiH,MAAMtM,UAAU8B,MAAMpB,KAAK0E,UAAW,GAErE,EAEAqH,EAGA0U,MAAA,SAAMxd,GAAc,IAAAyd,EAAAC,EAAAhc,UAAP,IAAP1B,IAAAA,EAAU,CAAA,GACd,IAAM2d,EAAQ,CACZ,CAAC,c1B/YgC,O0BgZjC,CAAC,YAAa7a,GACd,CAAC,c1BlZ8B,O0BmZ/B,CAAC,UAAWC,IAGVoT,EAAO,CAAA,EAEL8G,EAAWvb,KAAKmb,YAAY7c,EAAQid,UACpCW,EAAY5d,EAAQ4d,WAAarb,EAGvCb,KAAK8a,oBAED9a,KAAK0Z,OAAO1V,KACdiQ,GAAOsC,mBAITvW,KAAK2a,YAAYlG,EAAMzU,KAAKmc,mBAGxB7d,EAAQ8d,YACV3H,EAAKjO,MAAQlI,EAAQ8d,WAIlBpc,KAAK0Z,OAAOjV,MACfgQ,EAAK4H,OAAQ,GAGf5H,EAAK6H,QAAUxP,EAAYxO,EAAQge,SAC/Btc,KAAK0Z,OAAOvV,IACZ7F,EAAQge,QAIZ,IAFA,IAEuDC,EAFjDC,EAAU,CAAA,EAEhBC,EAAAC,GAAgCjX,MAAuB8W,EAAAE,KAAAE,MAAE,CAAA,IAAAC,EAAAL,EAAAviB,MAA7C6iB,EAAQD,EAAA,GAAEE,EAAKF,EAAA,GACrBte,EAAQye,WAAaze,EAAQye,UAAUF,KACzCL,EAAQM,GAASxe,EAAQye,UAAUF,GAEvC,CAEA7c,KAAK2a,YAAYlG,EAAM+H,GAEvB,IAAK,IAAIxV,EAAI,EAAGA,EAAIiV,EAAMtf,OAAQqK,IAAK,CACrC,IAAAgW,EAAsBf,EAAMjV,GAArBkE,EAAG8R,EAAA,GAAEhP,EAAMgP,EAAA,GAEZC,EAAU7O,GACdN,GACExP,EAAQ4M,GACR8C,EACAA,IAAW5M,EAAyBqE,GAA0B,KAKhEuI,IAAW3M,GACX4b,EAAW5b,UAEX4b,EAAQC,IAAMD,EAAW5b,EAAwB,aAC1C4b,EAAW5b,EAAwB,OAG5CrB,KAAK2a,YAAYlG,EAAMwI,EACzB,CAEA,GAAIjd,KAAK0Z,OAAOtW,IACd,IACE,IAAM+Z,EAAc5O,KAAKC,UAAUxO,KAAK0Z,OAAOtW,KAC/CqR,EAAKrR,IAAesP,mBAAmByK,EACzC,CAAE,MAAO3hB,GAAI,CAGX8C,EAAQ8e,gBAAe3I,EAAOnW,EAAQ8e,eAE1C,IAAMC,EAAQC,QAAQhf,EAAQif,WAAavd,KAAKwd,aAE1CrM,IAAI4K,EAAA,IACP7W,IAAamY,EAAKtB,EAClB5W,IAAgB,EAAC4W,EACjBzW,IAAegY,QAAQhf,EAAQmf,SAAQ1B,EACvCxW,KAAa8X,EAAKtB,EAClBvW,IAAiBpJ,KAAKD,MAAK4f,GAGxB9M,EAAS,IAAI+B,GAAahR,KAAMyU,EAAKxT,GAASwT,EAAMtD,GAEpD9K,EAAWmS,EAAWla,EAAQ+H,UAChC,WAAA,OAAM/H,EAAQ+H,SAAS4I,EAAO,EAAA0H,GAE5B+G,EAAiBlF,EAAWla,EAAQof,gBACtC,WAAA,OAAMpf,EAAQof,eAAezO,EAAO,EAAA0H,GAElCD,EAAgBpY,EAAQoY,eAAaC,GA2B3C,GAxBIuF,IAAcpb,GAChBd,KAAKmZ,QAAQlR,SAAQ,SAAC0V,GAChBA,EAAKzB,YAAcpb,GAAkB6c,EAAKxe,KAAK4d,UAAU9b,IAC3D+a,EAAKxK,aAAamM,EAAKxe,KAAK4d,UAAU9b,GAE1C,KAGEib,IAAcpb,GAAkBxC,EAAQif,WAAavd,KAAKwd,cAC5Dxd,KAAKmZ,QAAQxS,KAAK,CAChBuV,UAAAA,EACAX,SAAUjd,EAAQid,SAClBrK,OAAQuD,EACRtV,KAAMb,EACN6S,KAAAA,EACA9K,SAAAA,EACAqQ,cAAAA,IAIAwF,IAAcpb,GAAkBxC,EAAQid,WAAaja,KACvDtB,KAAKqZ,WAAapK,GAGhBjP,KAAKwd,aAAgBlf,EAAQif,YAAcjf,EAAQsf,MACrD5d,KAAK6d,mBACA,IAAKvf,EAAQsf,MAAO,CACzB,IACME,EAAevC,EAAQ,IADTtH,GAAOiB,eAAeT,GAM1CR,GAAOwC,WAAWqH,GAHA,WAAH,OAAS9O,GAAa3I,EAAUoO,EAAKjO,MAAM,IAC1C,WAAH,OAASwI,GAAa0H,EAAejC,EAAKjO,MAAM,GAG/D,CAEA9G,YAAW,WAAA,OAAMsP,GAAa0O,EAAgBjJ,EAAKjO,SACrD,EAEAY,EAGA2W,MAAA,SAAMtG,EAAMnZ,GACV,IAEI0f,EACA3X,EACAqX,EACAhH,EAKA4F,EACAmB,EAXAV,EAAY,CAAA,EACZX,EAAY,GAKV/K,EAAUtR,UAAUA,UAAUpD,OAAS,GACzCuf,EAAYrb,EACZ+c,GAAQ,EACRL,GAAY,EAIZ/E,EAAWnH,GAAUhL,EAAWgL,EAC3BwJ,EAASxJ,KACZmH,EAAWnH,EAAQhL,UAClBA,EAAagL,EAAbhL,SACMmS,EAAWnH,EAAQ4M,aACd5X,EAAagL,EAAxB4M,WAGDzF,EAAWnH,EAAQ6M,gBACJR,EAAmBrM,EAAjC6M,cAED1F,EAAWnH,EAAQ8M,WACTzH,EAAkBrF,EAA3B8M,SAGArR,EAAYuE,EAAQ6K,aACpBA,EAAc7K,EAAd6K,WAEApP,EAAYuE,EAAQiL,WACpBA,EAAYjL,EAAZiL,SAEAxP,EAAYuE,EAAQoM,WACpBA,EAAYpM,EAAZoM,SAGDzd,KAAK0Z,OAAO1W,KACT8J,EAAYuE,EAAQuM,SAAQA,EAAQN,QAAQjM,EAAQuM,QAEpD9Q,EAAYuE,EAAQkM,WAEdK,IAAOL,GAAY,GAD5BA,EAAYD,QAAQjM,EAAQkM,YAG9BA,GAAY,GAKXvd,KAAK0Z,OAAOzW,KAAuBjD,KAAKiZ,eAC3C8D,EAASzL,GAAA,CAAA,EAAQyL,EAAc9I,GAAOoC,mBACtCrW,KAAKiZ,cAAe,GAItB8D,EAASzL,GAAA,GACJyL,EACA9I,GAAOgC,eAAejW,KAAK0Z,OAAOrV,MAInCyI,EAAY2K,IAASA,IAASpR,EAChC+V,EAAYpb,EAGL8L,EAAYxO,IAAYA,IAAY+H,GACvCmH,GAASiK,KACX2E,EAAY3E,GAEVoD,EAASpD,KACPA,EAAKA,MAAQA,EAAKA,OAASzW,IAC7Bob,EAAYpb,GAGdhB,KAAK2a,YAAYoC,EAAWtF,MAK9BzX,KAAK2a,YAAYoC,EAAWze,GAC5B8d,EAAY3E,GAGdsF,EAAU9b,GAAUqL,KAGhB8P,IAAcpb,IAChB+b,EAAUpI,IAAMoI,EAAUpI,KAAO3U,KAAKoe,aACtCrB,EAAUrI,MAAQqI,EAAUrI,OAAS1U,KAAKqe,eAC1CtB,EAAUvH,OAASuH,EAAUvH,QAAUxV,KAAKse,gBAC5CvB,EAAUwB,IAAMxB,EAAUwB,KAAOve,KAAKwe,SACtCzB,EAAUhc,GAAgB2N,KAC1BqO,EAAU0B,WAAY3R,EAAYiQ,EAAU0B,YAExC1B,EAAU0B,UAETpN,GAAYA,EAAQ6K,YAAWA,EAAYpb,GAE5Cd,KAAK0Z,OAAO5U,KAED,MADbkZ,EAAOjB,EAAUiB,MAAQhe,KAAK0e,gBACF,MAATV,IACjBjB,EAAUiB,KAAOA,IAKvB,IAAMW,EAAgB3e,KAAK0Z,O1BrmBG,kB0B8nB9B,OAvBIlB,EAAWmG,IACbA,EAActjB,KAAK2E,KAAMoc,EAAWW,GAGtC/c,KAAK8b,MAAM,CACTP,SAAUja,GACV+W,YAAarY,KAAKqY,YAClBC,YAAatY,KAAKsY,YAClBC,QAASvY,KAAKuY,QACd6D,UAAAA,EACAW,UAAAA,EACAb,UAAAA,EACA7V,SAAAA,EACAqX,eAAAA,EACAhH,cAAAA,EACAkH,MAAAA,EACAL,UAAAA,EACAE,QAAAA,EACAnB,QAAAA,IAGFtc,KAAK4e,YAEE5e,MACRoH,EAEDgK,OAAA,SAAOyN,EAAQvgB,EAAS+S,GAAS,IAAAyN,EAC3BzY,EACAqX,EACAhH,EACAkH,GAAQ,EACRL,GAAY,EAEZ/E,EAAWnH,GAAUhL,EAAWgL,EAC3BwJ,EAASxJ,KACZmH,EAAWnH,EAAQhL,UAAWA,EAAWgL,EAAQhL,SAC5CmS,EAAWnH,EAAQ4M,aAAY5X,EAAWgL,EAAQ4M,WACvDzF,EAAWnH,EAAQ6M,gBACrBR,EAAiBrM,EAAQ6M,cACvB1F,EAAWnH,EAAQ8M,WAAUzH,EAAgBrF,EAAQ8M,SAErDne,KAAK0Z,OAAO1W,KACT8J,EAAYuE,EAAQuM,SAAQA,EAAQN,QAAQjM,EAAQuM,QAEpD9Q,EAAYuE,EAAQkM,WAEdK,IAAOL,GAAY,GAD5BA,EAAYD,QAAQjM,EAAQkM,YAG9BA,GAAY,GAWhB,IAPA,IAOuDwB,EAPjDhC,IAAS+B,EAAA,CAAA,GACZ7d,GAAS4d,EAAMC,EAChBE,QAAShf,KAAK0Z,OAAO/V,KAAesQ,GAAOyB,mBAAkBoJ,GAGzDtC,EAAU,CAAA,EAEhByC,EAAAvC,GAAgCjX,MAAuBsZ,EAAAE,KAAAtC,MAAE,CAAA,IAAAuC,EAAAH,EAAA/kB,MAA7C6iB,EAAQqC,EAAA,GAAEpC,EAAKoC,EAAA,GACrB5gB,GAAWA,EAAQue,KACrBL,EAAQM,GAASxe,EAAQue,GAE7B,CA6BA,OA3BI7c,KAAK0Z,OAAO1U,MACdwX,EAAQ7J,OAAS3S,KAAKka,aAAela,KAAK2S,QAG5C3S,KAAK2a,YAAYoC,EAAWP,GAE5Bxc,KAAK2a,YACHoC,EACA3O,GACEN,GACExP,EACA8C,EACAqE,MAKNzF,KAAK8b,MAAM,CACTP,SAAUha,GACV6b,cAAeL,EACf1W,SAAAA,EACAqX,eAAAA,EACAhH,cAAAA,EACAkH,MAAAA,EACAL,UAAAA,IAGKvd,MACRoH,EAEDoK,aAAA,SAAaqN,GAAQ,IAAAM,EACfC,GAAe,GAEfD,OAAAA,EAAAnf,KAAKqZ,iBAAL8F,EAAAA,EAAiBlZ,MAAO4Y,IAC1B7e,KAAKqZ,WAAa,MAGpBrZ,KAAKmZ,QAAUnZ,KAAKmZ,QAAQnQ,KAAI,SAAC2U,GACK,IAAA0B,EAApC,OAAI1B,EAAKzM,OAAOjQ,KAAY4d,GAC1BO,GAAe,EAEf9N,MACKqM,EAAI,CACPxM,KAAIG,GACCqM,GAAAA,EAAKxM,MAAIkO,EAAAA,CAAAA,EAAAA,EACXpa,KAAiB,EAAIoa,EACrBna,KAAa,EAAIma,EACjBla,IACCwY,EAAKzB,YAAcpb,EACf6c,EAAKxM,KAAKhM,KACT/I,KAAKD,MAAQwhB,EAAKxM,KAAK3L,KACxBmY,EAAKxM,KAAKhM,IAAcka,EAC7B/Z,KAAe,EAAK+Z,OAKpB1B,CACT,IAEIyB,GACFpf,KAAK6d,aAET,EAEAzW,EAGAkY,UAAA,SAAUlD,EAA4B9O,EAAUhP,GAAS,IACnDihB,EADmDC,EAAAxf,UAAtC,IAAToc,IAAAA,EAAY,gBAEpB,IAAM7O,EAAWC,GAASF,GAAYhP,GAAW,CAAE,EAAGgP,GAAY,GAE5DmS,EAAS,SAAChS,EAAIiS,EAAIC,EAAOrY,GAC7BnB,GAAiBsH,EAAI,UAAU,SAACjS,GAC9BgkB,EAAKI,iBAAiBpkB,EAAGiS,EAAIiS,EAAInS,EACnC,KAUF,IANEgS,EADEhS,EAASiK,SACLjK,EAASiK,SAETnK,GAAWC,EAAUC,KAIlBgS,EAAI5iB,OAAS,EACtB,IAAK,IAAMqK,KAAKuY,EACdE,EAAOF,EAAIvY,GAAIoV,IAGpBhV,EAEDwY,iBAAA,SAAiBpkB,EAAGiS,EAAI2O,EAAW9d,QAAO,IAAPA,IAAAA,EAAU,CAAA,GAC3C,IAAIuhB,GAAgB,EAEpB,IAAKpS,EAAGgD,aAAatP,GAAyB,CAC5C,IAAMoc,EAAYD,QAAQtd,KAAK0Z,OAAO1W,KAEhC8c,EAAa7L,GAAOoD,cAAc5J,EAAInP,GAE5C,GAAIka,EAAWla,EAAQyc,UAAW,CAChC,IAAMgF,EAAazhB,EAAQyc,SAAS+E,IAAe,CAAA,EAE/CC,GACF/f,KAAK+a,SAASgF,EAElB,CAEA,IAAM7B,EAAe1F,EAAWla,EAAQ4f,cACpC5f,EAAQ4f,kBACRjkB,EACEgkB,EAAYzF,EAAWla,EAAQ+H,UACjC,WAAA,OAAM/H,EAAQ+H,SAASyZ,EAAW,OAClC7lB,EACEkkB,EAAU3F,EAAWla,EAAQ6f,SAAW7f,EAAQ6f,aAAUlkB,EAIhE,GAFKqE,EAAQ0hB,UAAUvS,EAAGwS,aAAa9e,EAAwB,GAE3D7C,EAAQ0hB,UAAYzC,EACtBvd,KAAK+d,MAAM3B,EAAW0D,EAAY,CAChC5B,aAAAA,EACAC,QAAAA,EACAF,UAAAA,EACAV,UAAAA,QAEG,CACL/hB,EAAEqN,iBACFrN,EAAE0kB,kBAKF,IAAMC,EAAQzgB,YAAW,WAClBmgB,GACHpS,EAAG2S,QAEN,GAAEpgB,KAAK0Z,OAAO3V,KAEf/D,KAAK+d,MAAM3B,EAAW0D,EAAY,CAChC5B,aAAAA,EACAD,UAAS,WACP/d,aAAaigB,GAETlC,GAAWA,IAEV4B,GAAepS,EAAG2S,SAEvBP,GAAgB,CACjB,EACD1B,QAAAA,GAEJ,CACF,CACF,EAEA/W,EAUAiZ,WAAA,SAAWjE,EAA4B9O,EAAUwS,EAAYxhB,GAAc,IAAAgiB,EAAAtgB,UAAvD,IAAToc,IAAAA,EAAY,qBAA6C,IAAP9d,IAAAA,EAAU,CAAA,GACrE,IAAIihB,EAAM,GAEJE,EAAS,SAAChS,EAAIiS,EAAIC,EAAOrY,GAC7BnB,GAAiBsH,EAAI1L,IAAa,SAACvG,GACjC8kB,EAAKC,kBAAkB/kB,EAAGiS,EAAIiS,EAAIC,EAAOrY,EAC3C,KAYF,GALEiY,EADEjhB,EAAQkZ,SACJlZ,EAAQkZ,SAERnK,GAAWC,EAAUhP,GAI3B,IAAK,IAAI0I,EAAI,EAAGA,EAAIuY,EAAI5iB,OAAQqK,IAC9ByY,EAAOF,EAAIvY,GAAIoV,EAAW0D,EAAYxhB,IAG3C8I,EAEDmZ,kBAAA,SAAkB/kB,EAAGiS,EAAI2O,EAAW0D,EAAYxhB,GAC9C,IAAIuhB,GAAgB,EAEpB,IAAKpS,EAAGgD,aAAatP,GAAyB,CAC5C,IAAMoc,EAAYD,QAAQtd,KAAK0Z,OAAO1W,KAEhCkb,EAAe1F,EAAWla,EAAQ4f,cACpC5f,EAAQ4f,kBACRjkB,EACEgkB,EAAYzF,EAAWla,EAAQ+H,UACjC,WAAA,OAAM/H,EAAQ+H,SAASyZ,EAAW,OAClC7lB,EACEkkB,EAAU3F,EAAWla,EAAQ6f,SAAW7f,EAAQ6f,aAAUlkB,EAIhE,GAFKqE,EAAQkiB,OAAO/S,EAAGwS,aAAa9e,EAAwB,GAExD7C,EAAQkiB,OAASjD,EACnBvd,KAAK+d,MAAM3B,EAAW0D,EAAY,CAChC5B,aAAAA,EACAC,QAAAA,EACAF,UAAAA,EACAV,UAAAA,QAEG,CACL/hB,EAAEqN,iBAKF,IAAMsX,EAAQzgB,YAAW,WAClBmgB,GACHpS,EAAGgT,OAEN,GAAEzgB,KAAK0Z,OAAOvW,KAEfnD,KAAK+d,MAAM3B,EAAW0D,EAAY,CAChC5B,aAAAA,EACAD,UAAS,WACP/d,aAAaigB,GAETlC,GAAWA,IAEV4B,GAAepS,EAAGgT,QAEvBZ,GAAgB,CACjB,EACD1B,QAAAA,GAEJ,CACF,GACD/W,EAEDwX,UAAA,WAAY,IAAA8B,EAAA1gB,KACN8M,EAAY9M,KAAK2gB,gBACnB3gB,KAAK2gB,aAAeC,aAAY,WAC9BF,EAAKG,MACN,GAAE7gB,KAAK0Z,OAAO/U,OAElByC,EAED0Z,SAAA,WACOhU,EAAY9M,KAAK2gB,gBACpBI,cAAc/gB,KAAK2gB,qBACZ3gB,KAAK2gB,aAEhB,EAEAvZ,EAGAyZ,KAAA,WACM7gB,KAAK0Z,OAAOhV,KAAa1E,KAAK6Y,KAAO7Y,KAAK0Z,OAAOvV,KAKnDnE,KAAK8gB,WAGP,IAAM3kB,EAAMC,KAAKD,MAKjB,OAJIA,EAAM6D,KAAK8Y,cAAgB9Y,KAAK0Z,OAAOxV,MACzClE,KAAK6Y,KAAO1c,EAAM6D,KAAK8Y,eAGlB9Y,IACT,EAEAoH,EAGAT,KAAA,SAAKN,GAWH,OAVArG,KAAK8b,MAAM,CACTP,S1B99B2B,W0B+9B3BlD,YAAarY,KAAKqY,YAClBC,YAAatY,KAAKsY,YAClBC,QAASvY,KAAKuY,QACdlS,SAAAA,IAGFrG,KAAK6d,cAEE7d,MACRoH,EAED4Z,iBAAA,SAAiB3Y,EAAUD,GACzB,IAAMjM,EAAMC,KAAKD,MAEjB,SAAS8kB,EAAetD,GAAM,IAAAuD,EAAAC,EAAAC,EAC5B,OAAQhZ,GACN,KAAK5G,GACL,KAAKC,GACoD,IAAA4f,EAAvD,OAAIllB,EAAMwhB,EAAKxM,KAAK9L,IAAcsY,EAAKzM,OAAOoL,UAC5C+E,MACGjc,KAAe,EAAIic,GAKrBjZ,IAAa5G,IACZ6G,IAAa5G,IACd2G,IAAa3G,IACZ4G,IAAa7G,GAER,KAGT0f,MACG1b,IAAiBrJ,EAAG+kB,GAGzB,KAAKxf,GACH,OAAAyf,MACGjc,IACCyY,EAAKxM,KAAKjM,KAAe/I,EAAMwhB,EAAKxM,KAAK3L,IAAkB,IAAG2b,EAC/Dhc,IACCwY,EAAKxM,KAAKhM,KAAkBhJ,EAAMwhB,EAAKxM,KAAK3L,KAAgB2b,EAC7D9b,IAAalJ,EAAGglB,EAGrB,KAAKvf,GACH,OAAAwf,EAAAA,CAAAA,GACGlc,IACCyY,EAAKxM,KAAKjM,KAAe/I,EAAMwhB,EAAKxM,KAAK9L,IAAc,IAAG+b,EAGhE,QACE,MAAO,GAEb,CAEAphB,KAAKmZ,QAAUnZ,KAAKmZ,QAAQnQ,KAAI,SAAC2U,GAC/B,OAAIA,EAAKzB,YAAcpb,EAAuB6c,EAE9CrM,MACKqM,EAAI,CACPxM,KAAIG,GAAA,GACCqM,EAAKxM,KACL8P,EAAetD,KAGxB,IAEI3d,KAAKqZ,aACPrZ,KAAKqZ,WAAU/H,GACV,CAAA,EAAAtR,KAAKqZ,WAAU,CAClBlI,KAAIG,GACC,CAAA,EAAAtR,KAAKqZ,WAAWlI,KAChB8P,EAAejhB,KAAKqZ,iBAI9BjS,EAEDka,kBAAA,SAAkBpF,GAAW,IA0D0BqF,EA1D1BC,EAAAxhB,KACrByhB,EAAY,IAElBzhB,KAAKmZ,QAAQlR,SAAQ,SAAC0V,GAKlB,IAAA+D,EAHA/D,EAAKxM,KAAK/L,MACTuY,EAAKxM,KAAKlM,KACX0Y,EAAKxM,KAAK7L,KAEVmc,EAAU9a,KAAI2K,GACTqM,CAAAA,EAAAA,EAAKxe,KAAI,CACZ4d,UAASzL,GACHqM,GAAAA,EAAKxe,KAAK4d,WAAa,CAAA,GAAE2E,EAAA,CAAA,EAAAA,EAC5BzgB,GAASqL,KAAcoV,EACxBjD,WAAW,EAAIiD,MAIvB,IAEAD,EAAUxZ,SAAQ,SAAC0V,GAAI,OAAK6D,EAAK1F,MAAM6B,MAEvC3d,KAAKmZ,QAAUnZ,KAAKmZ,QAAQwI,QAAO,SAAChE,GAClC,OAAIA,EAAKxM,KAAK/L,MAEVuY,EAAKxM,KAAKjM,KACZsc,EAAKpI,YAAYzS,KAAK,CACpBuV,UAAWyB,EAAKzB,UAChBX,SAAUoC,EAAKpC,SACfrK,OAAMI,GAAA,GACDqM,EAAKzM,QAEVC,KAAIG,GAAA,GACCqM,EAAKxM,MAEVyQ,gBAAiBjE,EAAKtX,SACtBqQ,cAAeiH,EAAKjH,iBAIpBiH,EAAKxM,KAAKlM,MAEV0Y,EAAKzB,YAAcpb,GAAkBob,IAAcpb,GAKzD,IAEAd,KAAKmZ,QAAUnZ,KAAKmZ,QAAQnQ,KAAI,SAAC2U,GAAI,IAAAkE,EAAA,OAAAvQ,MAChCqM,EAAI,CACPxM,KAAIG,GACCqM,CAAAA,EAAAA,EAAKxM,MAAI0Q,EAAAA,CAAAA,EAAAA,EACX3c,KAAa,EAAK2c,EAClBtc,KAAY,EAAIsc,KAClB,IAGC3F,IAAcpb,GAAkBd,KAAKqZ,aACvCrZ,KAAKoZ,YAAYzS,KAAK,CACpBuV,UAAWpb,EACXya,SAAUja,GACV4P,OAAMI,GACD,CAAA,EAAAtR,KAAKqZ,WAAWnI,QAErBC,KAAIG,GAAA,CAAA,EACCtR,KAAKqZ,WAAWlI,MAAIoQ,KAAAA,EACtBhc,KAAY,EAAIgc,MAKvB,OAAOE,EAAU9kB,OAAS,GAC3ByK,EAED0a,kBAAA,WAAoB,IAAAC,EAAA/hB,KACZgiB,EAAahiB,KAAK0Z,OAAO1U,IAE/B,SAASid,EAAoB/Q,GAC+BA,EAAjDjQ,GAAiDiQ,EAApCyB,OAAoCzB,EAA5B8N,QAA4B9N,EAAnB1K,MAAU0b,IAAAA,sIAAIC,CAAKjR,GAAjDjQ,EAAM,SAAA,UAAA,SAAA+H,IAAAoZ,KAEf,OAAOhoB,OAAO2Q,KAAKmX,GAAMvlB,OAAS,CACpC,CAEA,IAAM0lB,EAAQriB,KAAKoZ,YAAYlQ,QAAO,SAACmZ,EAAO1E,GAG5C,OAFA0E,EAAM1E,EAAKzM,OAAOjQ,IAAW,GAEtBohB,CACR,GAAE,CAAE,GAELriB,KAAKoZ,YAAYnR,SAAQ,SAAC0V,GACxB0E,EAAM1E,EAAKzM,OAAOjQ,IAAS0F,KAAKgX,EAClC,IAEA3d,KAAKoZ,YAAc,GAEnB,IAAMkJ,EAASloB,OAAO2Q,KAAKsX,GACxBrZ,KAAI,SAAC/C,GACJ,IAAMsc,EAAQF,EAAMpc,GAEdwO,EAAO,CACX8G,cAAUthB,EACViX,OAAQ,CAAE,EACV+M,UAAW,GACXE,QAAS,IAmDX,OAhDAoE,EAAMta,SAAQ,SAAC0V,GAAS,IAAA6E,EACjB/N,EAAK8G,WACJoC,EAAKpC,WAAaja,IAAkBqc,EAAKxM,KAAK5L,IAChDkP,EAAK8G,SAAWha,GAEhBkT,EAAK8G,SAAWoC,EAAKpC,UAIzB9G,EAAKvD,OAAO8N,QAAUrB,EAAKzM,OAAO8N,QAClCvK,EAAKvD,OAAO1K,MAAQmX,EAAKzM,OAAO1K,MAChCiO,EAAKvD,OAAOjQ,GAAU0c,EAAKzM,OAAOjQ,GAE9B+gB,IACFvN,EAAKvD,OAAOyB,OAASoP,EAAK7H,aAAe6H,EAAKpP,SAI7CgL,EAAKzB,YAAcpb,GAClB6c,EAAKzM,OAAOjQ,MAA2B,OAApBuhB,EAAKT,EAAK1I,iBAAU,EAAfmJ,EAAiBvc,MAC3C0X,EAAKxM,KAAKhM,IAAiB,IAE3BsP,EAAKvD,OAAOuR,SAAW9E,EAAKxM,KAAKhM,KAG/BwY,EAAKxM,KAAKpQ,KACZ0T,EAAKvD,OAAU9P,GAAAA,EAAyBL,GACtChD,KAAK2kB,MAAgC,IAA1B/E,EAAKxM,KAAKpQ,IAA0B,KAG9C4c,EAAKxM,KAAK5L,MACbkP,EAAKvD,OAAMI,GAAQmD,CAAAA,EAAAA,EAAKvD,OAAWyM,EAAKzM,QAEpCsH,EAAWmF,EAAKiE,kBAClBnN,EAAKwJ,UAAUtX,KAAKgX,EAAKiE,iBAGvBpJ,EAAWmF,EAAKjH,gBAClBjC,EAAK0J,QAAQxX,KAAKgX,EAAKjH,eAG7B,IAEKjC,EAAKvD,OAAO8N,UACfvK,EAAKvD,OAAO8N,QACV+C,EAAKrI,OAAO/V,KAAesQ,GAAOyB,oBAG/BjB,CACT,IACCkN,QAAO,SAAChE,GAAI,OAAKsE,EAAoBtE,EAAKzM,WAEvCwH,EACJD,UAAUC,YAAcD,UAAUC,WAAWxO,KAAKuO,WAC9C8E,EACJD,QAAQtd,KAAK0Z,OAAO1W,MAAiBwV,EAAWE,GAIlD,GAAI4J,EAAO3lB,OAAS,EAClB,GAAI4gB,EAAW,CACb,IAAMoF,EAAW,CAAC,IAEJL,EAAOtZ,KAAI,SAAA4Z,GAAA,IAAGrH,EAAQqH,EAARrH,SAAUrK,EAAM0R,EAAN1R,OAAM,OAC1C3C,KAAKC,UAAU,CAAE+M,SAAAA,EAAUrK,OAAAA,GAAS,IAIhCjJ,SAAQ,SAAC4a,GAEX,IAAIC,KAAK,CAAA,GAAIH,EAASA,EAAShmB,OAAS,GAAKkmB,IAASE,MAAQ,MAE9DJ,EAAShc,KAAK,IAEhBgc,EAASA,EAAShmB,OAAS,IAASkmB,EAAQ,IAC9C,IAEAF,EAAS1a,SAAQ,SAAC+a,EAAStmB,GACzB,IAAMumB,EAAW,IAAIC,SAErBD,EAASE,OAAO,UAAWH,EAAQvmB,MAAM,GAAI,IAE7C,IACEic,EAAWqJ,EAAK5G,YAAY,QAAS8H,EACtC,CAAC,MAAOznB,GACP0T,QAAQC,MAAM,6BAA8B3T,EAC9C,CACF,IAEA8mB,EAAOra,SAAQ,SAAC0V,GACdA,EAAKM,UAAUhW,SAAQ,SAAC5B,GAAQ,OAC9B2I,GAAa3I,EAAUsX,EAAKzM,OAAO1K,MAAM,GAE7C,GACF,MACE8b,EAAOra,SAAQ,SAAC0V,GACd,IAMMG,EANWiE,EAAK5G,YAAYwC,EAAKpC,UAMV,IAJTtH,GAAOiB,eAAc5D,GAAA,CACvC+K,OAAO,GACJsB,EAAKzM,SAaV+C,GAAOwC,WAAWqH,GATA,WAAH,OACbH,EAAKM,UAAUhW,SAAQ,SAAC5B,GAAQ,OAC9B2I,GAAa3I,EAAUsX,EAAKzM,OAAO1K,MAAM,GAC1C,IACa,WAAH,OACXmX,EAAKQ,QAAQlW,SAAQ,SAAC5B,GAAQ,OAC5B2I,GAAa3I,EAAUsX,EAAKzM,OAAO1K,MAAM,GAC1C,GAGL,KAGLY,EAEDyW,YAAA,SAAY3B,QAAS,IAATA,IAAAA,EAAYrb,GACtBb,KAAKshB,kBAAkBpF,GACvBlc,KAAK8hB,mBACP,EAEA1a,EAGAgc,MAAA,aAEChc,EAEDic,OAAA,SAAOvK,QAAa,IAAbA,IAAAA,EAAgB1c,KAAKD,OAC1B6D,KAAK8Y,cAAgBA,EACrB9Y,KAAK6Y,KAAO,CACd,EAQAzR,EAGAoT,MAAA,SAAMhf,EAAGsd,GACP9Y,KAAKqjB,OAAOvK,IACb1R,EAEDmJ,QAAA,SAAQ/U,GACN,GAAKwE,KAAK0Z,O1B7wCoB,kB0B6wC9B,CAEA,IAAM6D,EAAYD,QAAQtd,KAAK0Z,OAAO1W,KAIhCsgB,EAAc5T,GAFDlU,EAAXuM,OAIN/H,KAAK0Z,OAAOxW,KAGd,GAAIogB,EAAa,CACf,IAAM1T,EAAU0T,EAAY1T,QAAQO,cAG9BoT,EAAmBD,EACtBE,oBACAta,QAAO,SAACzN,EAAQgc,GAKf,OAJIxD,GAAO8B,WAAW0B,EAAM,kBAC1Bhc,EAAOgc,EAAKhb,MAAM,KAAO6mB,EAAY7S,aAAagH,IAG7Chc,CACR,GAAE,CAAE,GAED2gB,EACJkH,EAAY7S,aAAa,gBAAkB,eAEvCqP,EAAUxO,GAAA,CACd,WAAYtR,KAAKoe,aACjB,aAAcpe,KAAKqe,eACnBoF,KACEH,EAAYI,WAAaJ,EAAYtpB,OAASspB,EAAYK,YAC5DjP,MAAO4O,EAAYK,YACnB9nB,KAAkB,MAAZ+T,EAAkB,OAAS0T,EAAYznB,KAC7C+nB,QAAShU,EACTiU,UAAWP,EAAYQ,UACvB,WAAYhU,GAAWwT,GACvB3O,IAAK2O,EAAYxO,KACjB,eAAgBtZ,EAAEuoB,aACfR,GAGL,GAAIvjB,KAAK0Z,OAAO5U,IAAoB,CAClC,IAAMkZ,EAAOhe,KAAK0e,cAEL,KAATV,GAAwB,MAATA,IACjB8B,EAAW,aAAe9B,EAE9B,CAEAhe,KAAK+d,MAAM3B,EAAW0D,EAAY,CAChCvC,UAAAA,GAEJ,CAtDsC,GAuDvCnW,EAEDkT,OAAA,SAAO9e,EAAG4a,GACR,IAAMmH,EAAYD,QAAQtd,KAAK0Z,OAAO1W,KAChCghB,EAAgBhkB,KAAK0Z,OAAO9V,IAO5BqgB,EALyB,IAAIrjB,OAC3BojB,MAAAA,EAAc1T,KAAK,KAAI,SAC7B,KAGgD1T,KAAKwZ,EAAK8N,UAExDlkB,KAAK0Z,OAAO5V,KAA0BmgB,IACxCrd,GAAK5E,GAAgBoU,EAAKtB,MAEtBsB,EAAKrO,SAAW7G,GAAgB+S,GAAOuC,UAAUhb,KACnD4a,EAAK6J,aAAa9e,EAAwB,GAErCoc,IACH/hB,EAAEqN,iBACFrN,EAAE0kB,kBAEFxgB,YAAW,WACT0W,EAAKqK,OACN,GAAEzgB,KAAK0Z,OAAO7V,QAanB7D,KAAK0Z,OAAOlV,MACXyf,GACDhQ,GAAO0B,eAAeS,EAAKb,YAE3B3O,GAAKvE,GAAgB+T,EAAKtB,MAEtBsB,EAAKrO,SAAW7G,GAAgB+S,GAAOuC,UAAUhb,KACnD4a,EAAK6J,aAAa9e,EAAwB,GAErCoc,IACH/hB,EAAEqN,iBACFrN,EAAE0kB,kBAEFxgB,YAAW,WACT0W,EAAKqK,OACN,GAAEzgB,KAAK0Z,OAAOnV,SAItB6C,EAEDiT,WAAA,SAAW1F,GACT,IAAM4I,EAAYD,QAAQtd,KAAK0Z,OAAO1W,KAEtChD,KAAK+d,MACH/b,GACA,CACE2S,IAAAA,GAEF,CAAE4I,UAAAA,KAELnW,EAEDqT,SAAA,SAAS9F,GACP,IAAM4I,EAAYD,QAAQtd,KAAK0Z,OAAO1W,KAEtChD,KAAK+d,MACH1b,GACA,CACEsS,IAAAA,GAEF,CAAE4I,UAAAA,KAELnW,EAED+c,SAAA,WACOnkB,KAAKwd,cACRxd,KAAKwd,aAAc,EACnBxd,KAAKghB,iBACHtf,GACAE,IAEF5B,KAAK6d,YAAY/c,KAEpBsG,EAED0J,kBAAA,SAAkBtV,GAChB,IAAQ4M,EAAuB5M,EAAvB4M,SAAUC,EAAa7M,EAAb6M,SAElB,OAAQD,GACN,KAAK5G,GACHxB,KAAKghB,iBAAiB3Y,EAAUD,GAChCpI,KAAK6d,cACL7d,KAAKqjB,SACL,MAEF,KAAK5hB,GAKL,KAAKC,GACH1B,KAAKghB,iBAAiB3Y,EAAUD,GAChCpI,KAAK6d,cACL,MAEF,KAAKjc,GACH5B,KAAKmkB,aAGV/c,EAEDwJ,SAAA,SAASpV,GACPwE,KAAKqjB,SAEL,IAAMxU,EAAcH,KAEN1O,KAAKmZ,QAAQwI,QACzB,SAAChE,GAAI,OAAKA,EAAKzB,YAAcpb,CAAc,IAGvCmH,SAAQ,SAACmc,GACbA,EAAGjT,KAAKpQ,GAAgBhD,KAAKG,IAC3B,EACAH,KAAKC,IAAI6Q,EAAauV,EAAGjT,KAAKpQ,IAAiB,GAEnD,GACF,EAEAqG,EAIAsT,aAAA,SAAa/K,GACX,IAAM0U,EAAMrkB,KAAK0Z,OAAOhW,IAExB,GAAK2gB,EAAL,CAMA,IAJA,IAEIC,EAFEC,EAAU/W,GAAS6W,GAAO,CAACA,GAAO/V,GAAQ+V,GAAOA,EAAM,GAIpDrd,EAAI,EAAGA,EAAIud,EAAQ5nB,OAAQqK,IAClC,IACyC,IAAvC2I,EAAK4F,SAAS5N,QAAQ4c,EAAQvd,KAC9B2I,EAAK4F,WAAatB,GAAOE,SAAS,YAClC,CACAmQ,GAAc,EACd,KACF,CAGF,GAAIA,EAAa,CACf,IAAME,EAAYxkB,KAAKykB,SAAS9U,GAE5B6U,IACF7U,EAAKmF,KAAO0P,EAGhB,CAvBU,CAwBZ,EAEApd,EAGAsd,MAAA,WACEzQ,GAAOG,WAAWuQ,WAChB3kB,KAAK0Z,OAAOnW,IACZvD,KAAK0Z,OAAOlW,IACZxD,KAAK0Z,OAAOrW,KAEdrD,KAAK2S,OAAS,KACd3S,KAAKwZ,cACP,EAEApS,EAIAqd,SAAA,SAAS9P,GACP,IAAIlH,EACAmX,EACAV,EACAW,EAUJ,GARIrX,GAASmH,KACXlH,EAAKlE,SAASqN,cAAc,MACzB9B,KAAOH,EACViQ,EAAQnX,EAAGqX,OAAS,IAAM,KACjBnQ,GAAOA,EAAIG,OACpBrH,EAAKkH,GAGHlH,EAaF,OAZAmX,EAAQnX,EAAGqX,OAAS,IAAM,IAC1BZ,EACEzW,EAAGyW,UAAsC,MAA1BzW,EAAGyW,SAASrnB,OAAO,GAC9B4Q,EAAGyW,SAAQ,IACPzW,EAAGyW,SAEbW,EACEpX,EAAG8H,UACF9H,EAAGsX,MAAoB,KAAZtX,EAAGsX,MAA2B,OAAZtX,EAAGsX,MAA6B,MAAZtX,EAAGsX,KAAY,IACzDtX,EAAGsX,KACP,IAEItX,EAAGyN,SAAQ,KAAK2J,EAAOX,EAAWzW,EAAGqX,OAASF,EAAQrkB,EAAkB,IAAAP,KAAK2S,OAASlF,EAAGuQ,IAEvG,EAEA5W,EAGA4d,WAAA,SAAWrQ,GACT,IAAME,EAAQ,IAAIjU,kBAAkBL,EAAc,aAAc,MAC5D0kB,EAAOtQ,EAMX,GAJIA,GAAOA,EAAIG,OACbmQ,EAAOtQ,EAAIG,MAGTmQ,EACF,OAAOA,EAAKloB,QAAQ8X,EAAO,KAE9BzN,EAEDgX,WAAA,WACE,OAAIpe,KAAK0Z,OAAOtV,IACP6P,GAAOE,SAAS,YAEzB,GAAUF,GAAOE,SAAS,YAAcF,GAAOE,SAAS,WACzD/M,EAEDsX,YAAA,WACE,OAAOzK,GAAOE,SAAS,SACxB/M,EAEDiX,aAAA,WACE,OAAyD,IAAlD9U,SAAS2b,qBAAqB,SAASvoB,OAC1C,GACA4M,SAAS2b,qBAAqB,SAAS,GAAGC,WAC/C/d,EAEDkX,cAAA,WACE,OAAOrK,GAAOE,SAAS,aACxB/M,EAEDoX,OAAA,WACE,OAAOvK,GAAOE,SAAS,OACzB,EAEA/M,EAKA6S,SAAA,SAASnF,QAAI,IAAJA,IAAAA,EAAOb,GAAOE,SAAS,SAC9B,IAAM1E,EAAUqF,EAAKsQ,MAAMzkB,GAE3B,GAAI8O,GAAWA,EAAQ,GACrB,OAAOA,EAAQ,IAElBrI,EAED+U,gBAAA,WAEE,IAAMkJ,EAAI,CACRrG,QAAShf,KAAK0Z,OAAO/V,KAAesQ,GAAOyB,mBAC3CxP,SAAUlG,KAAKyG,aACf0K,KAAM8C,GAAOG,WAAW4G,QAAQ,YAAc,GAC9CsK,OAAWzY,OAAOyY,OAAOC,MAAK,IAAI1Y,OAAOyY,OAAOE,OAChDC,SACE5Y,OAAO4L,UAAUiN,iBAAmB7Y,OAAO4L,UAAUgN,UAAY,GACnEE,IAAK3lB,KAAK0Z,OAAO7W,IACjB+iB,QAASrc,SAASsc,UAqBpB,OAlBK7lB,KAAK0Z,OAAO/V,MACf0hB,EAAES,MAAQ,YAEN7R,GAAOyB,qBAAuBzB,GAAOqB,cACvC+P,EAAES,OAAS,qBAKX9lB,KAAK0Z,OAAO1U,MACdqgB,EAAE1S,OAAS3S,KAAKka,aAAela,KAAK2S,QAIlC3S,KAAK0Z,O1B7lDS,Q0B8lDhB2L,EAAEU,GAAK/lB,KAAK0Z,O1B9lDI,O0BimDX2L,CACT,EAEAje,EAIA4e,QAAA,WAGE,IAAK,IAAM/f,KAFXjG,KAAK8gB,WAEY9gB,KAAK0G,IAChB1G,KAAK0G,IAAI9L,eAAeqL,IAC1BD,GAAcC,EAAIjG,KAAKyG,cAM3B,GAHAzG,KAAK0G,IAAM,MAGNoG,EAAYD,OAAO7M,KAAKyG,eAC3B,WACSoG,OAAO7M,KAAKyG,aACpB,CAAC,MAAOjL,GACPqR,OAAO7M,KAAKyG,mBAAgBxM,CAC9B,GAEHke,CAAA,CA5nDyB,GCxGvBtL,OAAOoZ,gBhBmEV9f,GAAiBoD,SAAUxH,GAAawO,IACxCpK,GAAiBoD,SXAY,YWAemH,IAC5CvK,GAAiBoD,SAAUnH,GAAiBuO,IAC5CxK,GAAiB0G,OAAQpK,GAAcmO,IAEvChH,GAAczD,iBAAiBzD,GAAmBoO,KgBtEpDjE,OAAOoZ,cAAgB9N,GACvBtL,OAAOqZ,iBAAmBjS,GAAOwC,WAE5B3J,EAAYD,OAAOsZ,WACtBlS,GAAOkE,QAAUA,GACjBtL,OAAOsZ,QAAQlS,OAASA,GAEpBuE,EAAW3L,OAAOuZ,gBACpBvZ,OAAOuZ,eACPvZ,OAAOuZ,aAAe,OAK1B,IAAMC,GAASxZ,OAAO+M,OAAS/M,OAAOgN,GACtC,IAAK/M,EAAYuZ,IACf,IAAK,IAAM5O,MAAQ4O,GACjB,GAAIA,GAAOzrB,eAAe6c,IAAO,CAC/B,IAAMvR,GAAW,IAAIiS,GAAQV,IAC7BvR,GAASoT,OAILxM,EAAYD,OAAOyZ,iBACrBzZ,OAAOyZ,cAAgBpgB,GAE3B","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,21,22,23,24,25,26,29,31,32,33,34,35,36,41,42]} \ No newline at end of file diff --git a/dist/wpt.js b/dist/wpt.js index 82fd3e0..f718f43 100644 --- a/dist/wpt.js +++ b/dist/wpt.js @@ -2543,12 +2543,26 @@ var timeout; var retrack; if (isFunction(lastArg)) callback = lastArg;else if (isObject(lastArg)) { - if (isFunction(lastArg.callback)) callback = lastArg.callback;else if (isFunction(lastArg.onSuccess)) callback = lastArg.onSuccess; - if (isFunction(lastArg.onBeforeSend)) beforeCallback = lastArg.onBeforeSend; - if (isFunction(lastArg.onError)) errorCallback = lastArg.onError; - if (!isUndefined(lastArg.lifecycle)) lifecycle = lastArg.lifecycle; - if (!isUndefined(lastArg.timeout)) timeout = lastArg.timeout; - if (!isUndefined(lastArg.retrack)) retrack = lastArg.retrack; + if (isFunction(lastArg.callback)) { + callback = lastArg.callback; + } else if (isFunction(lastArg.onSuccess)) { + callback = lastArg.onSuccess; + } + if (isFunction(lastArg.onBeforeSend)) { + beforeCallback = lastArg.onBeforeSend; + } + if (isFunction(lastArg.onError)) { + errorCallback = lastArg.onError; + } + if (!isUndefined(lastArg.lifecycle)) { + lifecycle = lastArg.lifecycle; + } + if (!isUndefined(lastArg.timeout)) { + timeout = lastArg.timeout; + } + if (!isUndefined(lastArg.retrack)) { + retrack = lastArg.retrack; + } if (this.config(KEY_BEACONS)) { if (!isUndefined(lastArg.queue)) queue = Boolean(lastArg.queue); if (!isUndefined(lastArg.useBeacon)) { diff --git a/src/index.js b/src/index.js index 05c962d..3c6fcd3 100644 --- a/src/index.js +++ b/src/index.js @@ -1,4 +1,5 @@ import { isFunction, isUndefined } from 'lodash-es'; + import attachGlobalEvents from './lib/global-events'; import Tracker from './tracker'; import Woopra from './woopra'; @@ -19,11 +20,11 @@ if (!isUndefined(window.exports)) { } // Initialize instances & preloaded settings/events -var _queue = window.__woo || window._w; +const _queue = window.__woo || window._w; if (!isUndefined(_queue)) { - for (var name in _queue) { + for (const name in _queue) { if (_queue.hasOwnProperty(name)) { - var instance = new Tracker(name); + const instance = new Tracker(name); instance.init(); // DO NOT REMOVE diff --git a/src/lib/events.js b/src/lib/events.js index c7978da..f8a0785 100644 --- a/src/lib/events.js +++ b/src/lib/events.js @@ -32,7 +32,7 @@ export function fire(event) { let _l; if (_event) { - for (let id in _event) { + for (const id in _event) { if (_event.hasOwnProperty(id)) { handler = _event[id]; _l = handler && handler.__l; diff --git a/src/lib/global-events.js b/src/lib/global-events.js index 2df1750..5cea76e 100644 --- a/src/lib/global-events.js +++ b/src/lib/global-events.js @@ -1,4 +1,5 @@ import { isUndefined, throttle } from 'lodash-es'; + import { DATA_TRACKED_ATTRIBUTE, ELEMENT_MATCHER_LINK, diff --git a/src/lib/utils.js b/src/lib/utils.js index aacfe47..0d808d2 100644 --- a/src/lib/utils.js +++ b/src/lib/utils.js @@ -6,6 +6,7 @@ import { isString, isUndefined } from 'lodash-es'; + import { RANDOM_STRING_CHARS } from '../constants'; /** @@ -58,7 +59,7 @@ export function prefixObjectKeys(object, prefix, blacklist) { if (isUndefined(object)) return obj; - for (let key in object) { + for (const key in object) { if (object.hasOwnProperty(key)) { const value = object[key]; @@ -90,7 +91,7 @@ export function jsonStringifyObjectValues(object) { if (isUndefined(object)) return obj; - for (let key in object) { + for (const key in object) { if (object.hasOwnProperty(key)) { if (isPlainObject(object[key]) || isArray(object[key])) { try { @@ -106,7 +107,7 @@ export function jsonStringifyObjectValues(object) { } export function getScrollDepth() { - const scrollHeight = document.body.scrollHeight; + const { scrollHeight } = document.body; const scrollDepth = ((window.scrollY || 0) + window.innerHeight) / scrollHeight; diff --git a/src/tracker.js b/src/tracker.js index 5606afb..90fd101 100644 --- a/src/tracker.js +++ b/src/tracker.js @@ -6,6 +6,19 @@ import { isUndefined, noop } from 'lodash-es'; + +import { addEventListener, on, removeHandler } from './lib/events'; +import { + callCallback, + findParentElement, + getDOMPath, + getElement, + getScrollDepth, + hasBeaconSupport, + jsonStringifyObjectValues, + prefixObjectKeys, + randomString +} from './lib/utils'; import WoopraAction from './action'; import { ACTION_PROPERTY_ALIASES, @@ -14,10 +27,10 @@ import { DATA_TRACKED_ATTRIBUTE, DEFAULT_DOWNLOAD_EXTENSIONS, ELEMENT_MATCHER_CLICK, - ENDPOINTS, ENDPOINT_IDENTIFY, ENDPOINT_TRACK, ENDPOINT_UPDATE, + ENDPOINTS, EVENT_CLICK, EVENT_DOWNLOAD, EVENT_LINK_CLICK, @@ -86,23 +99,11 @@ import { TARGET_BLANK, URL_ID_REGEX, VERSION, - VISITOR_PROPERTY_PREFIX, VISIT_PROPERTY_PREFIX, + VISITOR_PROPERTY_PREFIX, XDM_PARAM_NAME } from './constants'; import globals from './globals'; -import { addEventListener, on, removeHandler } from './lib/events'; -import { - callCallback, - findParentElement, - getDOMPath, - getElement, - getScrollDepth, - hasBeaconSupport, - jsonStringifyObjectValues, - prefixObjectKeys, - randomString -} from './lib/utils'; import Woopra from './woopra'; const fire = Woopra._fire; @@ -197,7 +198,7 @@ export default class Tracker { * before tracker is ready. */ _processQueue(type) { - var _wpt = window.__woo ? window.__woo[this.instanceName] : _wpt; + let _wpt = window.__woo ? window.__woo[this.instanceName] : _wpt; _wpt = window._w ? window._w[this.instanceName] : _wpt; // if _wpt is undefined, means script was loaded asynchronously and @@ -280,7 +281,7 @@ export default class Tracker { return dataStore[key]; } if (isObject(key)) { - for (let i in key) { + for (const i in key) { if (key.hasOwnProperty(i)) { if (Woopra.startsWith(i, 'cookie_')) { this.dirtyCookie = true; @@ -498,7 +499,7 @@ export default class Tracker { for (let i = 0; i < types.length; i++) { const [key, prefix] = types[i]; - let newData = jsonStringifyObjectValues( + const newData = jsonStringifyObjectValues( prefixObjectKeys( options[key], prefix, @@ -519,7 +520,7 @@ export default class Tracker { if (this.config(KEY_CONTEXT)) { try { - var contextData = JSON.stringify(this.config(KEY_CONTEXT)); + const contextData = JSON.stringify(this.config(KEY_CONTEXT)); data[KEY_CONTEXT] = encodeURIComponent(contextData); } catch (e) {} } @@ -596,7 +597,7 @@ export default class Tracker { let callback; let beforeCallback; let errorCallback; - let lastArg = arguments[arguments.length - 1]; + const lastArg = arguments[arguments.length - 1]; let lifecycle = LIFECYCLE_ACTION; let queue = false; let useBeacon = false; @@ -605,15 +606,31 @@ export default class Tracker { if (isFunction(lastArg)) callback = lastArg; else if (isObject(lastArg)) { - if (isFunction(lastArg.callback)) callback = lastArg.callback; - else if (isFunction(lastArg.onSuccess)) callback = lastArg.onSuccess; - if (isFunction(lastArg.onBeforeSend)) - beforeCallback = lastArg.onBeforeSend; - if (isFunction(lastArg.onError)) errorCallback = lastArg.onError; + if (isFunction(lastArg.callback)) { + ({ callback } = lastArg); + } else if (isFunction(lastArg.onSuccess)) { + ({ onSuccess: callback } = lastArg); + } + + if (isFunction(lastArg.onBeforeSend)) { + ({ onBeforeSend: beforeCallback } = lastArg); + } + + if (isFunction(lastArg.onError)) { + ({ onError: errorCallback } = lastArg); + } + + if (!isUndefined(lastArg.lifecycle)) { + ({ lifecycle } = lastArg); + } - if (!isUndefined(lastArg.lifecycle)) lifecycle = lastArg.lifecycle; - if (!isUndefined(lastArg.timeout)) timeout = lastArg.timeout; - if (!isUndefined(lastArg.retrack)) retrack = lastArg.retrack; + if (!isUndefined(lastArg.timeout)) { + ({ timeout } = lastArg); + } + + if (!isUndefined(lastArg.retrack)) { + ({ retrack } = lastArg); + } if (this.config(KEY_BEACONS)) { if (!isUndefined(lastArg.queue)) queue = Boolean(lastArg.queue); @@ -721,11 +738,19 @@ export default class Tracker { if (isFunction(lastArg)) callback = lastArg; else if (isObject(lastArg)) { - if (isFunction(lastArg.callback)) callback = lastArg.callback; - else if (isFunction(lastArg.onSuccess)) callback = lastArg.onSuccess; - if (isFunction(lastArg.onBeforeSend)) - beforeCallback = lastArg.onBeforeSend; - if (isFunction(lastArg.onError)) errorCallback = lastArg.onError; + if (isFunction(lastArg.callback)) { + ({ callback } = lastArg); + } else if (isFunction(lastArg.onSuccess)) { + ({ onSuccess: callback } = lastArg); + } + + if (isFunction(lastArg.onBeforeSend)) { + ({ onBeforeSend: beforeCallback } = lastArg); + } + + if (isFunction(lastArg.onError)) { + ({ onError: errorCallback } = lastArg); + } if (this.config(KEY_BEACONS)) { if (!isUndefined(lastArg.queue)) queue = Boolean(lastArg.queue); @@ -837,7 +862,7 @@ export default class Tracker { // attach event if form was found if (els && els.length > 0) { - for (let i in els) { + for (const i in els) { bindEl(els[i], eventName, _options); } } @@ -1306,6 +1331,7 @@ export default class Tracker { try { sendBeacon(this.getEndpoint('push'), formData); } catch (e) { + // eslint-disable-next-line no-console console.error('Woopra: sendBeacon failed:', e); } }); @@ -1739,7 +1765,7 @@ export default class Tracker { dispose() { this.stopPing(); - for (let id in this.__l) { + for (const id in this.__l) { if (this.__l.hasOwnProperty(id)) { removeHandler(id, this.instanceName); } diff --git a/src/woopra.js b/src/woopra.js index a383b15..2c9e60e 100644 --- a/src/woopra.js +++ b/src/woopra.js @@ -1,4 +1,10 @@ import { endsWith, isUndefined, startsWith } from 'lodash-es'; + +import * as docCookies from './lib/cookies'; +import { addEventListener, fire, on } from './lib/events'; +import { serializeForm } from './lib/form'; +import { loadScript, removeScript } from './lib/script'; +import { getElement, isLeftClick, randomString } from './lib/utils'; import { CAMPAIGN_KEYS, KEY_OUTGOING_IGNORE_SUBDOMAIN, @@ -6,11 +12,6 @@ import { XDM_PARAM_NAME } from './constants'; import globals from './globals'; -import * as docCookies from './lib/cookies'; -import { addEventListener, fire, on } from './lib/events'; -import { serializeForm } from './lib/form'; -import { loadScript, removeScript } from './lib/script'; -import { getElement, isLeftClick, randomString } from './lib/utils'; const Woopra = {}; @@ -87,7 +88,7 @@ Woopra.buildUrlParams = function buildUrlParams(params, prefix = '') { return params; } - for (let key in params) { + for (const key in params) { if (params.hasOwnProperty(key)) { if ( params[key] !== 'undefined' && @@ -114,7 +115,7 @@ Woopra.buildUrlParams = function buildUrlParams(params, prefix = '') { Woopra.getCustomData = function getCustomData(method, prefix = 'wv_') { const vars = Woopra.getUrlParams(); - for (let i in vars) { + for (const i in vars) { if (vars.hasOwnProperty(i)) { const value = vars[i]; @@ -187,7 +188,7 @@ Woopra.mapQueryParams = function mapQueryParams(mapping) { const vars = Woopra.getUrlParams(); const params = {}; - for (let key in mapping) { + for (const key in mapping) { const value = vars[key]; if (!isUndefined(value)) { params[mapping[key]] = value;