@fle-sdk/event-tracking-web 1.2.0-beta.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +340 -112
- package/lib/index.esm.js +1979 -16
- package/lib/index.esm.min.js +1 -0
- package/lib/index.js +1987 -16
- package/lib/index.min.js +1 -0
- package/lib/types/index.d.ts +132 -85
- package/lib/types/tools.d.ts +209 -109
- package/lib/types/type.d.ts +466 -228
- package/package.json +9 -6
- package/lib/index.ems.js +0 -16
- package/lib/index.ems.js.map +0 -1
- package/lib/index.esm.js.map +0 -1
- package/lib/index.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fle-sdk/event-tracking-web",
|
|
3
|
-
"version": "1.2.0
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"description": "event tracking in web",
|
|
5
5
|
"author": "飞象前端团队",
|
|
6
6
|
"license": "ISC",
|
|
7
7
|
"scripts": {
|
|
8
8
|
"start:dev": "cross-env NODE_ENV=dev snowpack dev",
|
|
9
|
-
"build": "rollup -c config.js"
|
|
9
|
+
"build": "rollup -c config.js",
|
|
10
|
+
"prepublishOnly": "npm run build",
|
|
11
|
+
"publish:beta": "npm run build && npm publish --tag beta",
|
|
12
|
+
"publish:release": "npm run build && npm publish"
|
|
10
13
|
},
|
|
11
14
|
"publishConfig": {
|
|
12
15
|
"access": "public"
|
|
@@ -38,6 +41,9 @@
|
|
|
38
41
|
"@snowpack/plugin-postcss": "^1.4.1",
|
|
39
42
|
"@snowpack/plugin-react-refresh": "^2.5.0",
|
|
40
43
|
"@snowpack/web-test-runner-plugin": "^0.2.2",
|
|
44
|
+
"@types/react": "^17.0.0",
|
|
45
|
+
"@types/react-dom": "^17.0.0",
|
|
46
|
+
"@types/react-router-dom": "^5.3.3",
|
|
41
47
|
"cross-env": "^7.0.3",
|
|
42
48
|
"minify": "^7.0.2",
|
|
43
49
|
"postcss": "^8.3.0",
|
|
@@ -50,12 +56,9 @@
|
|
|
50
56
|
"rollup-plugin-node-polyfills": "^0.2.1",
|
|
51
57
|
"rollup-plugin-sourcemaps": "^0.6.3",
|
|
52
58
|
"rollup-plugin-terser": "^7.0.2",
|
|
53
|
-
"rollup
|
|
59
|
+
"@rollup/plugin-typescript": "^11.1.6",
|
|
54
60
|
"snowpack": "^3.3.7",
|
|
55
61
|
"snowpack-plugin-less": "^1.0.7",
|
|
56
62
|
"typescript": "^4.3.4"
|
|
57
|
-
},
|
|
58
|
-
"dependencies": {
|
|
59
|
-
"@fle-sdk/event-tracking-web": "^1.1.2-alpha.0"
|
|
60
63
|
}
|
|
61
64
|
}
|
package/lib/index.ems.js
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
/*! *****************************************************************************
|
|
2
|
-
Copyright (c) Microsoft Corporation.
|
|
3
|
-
|
|
4
|
-
Permission to use, copy, modify, and/or distribute this software for any
|
|
5
|
-
purpose with or without fee is hereby granted.
|
|
6
|
-
|
|
7
|
-
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
|
8
|
-
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
|
9
|
-
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
|
10
|
-
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
|
11
|
-
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
12
|
-
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
13
|
-
PERFORMANCE OF THIS SOFTWARE.
|
|
14
|
-
***************************************************************************** */
|
|
15
|
-
var e=function(t,n){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])})(t,n)};var t=function(){return(t=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e}).apply(this,arguments)},n=new(function(n){function r(){var e=n.call(this)||this;return e.userId=null,e.currentUrl="",e.pageKey="",e.eventDescMap={PageView:"Web 浏览页面",WebClick:"Web 元素点击",PageRetained:"Web 页面浏览时长",CustomTrack:"Web 自定义代码上报"},e.init=function(t){e.preset(t);var n=window.location.pathname;e.currentUrl=window.location.href,e.pageKey=n.replace(/\//g,"_").substr(1),e.systemsInfo=e.getSystemsInfo(),e.setCookie("retainedStartTime",e.getTimeStamp())},e.preset=function(t){t instanceof Object&&e.each(t,(function(t,n){void 0!==e.config[n]&&(e.config[n]=t)})),/^(((ht|f)tps?):\/\/)?[\w-]+(\.[\w-]+)+([\w.,@?^=%&:/~+#-\(\)]*[\w@?^=%&/~+#-\(\)])?$/.test(e.config.serverUrl)||(e.printLog("当前 server_url 为空或不正确,只在控制台打印日志,network 中不会发数据,请配置正确的 server_url!"),e.config.showLog=!0),e.config.autoTrack?e.listener():e.unlistener()},e.login=function(t){["number","string"].includes(typeof t)&&(e.userId=t)},e.track=function(t){var n=t.desc,r=t.partkey,o=t.business,i=e.getParams({desc:n,event:"CustomTrack",itemKey:e.getItemKey(r),extroInfo:{business:o}});return e.sendAjax(i)},e.listener=function(){e.config.isTrackSinglePage&&(e.rewriteHistory(),e.addSinglePageEvent(e.onPageViewCallback)),e.each(["load","beforeunload"],(function(t){e.addEventListener(window,t,e.onPageViewCallback)})),e.addEventListener(window,"click",e.onClickCallback)},e.unlistener=function(){if(e.config.isTrackSinglePage){var t=window.history.pushState?"popstate":"hashchange";e.each(["pushState","replaceState",t],(function(t){e.removeEventListener(window,t,e.onPageViewCallback)}))}e.each(["load","beforeunload"],(function(t){e.removeEventListener(window,t,e.onPageViewCallback)})),e.removeEventListener(window,"click",e.onClickCallback)},e.onClickCallback=function(t){var n,r;if(null===(r=null===(n=null==t?void 0:t.target)||void 0===n?void 0:n.dataset)||void 0===r?void 0:r.partKey){var o=[t.pageX,t.pageY],i=t.target.id,a=t.target.className,s={id:i,nodeName:t.target.nodeName,className:a},c=e.getParams({event:"WebClick",desc:e.eventDescMap.WebClick,itemKey:e.getItemKey(t.target.dataset.partKey),extroInfo:{position:o,targetEle:s,pointerType:t.pointerType,currentUrl:e.currentUrl,elementSelector:e.getDomSelector(t.target)}});return e.sendAjax(c)}},e.onPageViewCallback=function(t){var n,r,o=window.location.origin;e.sendPageViewData(t.type,{event:"PageView",desc:e.eventDescMap.PageView,extroInfo:{currentUrl:e.currentUrl,targetUrl:(null===(n=t.arguments)||void 0===n?void 0:n[2])?o+(null===(r=t.arguments)||void 0===r?void 0:r[2]):null}}),e.currentUrl=window.location.href,e.pageKey=window.location.pathname.replace(/\//g,"_").substr(1)},e.getParams=function(n){var r=n.event,o=n.desc,i=n.itemKey,a=n.extroInfo,s=void 0===a?{}:a,c=e.config,u=c.appKey,d=c.sdkVersion,l=c.siteId,p=window.innerWidth,g=window.innerHeight,f=window.screen.width,m=window.screen.height;return{desc:o,event:r,appKey:u,siteId:l,itemKey:i||e.getItemKey(),requestTime:e.getTimeStamp(),deviceId:e.getDistinctId(),privateParamMap:t(t({},s),{sdkVersion:d,pageWidth:p,pageHeight:g,screenWidth:f,screenHeight:m,currentUrl:s.currentUrl||e.currentUrl,systemsInfo:e.systemsInfo,urlParams:e.getQueryValue(),userInfo:{userId:e.userId}})}},e.sendPageViewData=function(t,n){var r=e.getParams(n);return e.sendRetained(t),e.sendAjax(r)},e.sendAjax=function(t){var n=e.config,r=n.serverUrl,o=n.sendTimeout,i=n.contentType;return n.showLog&&e.printLog(t),new Promise((function(n,a){e.ajax({url:r,type:"POST",data:JSON.stringify(t),contentType:i,credentials:!1,timeout:o,cors:!0,success:function(e){return n(e)},error:function(e){return a(e)}})}))},e.sendRetained=function(n){var r=e.config.serverUrl,o=e.getParams({event:"PageRetained",desc:e.eventDescMap.PageRetained});if(["beforeunload","pushState","replaceState","hashchange","popstate"].indexOf(n)>=0){var i=e.getCookie("retainedStartTime"),a=i?+i:e.getTimeStamp(),s=t(t({},o),{retainedStartTime:a});"beforeunload"===n?e.sendBeacon({url:r,data:s}):e.sendAjax(s).finally((function(){return e.setCookie("retainedStartTime",e.getTimeStamp())}))}},e.getItemKey=function(t){return[e.config.appKey,e.pageKey,t?t.toString():void 0].filter((function(e){return!!e})).reduce((function(e,t){return e+(e.length?".":"")+t}),"")},e.config={sdkVersion:"1.1.0",appKey:"",siteId:"",showLog:!1,serverUrl:"",autoTrack:!1,useClientTime:!0,queueTimeout:500,sendTimeout:3e3,isTrackSinglePage:!1,contentType:"application/x-www-form-urlencoded"},e.systemsInfo={},e}return function(t,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}(r,n),r.prototype.addSinglePageEvent=function(e){var t=this,n=window.history.pushState?"popstate":"hashchange";this.each(["pushState","replaceState",n],(function(n){t.addEventListener(window,n,e)}))},r}(function(){function e(){var e=this;this.getPlatformType=function(){for(var e=navigator.userAgent,t=new Array("Android","iPhone","SymbianOS","Windows Phone","iPad","iPod"),n=!0,r=0;r<t.length;r++)if(e.indexOf(t[r])>0){n=!1;break}return n?"pc":"h5"},this.addEventListener=function(e,t,n){e.addEventListener?e.addEventListener(t,n,!1):e.attachEvent&&e.attachEvent("on"+t,(function(t){return n.call(e,t)}),!1)},this.removeEventListener=function(e,t,n){e.removeEventListener?e.removeEventListener(t,n):e.detachEvent&&e.detachEvent("on"+t,(function(t){return n.call(e,t)}),!0)},this.rewriteHistory=function(){var e=window.history,t=function(e){var t=window.history,n=t[e],r=new Event(e);return function(){var e=n.apply(t,arguments);return r.arguments=arguments,window.dispatchEvent(r),e}};window.history.pushState&&(e.pushState=t("pushState"),e.replaceState=t("replaceState"))},this.isArray=Array.isArray||function(e){return"[object Array]"===toString.call(e)},this.formatJsonString=function(e){try{return JSON.stringify(e,null," ")}catch(t){return JSON.stringify(e)}},this.nativeForEach=Array.prototype.forEach,this.slice=Array.prototype.slice,this.hasOwnProperty=Object.prototype.hasOwnProperty,this.breaker={},this.each=function(t,n,r){if(null==t)return!1;if(e.nativeForEach&&t.forEach===e.nativeForEach)t.forEach(n,r);else if(e.isArray(t)&&t.length===+t.length){for(var o=0,i=t.length;o<i;o++)if(o in t&&n.call(r,t[o],o,t)===e.breaker)return!1}else for(var a in t)if(e.hasOwnProperty.call(t,a)&&n.call(r,t[a],a,t)===e.breaker)return!1},this.getDomIndex=function(e){if(!e.parentNode)return-1;for(var t=0,n=e.tagName,r=e.parentNode.children,o=0;o<r.length;o++)if(r[o].tagName===n){if(e===r[o])return t;t++}return-1},this.selector=function(t){var n=t.parentNode&&9==t.parentNode.nodeType?-1:e.getDomIndex(t);return t.getAttribute&&t.getAttribute("id")&&/^[A-Za-z][-A-Za-z0-9_:.]*$/.test(t.getAttribute("id"))?"#"+t.getAttribute("id"):t.tagName.toLowerCase()+(~n?":nth-of-type("+(n+1)+")":"")},this.getDomSelector=function(t,n){if(!t||!t.parentNode||!t.parentNode.children)return!1;n=n&&n.join?n:[];var r=t.nodeName.toLowerCase();return t&&"body"!==r&&1==t.nodeType?(n.unshift(e.selector(t)),t.getAttribute&&t.getAttribute("id")&&/^[A-Za-z][-A-Za-z0-9_:.]*$/.test(t.getAttribute("id"))?n.join(" > "):e.getDomSelector(t.parentNode,n)):(n.unshift("body"),n.join(" > "))},this.getCookie=function(e){for(var t=e+"=",n=document.cookie.split(";"),r=0;r<n.length;r++){for(var o=n[r];" "==o.charAt(0);)o=o.substring(1,o.length);if(0==o.indexOf(t))return this._decodeURIComponent(o.substring(t.length,o.length))}return null},this.setCookie=function(e,t,n){var r,o="";n=null==n?73e3:n;var i=this.getMainHost();if(r=i?"; domain="+i:"",0!==n){var a=new Date;"s"===String(n).slice(-1)?a.setTime(a.getTime()+1e3*Number(String(n).slice(0,-1))):a.setTime(a.getTime()+24*n*60*60*1e3),o="; expires="+a.toUTCString()}function s(e){return e||!1}var c="",u="",d="";e&&(c=s(e)),t&&(u=s(t)),r&&(d=s(r)),c&&u&&(document.cookie=c+"="+encodeURIComponent(u)+o+"; path=/"+d)},this.removeCookie=function(t){e.setCookie(t,"",-1)},this.getTimeStamp=function(){return(new Date).getTime()},this.uuid=function(){return"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx".replace(/[xy]/g,(function(e){var t=16*Math.random()|0;return("x"==e?t:3&t|8).toString(16)}))},this.getDistinctId=function(){var t=e.getCookie("distinctId");return t||(t=e.uuid(),e.setCookie("distinctId",t),t)},this.getQueryValue=function(e){for(var t=decodeURI(window.location.href).match(new RegExp("[?&][^?&]+=[^?&]+","g"))||[],n={},r=0;r<t.length;r++){var o=t[r].replace(/\?|\&/,"").split("=");if(o[0]===e)return o[1];n[o[0]]=o[1]}return e?null:n},this.ajax=function(t){function n(e){if(!e)return"";try{return JSON.parse(e)}catch(e){return{}}}t.timeout=t.timeout||3e4,t.credentials=void 0===t.credentials||t.credentials;var r=e.xhr(t.cors);if(!r)return!1;t.type||(t.type=t.data?"POST":"GET");var o,i=t.success,a=t.error;t.success=function(e){i(e),o&&(clearTimeout(o),o=null)},t.error=function(e){a(e),o&&(clearTimeout(o),o=null)},o=setTimeout((function(){!function(){try{e.isObject(r)&&r.abort&&r.abort()}catch(t){e.printLog(t)}o&&(clearTimeout(o),o=null,t.error&&t.error(),r.onreadystatechange=null,r.onload=null,r.onerror=null)}()}),t.timeout),r.onreadystatechange=function(){try{4==r.readyState&&(r.status>=200&&r.status<300||304==r.status?t.success(n(r.responseText)):t.error(n(r.responseText),r.status),r.onreadystatechange=null,r.onload=null)}catch(e){r.onreadystatechange=null,r.onload=null}},r.open(t.type,t.url,!0);try{t.credentials&&(r.withCredentials=!0),e.isObject(t.header)&&e.each(t.header,(function(e,t){r.setRequestHeader&&r.setRequestHeader(t,e)})),t.data&&(t.cors||r.setRequestHeader&&r.setRequestHeader("X-Requested-With","XMLHttpRequest"),"application/json"===t.contentType?r.setRequestHeader&&r.setRequestHeader("Content-type","application/json; charset=UTF-8"):r.setRequestHeader&&r.setRequestHeader("Content-type","application/x-www-form-urlencoded"))}catch(t){e.printLog(t)}r.send(t.data||null)},this.xhr=function(e){return e?void 0!==window.XMLHttpRequest&&"withCredentials"in new XMLHttpRequest?new XMLHttpRequest:null:void 0!==window.XMLHttpRequest?new XMLHttpRequest:null},this.sendBeacon=function(e){return"object"==typeof navigator&&"function"==typeof navigator.sendBeacon?(navigator.sendBeacon(e.url,new URLSearchParams(JSON.stringify(e.data||{}))),Promise.resolve({message:"发送成功!"})):Promise.reject({message:"不支持sendBeacon,发送失败!"})}}return e.prototype.printLog=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];if(this.isObject(e[0])&&(e[0]=this.formatJsonString(e[0])),"object"==typeof console&&console.log)try{return console.log.apply(console,e)}catch(t){console.log(e[0])}},e.prototype.getSystemsInfo=function(){var e=navigator.userAgent,t=[],n={language:navigator.language},r=e.match(/MicroMessenger\/([\d\.]+)/i),o=r&&r[1]?r[1]:null,i=e.match(/(ipod).*\s([\d_]+)/i),a=e.match(/(ipad).*\s([\d_]+)/i),s=e.match(/(iphone)\sos\s([\d_]+)/i),c=e.match(/(android)\s([\d\.]+)/i),u=e.match(/(Mac OS X)\s([\d_]+)/i);t=[],c?t.push("Android "+c[2]):s?t.push("iPhone, iOS "+s[2].replace(/_/g,".")):a?t.push("iPad, iOS "+a[2].replace(/_/g,".")):i?t.push("iPod, iOS "+i[2].replace(/_/g,".")):u&&t.push("Mac, MacOS "+u[2].replace(/_/g,".")),o&&t.push("WeChat "+o),n.platform=this.getPlatformType(),n.client=t.length?t.join(", "):"Unknown";var d=e.toLowerCase().match(/ nettype\/([^ ]+)/g);return d&&d[0]&&(t=[(d=d[0].split("/"))[1]],n.network=t.length?t.join(", "):"Unknown"),n.ua=e,setTimeout((function(){var e=window.performance||window.msPerformance||window.webkitPerformance;if(e&&e.timing){var t=e.timing;t.navigationStart&&(n.navigationStart=t.navigationStart),t.navigationStart&&t.domainLookupStart&&(n.navigation=t.domainLookupStart-t.navigationStart+"ms"),t.domainLookupEnd&&t.domainLookupStart&&(n.dns=t.domainLookupEnd-t.domainLookupStart+"ms"),t.connectEnd&&t.connectStart&&(t.connectEnd&&t.secureConnectionStart?n["tcp (ssl)"]=t.connectEnd-t.connectStart+"ms ("+(t.connectEnd-t.secureConnectionStart)+"ms)":n.tcp=t.connectEnd-t.connectStart+"ms"),t.responseStart&&t.requestStart&&(n.request=t.responseStart-t.requestStart+"ms"),t.responseEnd&&t.responseStart&&(n.response=t.responseEnd-t.responseStart+"ms"),t.domComplete&&t.domLoading&&(t.domContentLoadedEventStart&&t.domLoading?n["domComplete (domLoaded)"]=t.domComplete-t.domLoading+"ms ("+(t.domContentLoadedEventStart-t.domLoading)+"ms)":n.domComplete=t.domComplete-t.domLoading+"ms"),t.loadEventEnd&&t.loadEventStart&&(n.loadEvent=t.loadEventEnd-t.loadEventStart+"ms"),t.navigationStart&&t.loadEventEnd&&(n["total (DOM)"]=t.loadEventEnd-t.navigationStart+"ms ("+(t.domComplete-t.navigationStart)+"ms)")}}),0),n},e.prototype.isObject=function(e){return null!=e&&"[object Object]"==toString.call(e)},e.prototype.isUndefined=function(e){return void 0===e},e.prototype.isString=function(e){return"[object String]"==toString.call(e)},e.prototype.isDate=function(e){return"[object Date]"==toString.call(e)},e.prototype.isBoolean=function(e){return"[object Boolean]"==toString.call(e)},e.prototype.isNumber=function(e){return"[object Number]"==toString.call(e)&&/[\d\.]+/.test(String(e))},e.prototype.isElement=function(e){return!(!e||1!==e.nodeType)},e.prototype.isFunction=function(e){if(!e)return!1;var t=toString.call(e);return"[object Function]"==t||"[object AsyncFunction]"==t},e.prototype.isJSONString=function(e){try{JSON.parse(e)}catch(e){return!1}return!0},e.prototype._decodeURIComponent=function(e){var t=e;try{t=decodeURIComponent(e)}catch(n){t=e}return t},e.prototype.getMainHost=function(){var e="mh_"+Math.random(),t=new RegExp("(^|;)\\s*"+e+"=12345"),n=new Date(0),r=document.domain.split("."),o=[];for(o.unshift(r.pop());r.length;){o.unshift(r.pop());var i=o.join("."),a=e+"=12345;domain=."+i;if(document.cookie=a,t.test(document.cookie))return document.cookie=a+";expires="+n,i}},e}()));export default n;
|
|
16
|
-
//# sourceMappingURL=index.ems.js.map
|
package/lib/index.ems.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.ems.js","sources":["../node_modules/tslib/tslib.es6.js","../src/lib/index.ts","../src/lib/tools.ts"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from) {\r\n for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\r\n to[j] = from[i];\r\n return to;\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","/**\n * web 数据埋点 SDK\n * @class WebTracking\n * @version 1.1.0\n * key由这几部分组成:appkey.pagekey.partkey 通过“.”来分割\n * appkey:应用唯一标识\n * pagekey:页面唯一标识,取当前路由 window.location.pathname.replace(/\\//g, '_').substr(1)\n * partkey:控件/自定义事件的唯一标识,当是控件触发且没有partkey时,会取当前控件的 id/class/dom\n */\nimport Tools from \"./tools\";\nimport { EventParams, InitParams, ConfigTypes, SystemsInfo, TrackParams, PresetParams, TrackingPostParams, HistoryType, TargetEleProps } from \"./type\";\n\nclass WebTracking extends Tools {\n config: ConfigTypes;\n systemsInfo: SystemsInfo;\n\n constructor() {\n super();\n this.config = {\n sdkVersion: \"1.1.0\", // sdk版本\n appKey: \"\", // 应用唯一标识(由接口生成)\n siteId: \"\", // 站点 ID\n showLog: false, // (是否在网页控制台打印发送的数据)默认:不打印\n serverUrl: \"\", // 数据接收地址\n autoTrack: false, //(是否开启全埋点)指的是:页面浏览、元素点击事件自动上报 默认: 关闭\n useClientTime: true, //(是否使用客户端系统时间)注意:客户端系统时间可能会不准确,导致该字段不准确 默认:使用\n queueTimeout: 500, //(队列单条数据最大发送时长,超过该时长将自动发送下一条数据)500ms(默认)\n sendTimeout: 3000, //(接口发送超时时长,超过该时长未发送成功将强制取消)3000ms(默认)\n isTrackSinglePage: false, //(是否采集单页面应用的路由变化)默认: 不采集\n contentType: \"application/x-www-form-urlencoded\", // 数据类型,默认form data\n };\n // 系统信息\n this.systemsInfo = {};\n }\n\n // 用户ID\n protected userId?: number | string = null;\n // 当前路由\n protected currentUrl: string = \"\";\n // 页面唯一标识,取当前路由 window.location.pathname.replace(/\\//g, '_').substr(1)\n protected pageKey: string = \"\";\n // 上传事件描述\n protected eventDescMap: { [key: string]: string } = {\n PageView: \"Web 浏览页面\",\n WebClick: \"Web 元素点击\",\n PageRetained: \"Web 页面浏览时长\",\n CustomTrack: \"Web 自定义代码上报\",\n };\n\n /**\n * 初始化函数\n */\n public init = (initParams: InitParams) => {\n this.preset(initParams);\n\n const pathname = window.location.pathname;\n this.currentUrl = window.location.href;\n this.pageKey = pathname.replace(/\\//g, \"_\").substr(1);\n\n this.systemsInfo = this.getSystemsInfo();\n\n this.setCookie(\"retainedStartTime\", this.getTimeStamp());\n };\n\n /**\n * @description 预置参数\n */\n public preset = (presetParams: PresetParams) => {\n if (presetParams instanceof Object) {\n this.each(presetParams, (val, key) => {\n if (this.config[key] !== undefined) {\n // TODO:后面加一些校验\n this.config[key] = val;\n }\n });\n }\n\n if (!/^(((ht|f)tps?):\\/\\/)?[\\w-]+(\\.[\\w-]+)+([\\w.,@?^=%&:/~+#-\\(\\)]*[\\w@?^=%&/~+#-\\(\\)])?$/.test(this.config[\"serverUrl\"])) {\n this.printLog(\"当前 server_url 为空或不正确,只在控制台打印日志,network 中不会发数据,请配置正确的 server_url!\");\n this.config[\"showLog\"] = true;\n }\n\n // 如果启用了全埋点\n if (!!this.config[\"autoTrack\"]) {\n // 启用监听\n this.listener();\n } else {\n // 取消监听\n this.unlistener();\n }\n };\n\n /**\n * 用户登录\n */\n public login = (userId: number | string) => {\n if ([\"number\", \"string\"].includes(typeof userId)) this.userId = userId;\n };\n\n /**\n * 自定义代码埋点上报\n * @param {string} event [事件类型]\n * @param {object} extroInfo [扩展信息]\n * @return {Promise} [回调]\n */\n public track = ({ desc, partkey, business }: TrackParams): Promise<{}> => {\n const params = this.getParams({\n desc,\n event: \"CustomTrack\",\n itemKey: this.getItemKey(partkey),\n extroInfo: {\n business,\n },\n });\n return this.sendAjax(params);\n };\n\n /**\n * @description 监听全埋点事件\n */\n protected listener = () => {\n if (!!this.config.isTrackSinglePage) {\n this.rewriteHistory();\n this.addSinglePageEvent(this.onPageViewCallback);\n }\n\n this.each([\"load\", \"beforeunload\"], (historyType: HistoryType) => {\n this.addEventListener(window, historyType, this.onPageViewCallback);\n });\n\n this.addEventListener(window, \"click\", this.onClickCallback);\n };\n\n /**\n * @description 取消全埋点事件\n */\n protected unlistener = () => {\n if (!!this.config.isTrackSinglePage) {\n const historyPushState = window.history.pushState;\n const singlePageEvent = !!historyPushState ? \"popstate\" : \"hashchange\";\n this.each([\"pushState\", \"replaceState\", singlePageEvent], (historyName: string) => {\n this.removeEventListener(window, historyName, this.onPageViewCallback);\n });\n }\n\n this.each([\"load\", \"beforeunload\"], (historyType: HistoryType) => {\n this.removeEventListener(window, historyType, this.onPageViewCallback);\n });\n\n this.removeEventListener(window, \"click\", this.onClickCallback);\n };\n\n protected onClickCallback = (e: any): Promise<{}> => {\n if (!e?.target?.dataset?.partKey) return;\n\n const position = [e.pageX, e.pageY];\n const id = e.target.id;\n const className = e.target.className;\n const nodeName = e.target.nodeName;\n const targetEle: TargetEleProps = {\n id,\n nodeName,\n className,\n };\n\n const params = this.getParams({\n event: \"WebClick\",\n desc: this.eventDescMap[\"WebClick\"],\n itemKey: this.getItemKey(e.target.dataset.partKey),\n extroInfo: {\n position,\n targetEle,\n pointerType: e.pointerType,\n currentUrl: this.currentUrl,\n elementSelector: this.getDomSelector(e.target),\n },\n });\n\n return this.sendAjax(params);\n };\n\n /**\n * @description 添加单页面监听事件\n * @param callback\n */\n public addSinglePageEvent(callback: (e: EventParams) => void) {\n const historyPushState = window.history.pushState;\n\n const singlePageEvent = historyPushState ? \"popstate\" : \"hashchange\";\n\n this.each([\"pushState\", \"replaceState\", singlePageEvent], (historyType: HistoryType) => {\n this.addEventListener(window, historyType, callback);\n });\n }\n\n /**\n * @description 路由触发事件\n */\n protected onPageViewCallback = (e: EventParams) => {\n const ORGIN = window.location.origin;\n this.sendPageViewData(e.type, {\n event: \"PageView\",\n desc: this.eventDescMap[\"PageView\"],\n extroInfo: {\n currentUrl: this.currentUrl,\n targetUrl: e.arguments?.[2] ? ORGIN + e.arguments?.[2] : null,\n },\n });\n\n this.currentUrl = window.location.href;\n this.pageKey = window.location.pathname.replace(/\\//g, \"_\").substr(1);\n };\n\n getParams = ({ event, desc, itemKey, extroInfo = {} }: TrackingPostParams) => {\n const { appKey, sdkVersion, siteId } = this.config;\n\n const pageWidth = window.innerWidth;\n const pageHeight = window.innerHeight;\n const screenWidth = window.screen.width;\n const screenHeight = window.screen.height;\n\n const params = {\n desc,\n event,\n appKey,\n siteId,\n itemKey: itemKey || this.getItemKey(),\n requestTime: this.getTimeStamp(),\n deviceId: this.getDistinctId(),\n privateParamMap: {\n ...extroInfo,\n sdkVersion,\n pageWidth,\n pageHeight,\n screenWidth,\n screenHeight,\n currentUrl: extroInfo.currentUrl || this.currentUrl,\n systemsInfo: this.systemsInfo,\n urlParams: this.getQueryValue(),\n userInfo: {\n userId: this.userId,\n },\n },\n };\n\n return params;\n };\n\n sendPageViewData = (type: string, e: TrackingPostParams) => {\n const params = this.getParams(e);\n\n this.sendRetained(type);\n\n return this.sendAjax(params);\n };\n\n sendAjax = (params: { [key: string]: any }): Promise<{}> => {\n const { serverUrl, sendTimeout, contentType, showLog } = this.config;\n\n if (!!showLog) this.printLog(params);\n\n return new Promise((resolve, reject) => {\n this.ajax({\n url: serverUrl,\n type: \"POST\",\n data: JSON.stringify(params),\n contentType: contentType,\n credentials: false,\n timeout: sendTimeout,\n cors: true,\n success: (res) => resolve(res),\n error: (err) => reject(err),\n });\n });\n };\n\n /**\n * @description 留存时长上报\n * @param type\n */\n sendRetained = (type: string) => {\n const { serverUrl } = this.config;\n\n const params = this.getParams({ event: \"PageRetained\", desc: this.eventDescMap[\"PageRetained\"] });\n\n if ([\"beforeunload\", \"pushState\", \"replaceState\", \"hashchange\", \"popstate\"].indexOf(type) >= 0) {\n const __time = this.getCookie(\"retainedStartTime\");\n const retainedStartTime = __time ? +__time : this.getTimeStamp();\n const retainedData = {\n ...params,\n retainedStartTime,\n };\n type === \"beforeunload\"\n ? this.sendBeacon({\n url: serverUrl,\n data: retainedData,\n })\n : this.sendAjax(retainedData).finally(() => this.setCookie(\"retainedStartTime\", this.getTimeStamp()));\n }\n };\n\n /**\n * @description 获取 itemKey\n * @param {[string]} partkey [控件/自定义事件的唯一标识,当是控件触发且没有partkey时,会取当前控件的 id/class/dom]\n * @return {[string]}\n */\n protected getItemKey = (partkey?: string | number): string => {\n const appKey = this.config.appKey;\n const keys: string[] = [appKey, this.pageKey, partkey ? partkey.toString() : undefined].filter((key: string | undefined) => !!key);\n return keys.reduce((str, key) => str + `${str.length ? \".\" : \"\"}` + key, \"\");\n };\n}\n\nexport default new WebTracking();\n","/**\n * 埋点工具函数\n */\nimport { Target, SystemsInfo, JsonProps } from \"./type\";\n\nexport default class WebTrackingTools {\n constructor() {}\n\n /**\n * 打印log\n */\n public printLog(...rest: any) {\n if (this.isObject(rest[0])) {\n rest[0] = this.formatJsonString(rest[0]);\n }\n\n if (typeof console === \"object\" && console.log) {\n try {\n return console.log.apply(console, rest);\n } catch (e) {\n console.log(rest[0]);\n }\n }\n }\n\n /**\n * 获取平台类型\n * @return {[string]} [pc / h5]\n */\n public getPlatformType = () => {\n const userAgentInfo = navigator.userAgent;\n const Agents = new Array(\"Android\", \"iPhone\", \"SymbianOS\", \"Windows Phone\", \"iPad\", \"iPod\");\n let flag = true;\n for (let v = 0; v < Agents.length; v++) {\n if (userAgentInfo.indexOf(Agents[v]) > 0) {\n flag = false;\n break;\n }\n }\n return flag ? \"pc\" : \"h5\";\n };\n\n /**\n * 系统信息\n */\n public getSystemsInfo() {\n // print system info\n const ua = navigator.userAgent;\n const language = navigator.language;\n\n let logMsg: string[] = [];\n let systemsInfo: SystemsInfo = {\n language,\n };\n\n // wechat client version\n const wxVersionMatch = ua.match(/MicroMessenger\\/([\\d\\.]+)/i);\n const wxVersion = wxVersionMatch && wxVersionMatch[1] ? wxVersionMatch[1] : null;\n\n // device & system\n const ipod = ua.match(/(ipod).*\\s([\\d_]+)/i),\n ipad = ua.match(/(ipad).*\\s([\\d_]+)/i),\n iphone = ua.match(/(iphone)\\sos\\s([\\d_]+)/i),\n android = ua.match(/(android)\\s([\\d\\.]+)/i),\n mac = ua.match(/(Mac OS X)\\s([\\d_]+)/i);\n\n logMsg = [];\n if (android) {\n logMsg.push(\"Android \" + android[2]);\n } else if (iphone) {\n logMsg.push(\"iPhone, iOS \" + iphone[2].replace(/_/g, \".\"));\n } else if (ipad) {\n logMsg.push(\"iPad, iOS \" + ipad[2].replace(/_/g, \".\"));\n } else if (ipod) {\n logMsg.push(\"iPod, iOS \" + ipod[2].replace(/_/g, \".\"));\n } else if (mac) {\n logMsg.push(\"Mac, MacOS \" + mac[2].replace(/_/g, \".\"));\n }\n if (wxVersion) {\n logMsg.push(\"WeChat \" + wxVersion);\n }\n\n systemsInfo[\"platform\"] = this.getPlatformType();\n\n systemsInfo[\"client\"] = logMsg.length ? logMsg.join(\", \") : \"Unknown\";\n\n // network type\n let network = ua.toLowerCase().match(/ nettype\\/([^ ]+)/g);\n if (network && network[0]) {\n network = network[0].split(\"/\");\n logMsg = [network[1]];\n systemsInfo[\"network\"] = logMsg.length ? logMsg.join(\", \") : \"Unknown\";\n }\n\n // User Agent\n systemsInfo[\"ua\"] = ua;\n\n // performance related\n // use `setTimeout` to make sure all timing points are available\n setTimeout(function () {\n const performance = window.performance || (<any>window).msPerformance || (<any>window).webkitPerformance;\n\n // timing\n if (performance && performance.timing) {\n const t = performance.timing;\n if (t.navigationStart) {\n systemsInfo[\"navigationStart\"] = t.navigationStart;\n }\n if (t.navigationStart && t.domainLookupStart) {\n systemsInfo[\"navigation\"] = t.domainLookupStart - t.navigationStart + \"ms\";\n }\n if (t.domainLookupEnd && t.domainLookupStart) {\n systemsInfo[\"dns\"] = t.domainLookupEnd - t.domainLookupStart + \"ms\";\n }\n if (t.connectEnd && t.connectStart) {\n if (t.connectEnd && t.secureConnectionStart) {\n systemsInfo[\"tcp (ssl)\"] = t.connectEnd - t.connectStart + \"ms (\" + (t.connectEnd - t.secureConnectionStart) + \"ms)\";\n } else {\n systemsInfo[\"tcp\"] = t.connectEnd - t.connectStart + \"ms\";\n }\n }\n if (t.responseStart && t.requestStart) {\n systemsInfo[\"request\"] = t.responseStart - t.requestStart + \"ms\";\n }\n if (t.responseEnd && t.responseStart) {\n systemsInfo[\"response\"] = t.responseEnd - t.responseStart + \"ms\";\n }\n if (t.domComplete && t.domLoading) {\n if (t.domContentLoadedEventStart && t.domLoading) {\n systemsInfo[\"domComplete (domLoaded)\"] = t.domComplete - t.domLoading + \"ms (\" + (t.domContentLoadedEventStart - t.domLoading) + \"ms)\";\n } else {\n systemsInfo[\"domComplete\"] = t.domComplete - t.domLoading + \"ms\";\n }\n }\n if (t.loadEventEnd && t.loadEventStart) {\n systemsInfo[\"loadEvent\"] = t.loadEventEnd - t.loadEventStart + \"ms\";\n }\n if (t.navigationStart && t.loadEventEnd) {\n systemsInfo[\"total (DOM)\"] = t.loadEventEnd - t.navigationStart + \"ms (\" + (t.domComplete - t.navigationStart) + \"ms)\";\n }\n }\n }, 0);\n\n return systemsInfo;\n }\n\n /**\n * 监听事件\n * @param {Window | Element} target\n * @param {String} type\n * @param {Function} handler\n */\n protected addEventListener = (target: Target, type: string, handler: (e: Event) => void) => {\n if (target.addEventListener) {\n target.addEventListener(type, handler, false);\n } else {\n target.attachEvent &&\n target.attachEvent(\n \"on\" + type,\n function (event) {\n return handler.call(target, event);\n },\n false\n );\n }\n };\n\n /**\n * 移除监听事件\n * @param {Element} target\n * @param {String} type\n * @param {Funtion} handler\n */\n protected removeEventListener = (target: Target, type: string, handler: (e: Event) => void) => {\n if (target.removeEventListener) {\n target.removeEventListener(type, handler);\n } else {\n target.detachEvent &&\n target.detachEvent(\n \"on\" + type,\n function (event) {\n return handler.call(target, event);\n },\n true\n );\n }\n };\n\n /**\n * 重写history[pushState][replaceState]方法\n */\n public rewriteHistory = () => {\n const history = window.history;\n\n const historyWrap = function (type: \"pushState\" | \"replaceState\") {\n const history = window.history;\n const orig: any = history[type];\n const e: any = new Event(type);\n return function () {\n const rv = orig.apply(history, arguments);\n e.arguments = arguments;\n window.dispatchEvent(e);\n return rv;\n };\n };\n\n // 重写\n if (!!window.history.pushState) {\n history.pushState = historyWrap(\"pushState\");\n history.replaceState = historyWrap(\"replaceState\");\n }\n };\n\n /**\n * @description 检验是否是对象\n */\n public isObject(obj) {\n if (obj == null) {\n return false;\n } else {\n return toString.call(obj) == \"[object Object]\";\n }\n }\n\n public isUndefined(obj) {\n return obj === void 0;\n }\n\n public isArray =\n Array.isArray ||\n function (obj) {\n return toString.call(obj) === \"[object Array]\";\n };\n\n public isString(obj) {\n return toString.call(obj) == \"[object String]\";\n }\n\n public isDate(obj) {\n return toString.call(obj) == \"[object Date]\";\n }\n\n public isBoolean(obj) {\n return toString.call(obj) == \"[object Boolean]\";\n }\n\n public isNumber(obj) {\n return toString.call(obj) == \"[object Number]\" && /[\\d\\.]+/.test(String(obj));\n }\n\n public isElement(obj) {\n return !!(obj && obj.nodeType === 1);\n }\n\n public isFunction(f) {\n if (!f) {\n return false;\n }\n const type = toString.call(f);\n return type == \"[object Function]\" || type == \"[object AsyncFunction]\";\n }\n\n public isJSONString(str) {\n try {\n JSON.parse(str);\n } catch (e) {\n return false;\n }\n return true;\n }\n\n /**\n * 将json序列化成json字符串\n * @param obj\n * @returns {[JsonString]} [json字符串]\n */\n protected formatJsonString = (obj): string => {\n try {\n return JSON.stringify(obj, null, \" \");\n } catch (e) {\n return JSON.stringify(obj);\n }\n };\n\n public nativeForEach = Array.prototype.forEach;\n public slice = Array.prototype.slice;\n public hasOwnProperty = Object.prototype.hasOwnProperty;\n public breaker = {};\n\n /**\n * @description 循环遍历\n */\n public each = (obj, iterator, context?: null) => {\n if (obj == null) {\n return false;\n }\n\n if (this.nativeForEach && obj.forEach === this.nativeForEach) {\n obj.forEach(iterator, context);\n } else if (this.isArray(obj) && obj.length === +obj.length) {\n for (let i = 0, l = obj.length; i < l; i++) {\n if (i in obj && iterator.call(context, obj[i], i, obj) === this.breaker) {\n return false;\n }\n }\n } else {\n for (let key in obj) {\n if (this.hasOwnProperty.call(obj, key)) {\n if (iterator.call(context, obj[key], key, obj) === this.breaker) {\n return false;\n }\n }\n }\n }\n };\n\n public _decodeURIComponent(val) {\n let result = val;\n try {\n result = decodeURIComponent(val);\n } catch (e) {\n result = val;\n }\n return result;\n }\n\n public getMainHost() {\n let key = `mh_${Math.random()}`;\n let keyR = new RegExp(`(^|;)\\\\s*${key}=12345`);\n let expiredTime = new Date(0);\n let domain = document.domain;\n let domainList = domain.split(\".\");\n\n let urlItems = [];\n // 主域名一定会有两部分组成\n urlItems.unshift(domainList.pop());\n // 慢慢从后往前测试\n while (domainList.length) {\n urlItems.unshift(domainList.pop());\n let mainHost = urlItems.join(\".\");\n let cookie = `${key}=${12345};domain=.${mainHost}`;\n\n document.cookie = cookie;\n\n //如果cookie存在,则说明域名合法\n if (keyR.test(document.cookie)) {\n document.cookie = `${cookie};expires=${expiredTime}`;\n return mainHost;\n }\n }\n }\n\n protected getDomIndex = (el: Element): number => {\n if (!el.parentNode) return -1;\n let i = 0;\n const nodeName = el.tagName;\n const list = el.parentNode.children;\n for (let n = 0; n < list.length; n++) {\n if (list[n].tagName === nodeName) {\n if (el === list[n]) {\n return i;\n } else {\n i++;\n }\n }\n }\n return -1;\n };\n\n protected selector = (el: Element): string => {\n const i = el.parentNode && 9 == el.parentNode.nodeType ? -1 : this.getDomIndex(el);\n if (el.getAttribute && el.getAttribute(\"id\") && /^[A-Za-z][-A-Za-z0-9_:.]*$/.test(el.getAttribute(\"id\"))) {\n return \"#\" + el.getAttribute(\"id\");\n } else {\n return el.tagName.toLowerCase() + (~i ? \":nth-of-type(\" + (i + 1) + \")\" : \"\");\n }\n };\n\n public getDomSelector = (el: any, arr?: string[]) => {\n if (!el || !el.parentNode || !el.parentNode.children) {\n return false;\n }\n arr = arr && arr.join ? arr : [];\n const name = el.nodeName.toLowerCase();\n if (!el || name === \"body\" || 1 != el.nodeType) {\n arr.unshift(\"body\");\n return arr.join(\" > \");\n }\n arr.unshift(this.selector(el));\n if (el.getAttribute && el.getAttribute(\"id\") && /^[A-Za-z][-A-Za-z0-9_:.]*$/.test(el.getAttribute(\"id\"))) return arr.join(\" > \");\n return this.getDomSelector(el.parentNode, arr);\n };\n\n /**\n * @description 增强cookie操作\n */\n public getCookie = function (name) {\n const nameEQ = name + \"=\";\n const ca = document.cookie.split(\";\");\n for (let i = 0; i < ca.length; i++) {\n let c = ca[i];\n while (c.charAt(0) == \" \") {\n c = c.substring(1, c.length);\n }\n if (c.indexOf(nameEQ) == 0) {\n return this._decodeURIComponent(c.substring(nameEQ.length, c.length));\n }\n }\n return null;\n };\n public setCookie = function (name: string, value: string | number, days?: number) {\n let cdomain = \"\",\n expires = \"\",\n secure = \"\",\n samesite = \"\";\n days = days == null ? 73000 : days;\n\n const domain = this.getMainHost();\n cdomain = domain ? \"; domain=\" + domain : \"\";\n\n if (days !== 0) {\n const date = new Date();\n if (String(days).slice(-1) === \"s\") {\n date.setTime(date.getTime() + Number(String(days).slice(0, -1)) * 1000);\n } else {\n date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);\n }\n\n expires = \"; expires=\" + date.toUTCString();\n }\n\n function getValid(data) {\n if (data) {\n return data;\n } else {\n return false;\n }\n }\n let valid_name = \"\";\n let valid_value = \"\";\n let valid_domain = \"\";\n if (name) {\n valid_name = getValid(name);\n }\n if (value) {\n valid_value = getValid(value);\n }\n if (cdomain) {\n valid_domain = getValid(cdomain);\n }\n if (valid_name && valid_value) {\n document.cookie = valid_name + \"=\" + encodeURIComponent(valid_value) + expires + \"; path=/\" + valid_domain + samesite + secure;\n }\n };\n public removeCookie = (name) => {\n this.setCookie(name, \"\", -1);\n };\n\n /**\n * 获取当前时间戳\n * @return {number} [当前时间戳]\n */\n public getTimeStamp = (): number => {\n return new Date().getTime();\n };\n\n /**\n * 获取 UUID\n * @return {string} [UUID唯一值]\n */\n public uuid = () => {\n return \"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\".replace(/[xy]/g, function (c) {\n const r = (Math.random() * 16) | 0,\n v = c == \"x\" ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n };\n\n /**\n * 获取设备Id\n * @return {number} [设备Id]\n */\n public getDistinctId = () => {\n let distinctId = this.getCookie(\"distinctId\");\n if (distinctId) return distinctId;\n distinctId = this.uuid();\n this.setCookie(\"distinctId\", distinctId);\n return distinctId;\n };\n\n /**\n * 获取url中的参数\n * @param {[string]} name [参数名]\n * @return {[string]} [参数值]\n */\n public getQueryValue = (name?: string): string | null | JsonProps => {\n const _href = decodeURI(window.location.href);\n const queryArr = _href.match(new RegExp(\"[?&][^?&]+=[^?&]+\", \"g\")) || [];\n const paramsObj: JsonProps = {};\n for (let i = 0; i < queryArr.length; i++) {\n const _item = queryArr[i].replace(/\\?|\\&/, \"\");\n const pair = _item.split(\"=\");\n if (pair[0] === name) {\n return pair[1];\n } else {\n paramsObj[pair[0]] = pair[1];\n }\n }\n return name ? null : paramsObj;\n };\n\n /**\n *\n * @param {[object]} para [ajax参数]\n * @returns\n */\n public ajax = (para: any) => {\n para.timeout = para.timeout || 30000;\n\n para.credentials = typeof para.credentials === \"undefined\" ? true : para.credentials;\n\n function getJSON(data) {\n if (!data) {\n return \"\";\n }\n try {\n return JSON.parse(data);\n } catch (e) {\n return {};\n }\n }\n\n const g = this.xhr(para.cors);\n if (!g) {\n return false;\n }\n\n if (!para.type) {\n para.type = para.data ? \"POST\" : \"GET\";\n }\n\n const oldsuccess = para.success;\n const olderror = para.error;\n let errorTimer;\n\n const abort = () => {\n try {\n if (this.isObject(g) && g.abort) {\n g.abort();\n }\n } catch (error) {\n this.printLog(error);\n }\n\n if (errorTimer) {\n clearTimeout(errorTimer);\n errorTimer = null;\n para.error && para.error();\n g.onreadystatechange = null;\n g.onload = null;\n g.onerror = null;\n }\n };\n\n para.success = function (data) {\n oldsuccess(data);\n if (errorTimer) {\n clearTimeout(errorTimer);\n errorTimer = null;\n }\n };\n para.error = function (err) {\n olderror(err);\n if (errorTimer) {\n clearTimeout(errorTimer);\n errorTimer = null;\n }\n };\n errorTimer = setTimeout(function () {\n abort();\n }, para.timeout);\n\n g.onreadystatechange = function () {\n try {\n if (g.readyState == 4) {\n if ((g.status >= 200 && g.status < 300) || g.status == 304) {\n para.success(getJSON(g.responseText));\n } else {\n para.error(getJSON(g.responseText), g.status);\n }\n g.onreadystatechange = null;\n g.onload = null;\n }\n } catch (e) {\n g.onreadystatechange = null;\n g.onload = null;\n }\n };\n\n g.open(para.type, para.url, true);\n\n try {\n if (para.credentials) {\n g.withCredentials = true;\n }\n if (this.isObject(para.header)) {\n this.each(para.header, function (v, i) {\n g.setRequestHeader && g.setRequestHeader(i, v);\n });\n }\n\n if (para.data) {\n if (!para.cors) {\n g.setRequestHeader && g.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\");\n }\n if (para.contentType === \"application/json\") {\n g.setRequestHeader && g.setRequestHeader(\"Content-type\", \"application/json; charset=UTF-8\");\n } else {\n g.setRequestHeader && g.setRequestHeader(\"Content-type\", \"application/x-www-form-urlencoded\");\n }\n }\n } catch (e) {\n this.printLog(e);\n }\n\n g.send(para.data || null);\n };\n public xhr = (cors) => {\n if (cors) {\n if (typeof window.XMLHttpRequest !== \"undefined\" && \"withCredentials\" in new XMLHttpRequest()) {\n return new XMLHttpRequest();\n } else {\n return null;\n }\n } else if (typeof window.XMLHttpRequest !== \"undefined\") {\n return new XMLHttpRequest();\n } else {\n return null;\n }\n };\n\n /**\n * sendBeacon请求\n * @param {[string]} url\n * @param {[object]} params\n */\n public sendBeacon = (para: any): Promise<{ message: string }> => {\n if (typeof navigator === \"object\" && typeof navigator.sendBeacon === \"function\") {\n // const headers = {\n // type: 'application/json'\n // };\n // const blob = new Blob([JSON.stringify(data.params)], headers);\n navigator.sendBeacon(para.url, new URLSearchParams(JSON.stringify(para.data || {})));\n return Promise.resolve({ message: \"发送成功!\" });\n } else {\n return Promise.reject({ message: \"不支持sendBeacon,发送失败!\" });\n }\n };\n}\n"],"names":["extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","prototype","hasOwnProperty","call","__assign","assign","t","s","i","n","arguments","length","apply","this","_super","_this","PageView","WebClick","PageRetained","CustomTrack","initParams","preset","pathname","window","location","currentUrl","href","pageKey","replace","substr","systemsInfo","getSystemsInfo","setCookie","getTimeStamp","presetParams","each","val","key","undefined","config","test","printLog","listener","unlistener","userId","includes","_a","desc","partkey","business","params","getParams","event","itemKey","getItemKey","extroInfo","sendAjax","isTrackSinglePage","rewriteHistory","addSinglePageEvent","onPageViewCallback","historyType","addEventListener","onClickCallback","singlePageEvent","history","pushState","historyName","removeEventListener","e","target","dataset","partKey","position","pageX","pageY","id","className","targetEle","nodeName","eventDescMap","pointerType","elementSelector","getDomSelector","ORGIN","origin","sendPageViewData","type","targetUrl","_b","_c","appKey","sdkVersion","siteId","pageWidth","innerWidth","pageHeight","innerHeight","screenWidth","screen","width","screenHeight","height","requestTime","deviceId","getDistinctId","privateParamMap","urlParams","getQueryValue","userInfo","sendRetained","serverUrl","sendTimeout","contentType","Promise","resolve","reject","ajax","url","data","JSON","stringify","credentials","timeout","cors","success","res","error","err","indexOf","__time","getCookie","retainedStartTime","retainedData","sendBeacon","finally","toString","filter","reduce","str","showLog","autoTrack","useClientTime","queueTimeout","TypeError","String","__","constructor","create","__extends","WebTracking","callback","userAgentInfo","navigator","userAgent","Agents","flag","v","handler","attachEvent","detachEvent","historyWrap","orig","Event","rv","dispatchEvent","replaceState","isArray","obj","forEach","slice","iterator","context","nativeForEach","l","breaker","el","parentNode","tagName","list","children","nodeType","getDomIndex","getAttribute","toLowerCase","arr","join","name","unshift","selector","nameEQ","ca","document","cookie","split","c","charAt","substring","_decodeURIComponent","value","days","cdomain","expires","domain","getMainHost","date","Date","setTime","getTime","Number","toUTCString","getValid","valid_name","valid_value","valid_domain","encodeURIComponent","r","Math","random","distinctId","uuid","queryArr","decodeURI","match","RegExp","paramsObj","pair","para","getJSON","parse","g","xhr","errorTimer","oldsuccess","olderror","clearTimeout","setTimeout","isObject","abort","onreadystatechange","onload","onerror","readyState","status","responseText","open","withCredentials","header","setRequestHeader","send","XMLHttpRequest","URLSearchParams","message","WebTrackingTools","_i","rest","formatJsonString","console","log","ua","logMsg","language","wxVersionMatch","wxVersion","ipod","ipad","iphone","android","mac","push","getPlatformType","network","performance","msPerformance","webkitPerformance","timing","navigationStart","domainLookupStart","domainLookupEnd","connectEnd","connectStart","secureConnectionStart","responseStart","requestStart","responseEnd","domComplete","domLoading","domContentLoadedEventStart","loadEventEnd","loadEventStart","f","result","decodeURIComponent","keyR","expiredTime","domainList","urlItems","pop","mainHost"],"mappings":"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"}
|
package/lib/index.esm.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.esm.js","sources":["../node_modules/tslib/tslib.es6.js","../src/lib/index.ts","../src/lib/tools.ts"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from) {\r\n for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\r\n to[j] = from[i];\r\n return to;\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","/**\n * web 数据埋点 SDK\n * @class WebTracking\n * @version 1.1.0\n * key由这几部分组成:appkey.pagekey.partkey 通过“.”来分割\n * appkey:应用唯一标识\n * pagekey:页面唯一标识,取当前路由 window.location.pathname.replace(/\\//g, '_').substr(1)\n * partkey:控件/自定义事件唯一标识,可通过接口获取或自定义\n */\nimport Tools from \"./tools\";\nimport {\n EventParams,\n InitParams,\n SystemsInfoTypes,\n TrackParams,\n PresetParams,\n TrackingPostParams,\n HistoryType,\n TargetEleProps,\n JsonProps,\n EventTypes,\n PrivateParamProps,\n} from \"./type\";\n\nclass WebTracking extends Tools {\n initConfig: InitParams;\n sdkVersion: string;\n systemsInfo: SystemsInfoTypes;\n\n constructor() {\n super();\n this.sdkVersion = \"1.1.0\"; // sdk版本\n this.initConfig = {\n appKey: \"\", // 应用唯一标识(由接口生成)\n platform: undefined, // 手动指定客户端平台类型(h5、pc、ipad、other)\n showLog: false, // (是否在网页控制台打印发送的数据)默认:不打印\n serverUrl: \"\", // 数据接收地址\n autoTrack: false, //(是否开启全埋点)指的是:页面浏览、元素点击事件自动上报 默认: 关闭\n sendTimeout: 3000, //(接口发送超时时长,超过该时长未发送成功将强制取消)3000ms(默认)\n isTrackSinglePage: false, //(是否采集单页面应用的路由变化)默认: 不采集\n contentType: \"application/x-www-form-urlencoded\", // 数据类型,默认form data\n business: {}, // 全局业务参数\n };\n // 系统信息\n this.systemsInfo = {};\n }\n\n // 用户信息\n protected userInfo?: JsonProps = null;\n // 当前路由\n protected currentUrl: string = \"\";\n // 页面唯一标识,取当前路由 window.location.pathname.replace(/\\//g, '_').substr(1)\n protected pageKey: string = \"\";\n // 上传事件描述\n protected eventDescMap: { [key: string]: string } = {\n PageView: \"Web 浏览页面\",\n WebClick: \"Web 元素点击\",\n PageRetained: \"Web 页面浏览时长\",\n CustomTrack: \"Web 自定义代码上报\",\n };\n\n /**\n * @description 初始化函数\n * @param {object} InitParams [初始化参数]\n */\n public init = (initParams: InitParams) => {\n this.preset(initParams);\n\n const pathname = window.location.pathname;\n this.currentUrl = window.location.href;\n this.pageKey = pathname.replace(/\\//g, \"_\").substr(1);\n\n this.systemsInfo = this.getSystemsInfo(initParams.platform);\n\n this.setCookie(\"retainedStartTime\", this.getTimeStamp());\n };\n\n /**\n * TODO: 需要判断有哪些不能被预制的参数\n * @description 预置参数\n * @param {object} PresetParams [预置参数]\n */\n public preset = (presetParams: PresetParams) => {\n if (presetParams instanceof Object) {\n this.each(presetParams, (val, key) => {\n if (this.initConfig.hasOwnProperty(key)) {\n // TODO:后面加一些校验\n this.initConfig[key] = val;\n }\n });\n }\n \n if (\n !/^(((ht|f)tps?):\\/\\/)?[\\w-]+(\\.[\\w-]+)+([\\w.,@?^=%&:/~+#-\\(\\)]*[\\w@?^=%&/~+#-\\(\\)])?$/.test(\n this.initConfig[\"serverUrl\"]\n )\n ) {\n this.printLog(\n \"当前 server_url 为空或不正确,只在控制台打印日志,network 中不会发数据,请配置正确的 server_url!\"\n );\n this.initConfig[\"showLog\"] = true;\n }\n\n // 如果启用了全埋点\n if (!!this.initConfig[\"autoTrack\"]) {\n // 启用监听\n this.listener();\n } else {\n // 取消监听\n this.unlistener();\n }\n };\n\n /**\n * 用户登录\n */\n public login = (userInfo: JsonProps) => {\n if (this.isObject(userInfo)) this.userInfo = userInfo;\n };\n\n /**\n * 自定义代码埋点上报\n * @param {object} TrackParams [自定义上报参数]\n * @return {Promise} [回调]\n */\n public track = ({ desc, partkey, business }: TrackParams): Promise<{}> => {\n const params = this.getParams({\n desc,\n event: \"CustomTrack\",\n itemKey: this.getItemKey(partkey),\n privateParamMap: {\n business,\n },\n });\n return this.sendData(params);\n };\n\n /**\n * @description 监听全埋点事件\n */\n protected listener = () => {\n if (!!this.initConfig.isTrackSinglePage) {\n this.rewriteHistory();\n this.addSinglePageEvent(this.onPageViewCallback);\n }\n\n this.each([\"load\", \"beforeunload\"], (historyType: HistoryType) => {\n this.addEventListener(window, historyType, this.onPageViewCallback);\n });\n\n this.addEventListener(window, \"click\", this.onClickCallback);\n };\n\n /**\n * @description 取消全埋点事件\n */\n protected unlistener = () => {\n if (!!this.initConfig.isTrackSinglePage) {\n const historyPushState = window.history.pushState;\n const singlePageEvent = !!historyPushState ? \"popstate\" : \"hashchange\";\n this.each([\"pushState\", \"replaceState\", singlePageEvent], (historyName: string) => {\n this.removeEventListener(window, historyName, this.onPageViewCallback);\n });\n }\n\n this.each([\"load\", \"beforeunload\"], (historyType: HistoryType) => {\n this.removeEventListener(window, historyType, this.onPageViewCallback);\n });\n\n this.removeEventListener(window, \"click\", this.onClickCallback);\n };\n\n protected onClickCallback = (e: any): Promise<{}> => {\n if (!e?.target?.dataset?.partKey) return;\n\n const position: [number, number] = [e.pageX, e.pageY];\n const id = e.target.id;\n const className = e.target.className;\n const nodeName = e.target.nodeName;\n const targetEle: TargetEleProps = {\n id,\n nodeName,\n className,\n position,\n };\n\n const params = this.getParams({\n event: \"WebClick\",\n desc: this.eventDescMap[\"WebClick\"],\n itemKey: this.getItemKey(e.target.dataset.partKey),\n privateParamMap: {\n targetEle,\n pointerType: e.pointerType,\n currentUrl: this.currentUrl,\n elementSelector: this.getDomSelector(e.target),\n },\n });\n\n return this.sendData(params);\n };\n\n /**\n * @description 添加单页面监听事件\n * @param callback\n */\n public addSinglePageEvent(callback: (e: EventParams) => void) {\n const historyPushState = window.history.pushState;\n\n const singlePageEvent = historyPushState ? \"popstate\" : \"hashchange\";\n\n this.each([\"pushState\", \"replaceState\", singlePageEvent], (historyType: HistoryType) => {\n this.addEventListener(window, historyType, callback);\n });\n }\n\n /**\n * @description 路由触发事件\n */\n protected onPageViewCallback = (e: EventParams) => {\n const ORGIN = window.location.origin;\n const params = this.getParams({\n event: \"PageView\",\n desc: this.eventDescMap[\"PageView\"],\n privateParamMap: {\n currentUrl: this.currentUrl,\n targetUrl: e.arguments?.[2] ? ORGIN + e.arguments?.[2] : null,\n },\n });\n\n this.currentUrl = window.location.href;\n this.pageKey = window.location.pathname.replace(/\\//g, \"_\").substring(1);\n\n this.sendRetained(e.type);\n this.sendData(params);\n };\n\n getParams = ({\n event,\n desc,\n privateParamMap = {},\n itemKey,\n }: {\n event: EventTypes;\n desc: string;\n privateParamMap?: PrivateParamProps;\n itemKey?: string;\n }): TrackingPostParams => {\n const { business } = this.initConfig;\n\n const pageWidth = window.innerWidth;\n const pageHeight = window.innerHeight;\n const screenWidth = window.screen.width;\n const screenHeight = window.screen.height;\n\n const params = {\n desc,\n event,\n itemKey: itemKey || this.getItemKey(),\n requestTime: this.getTimeStamp(),\n deviceId: this.getDistinctId(),\n privateParamMap: {\n ...privateParamMap,\n pageWidth,\n pageHeight,\n screenWidth,\n screenHeight,\n sdkVersion: this.sdkVersion,\n systemsInfo: this.systemsInfo,\n urlParams: this.getQueryValue(),\n userInfo: this.userInfo,\n currentUrl: privateParamMap.currentUrl || this.currentUrl,\n business: { ...(business || {}), ...(privateParamMap.business || {}) },\n },\n };\n\n return params;\n };\n\n /**\n * 发送数据通用函数\n */\n sendData = (params: TrackingPostParams): Promise<{}> => {\n const { serverUrl, sendTimeout, contentType, showLog } = this.initConfig;\n\n if (!!showLog) this.printLog(params);\n\n if (this.isSupportBeaconSend() === true) {\n return this.sendBeacon({\n url: serverUrl,\n data: params,\n });\n } else {\n return new Promise((resolve, reject) => {\n this.ajax({\n url: serverUrl,\n type: \"POST\",\n data: JSON.stringify(params),\n contentType: contentType,\n credentials: false,\n timeout: sendTimeout,\n cors: true,\n success: (res) => resolve(res),\n error: (err) => reject(err),\n });\n });\n }\n };\n\n /**\n * @description 留存时长上报\n * @param type\n */\n sendRetained = (type: string) => {\n const params = this.getParams({ event: \"PageRetained\", desc: this.eventDescMap[\"PageRetained\"] });\n\n if ([\"beforeunload\", \"pushState\", \"replaceState\", \"hashchange\", \"popstate\"].indexOf(type) >= 0) {\n const __time = this.getCookie(\"retainedStartTime\");\n const retainedStartTime = __time ? +__time : this.getTimeStamp();\n const retainedData: TrackingPostParams = {\n ...params,\n privateParamMap: {\n ...params.privateParamMap,\n retainedDuration: Math.max(params.requestTime - retainedStartTime, 0),\n },\n };\n\n this.sendData(retainedData);\n this.setCookie(\"retainedStartTime\", this.getTimeStamp());\n }\n };\n\n /**\n * @description 获取 itemKey\n * @param {[string]} partkey [控件/自定义事件的唯一标识]\n * @return {[string]}\n */\n protected getItemKey = (partkey?: string | number): string => {\n const appKey = this.initConfig.appKey;\n const keys: string[] = [appKey, this.pageKey, partkey ? partkey.toString() : undefined].filter(\n (key: string | undefined) => !!key\n );\n return keys.reduce((str, key) => str + `${str.length ? \".\" : \"\"}` + key, \"\");\n };\n}\n\nexport default new WebTracking();\n","/**\n * 埋点工具函数\n */\nimport { Target, SystemsInfoTypes, JsonProps, PlatformType } from \"./type\";\n\nexport default class WebTrackingTools {\n constructor() {}\n\n /**\n * 打印log\n */\n public printLog(...rest: any) {\n if (this.isObject(rest[0])) {\n rest[0] = this.formatJsonString(rest[0]);\n }\n\n if (typeof console === \"object\" && console.log) {\n try {\n return console.log.apply(console, rest);\n } catch (e) {\n console.log(rest[0]);\n }\n }\n }\n\n /**\n * 系统信息\n */\n public getSystemsInfo = (platform: PlatformType | string): SystemsInfoTypes => {\n // print system info\n const ua = navigator.userAgent;\n const language = navigator.language;\n\n let _platform: PlatformType = \"other\";\n let logMsg: string[] = [];\n let systemsInfo: SystemsInfoTypes = {\n language,\n };\n\n // wechat client version\n const wxVersionMatch = ua.match(/MicroMessenger\\/([\\d\\.]+)/i);\n const wxVersion = wxVersionMatch && wxVersionMatch[1] ? wxVersionMatch[1] : null;\n\n // device & system\n const ipod = ua.match(/(ipod).*\\s([\\d_]+)/i),\n ipad = ua.match(/(ipad).*\\s([\\d_]+)/i),\n iphone = ua.match(/(iphone)\\sos\\s([\\d_]+)/i),\n android = ua.match(/(android)\\s([\\d\\.]+)/i),\n windows = ua.match(/(Windows NT)\\s([\\d\\.]+)/i),\n mac = ua.match(/(Mac OS X)\\s([\\d_]+)/i);\n\n logMsg = [];\n if (android) {\n logMsg.push(\"Android \" + android[2]);\n _platform = \"h5\";\n } else if (iphone) {\n logMsg.push(\"iPhone, iOS \" + iphone[2].replace(/_/g, \".\"));\n _platform = \"h5\";\n } else if (ipad) {\n logMsg.push(\"iPad, iOS \" + ipad[2].replace(/_/g, \".\"));\n _platform = \"ipad\";\n } else if (ipod) {\n logMsg.push(\"iPod, iOS \" + ipod[2].replace(/_/g, \".\"));\n _platform = \"h5\";\n } else if (windows) {\n logMsg.push(\"Windows \" + windows[2].replace(/_/g, \".\"));\n _platform = \"pc\";\n } else if (mac) {\n logMsg.push(\"Mac, MacOS \" + mac[2].replace(/_/g, \".\"));\n _platform = \"pc\";\n }\n\n if (wxVersion) {\n logMsg.push(\"WeChat \" + wxVersion);\n }\n\n systemsInfo[\"client\"] = logMsg.length ? logMsg.join(\", \") : \"Unknown\";\n systemsInfo[\"platform\"] = platform || _platform;\n\n // network type\n let network = ua.toLowerCase().match(/ nettype\\/([^ ]+)/g);\n\n if (network && network[0]) {\n // @ts-ignore\n network = network[0].split(\"/\");\n logMsg = [network[1]];\n systemsInfo[\"network\"] = logMsg.length ? logMsg.join(\", \") : \"Unknown\";\n }\n\n // User Agent\n systemsInfo[\"ua\"] = ua;\n\n return systemsInfo;\n };\n\n /**\n * 监听事件\n * @param {Window | Element} target\n * @param {String} type\n * @param {Function} handler\n */\n protected addEventListener = (target: Target, type: string, handler: (e: Event) => void) => {\n if (target.addEventListener) {\n target.addEventListener(type, handler, false);\n } else {\n target.attachEvent &&\n target.attachEvent(\n \"on\" + type,\n function (event) {\n return handler.call(target, event);\n },\n false\n );\n }\n };\n\n /**\n * 移除监听事件\n * @param {Element} target\n * @param {String} type\n * @param {Funtion} handler\n */\n protected removeEventListener = (target: Target, type: string, handler: (e: Event) => void) => {\n if (target.removeEventListener) {\n target.removeEventListener(type, handler);\n } else {\n target.detachEvent &&\n target.detachEvent(\n \"on\" + type,\n function (event) {\n return handler.call(target, event);\n },\n true\n );\n }\n };\n\n /**\n * 重写history[pushState][replaceState]方法\n */\n public rewriteHistory = () => {\n const history = window.history;\n\n const historyWrap = function (type: \"pushState\" | \"replaceState\") {\n const history = window.history;\n const orig: any = history[type];\n const e: any = new Event(type);\n return function () {\n const rv = orig.apply(history, arguments);\n e.arguments = arguments;\n window.dispatchEvent(e);\n return rv;\n };\n };\n\n // 重写\n if (!!window.history.pushState) {\n history.pushState = historyWrap(\"pushState\");\n history.replaceState = historyWrap(\"replaceState\");\n }\n };\n\n /**\n * @description 检验是否是对象\n */\n public isObject(obj) {\n if (obj == null) {\n return false;\n } else {\n return toString.call(obj) == \"[object Object]\";\n }\n }\n\n public isUndefined(obj) {\n return obj === void 0;\n }\n\n public isArray =\n Array.isArray ||\n function (obj) {\n return toString.call(obj) === \"[object Array]\";\n };\n\n public isString(obj) {\n return toString.call(obj) == \"[object String]\";\n }\n\n public isDate(obj) {\n return toString.call(obj) == \"[object Date]\";\n }\n\n public isBoolean(obj) {\n return toString.call(obj) == \"[object Boolean]\";\n }\n\n public isNumber(obj) {\n return toString.call(obj) == \"[object Number]\" && /[\\d\\.]+/.test(String(obj));\n }\n\n public isElement(obj) {\n return !!(obj && obj.nodeType === 1);\n }\n\n public isFunction(f) {\n if (!f) {\n return false;\n }\n const type = toString.call(f);\n return type == \"[object Function]\" || type == \"[object AsyncFunction]\";\n }\n\n public isJSONString(str) {\n try {\n JSON.parse(str);\n } catch (e) {\n return false;\n }\n return true;\n }\n\n /**\n * 将json序列化成json字符串\n * @param obj\n * @returns {[JsonString]} [json字符串]\n */\n protected formatJsonString = (obj): string => {\n try {\n return JSON.stringify(obj, null, \" \");\n } catch (e) {\n return JSON.stringify(obj);\n }\n };\n\n public nativeForEach = Array.prototype.forEach;\n public slice = Array.prototype.slice;\n public hasOwnProperty = Object.prototype.hasOwnProperty;\n public breaker = {};\n\n /**\n * @description 循环遍历\n */\n public each = (obj, iterator, context?: null) => {\n if (obj == null) {\n return false;\n }\n\n if (this.nativeForEach && obj.forEach === this.nativeForEach) {\n obj.forEach(iterator, context);\n } else if (this.isArray(obj) && obj.length === +obj.length) {\n for (let i = 0, l = obj.length; i < l; i++) {\n if (i in obj && iterator.call(context, obj[i], i, obj) === this.breaker) {\n return false;\n }\n }\n } else {\n for (let key in obj) {\n if (this.hasOwnProperty.call(obj, key)) {\n if (iterator.call(context, obj[key], key, obj) === this.breaker) {\n return false;\n }\n }\n }\n }\n };\n\n public _decodeURIComponent(val) {\n let result = val;\n try {\n result = decodeURIComponent(val);\n } catch (e) {\n result = val;\n }\n return result;\n }\n\n public getMainHost() {\n let key = `mh_${Math.random()}`;\n let keyR = new RegExp(`(^|;)\\\\s*${key}=12345`);\n let expiredTime = new Date(0);\n let domain = document.domain;\n let domainList = domain.split(\".\");\n\n let urlItems = [];\n // 主域名一定会有两部分组成\n urlItems.unshift(domainList.pop());\n // 慢慢从后往前测试\n while (domainList.length) {\n urlItems.unshift(domainList.pop());\n let mainHost = urlItems.join(\".\");\n let cookie = `${key}=${12345};domain=.${mainHost}`;\n\n document.cookie = cookie;\n\n //如果cookie存在,则说明域名合法\n if (keyR.test(document.cookie)) {\n document.cookie = `${cookie};expires=${expiredTime}`;\n return mainHost;\n }\n }\n }\n\n protected getDomIndex = (el: Element): number => {\n if (!el.parentNode) return -1;\n let i = 0;\n const nodeName = el.tagName;\n const list = el.parentNode.children;\n for (let n = 0; n < list.length; n++) {\n if (list[n].tagName === nodeName) {\n if (el === list[n]) {\n return i;\n } else {\n i++;\n }\n }\n }\n return -1;\n };\n\n protected selector = (el: Element): string => {\n const i = el.parentNode && 9 == el.parentNode.nodeType ? -1 : this.getDomIndex(el);\n if (el.getAttribute && el.getAttribute(\"id\") && /^[A-Za-z][-A-Za-z0-9_:.]*$/.test(el.getAttribute(\"id\"))) {\n return \"#\" + el.getAttribute(\"id\");\n } else {\n return el.tagName.toLowerCase() + (~i ? \":nth-of-type(\" + (i + 1) + \")\" : \"\");\n }\n };\n\n public getDomSelector = (el: any, arr?: string[]) => {\n if (!el || !el.parentNode || !el.parentNode.children) {\n return false;\n }\n arr = arr && arr.join ? arr : [];\n const name = el.nodeName.toLowerCase();\n if (!el || name === \"body\" || 1 != el.nodeType) {\n arr.unshift(\"body\");\n return arr.join(\" > \");\n }\n arr.unshift(this.selector(el));\n if (el.getAttribute && el.getAttribute(\"id\") && /^[A-Za-z][-A-Za-z0-9_:.]*$/.test(el.getAttribute(\"id\")))\n return arr.join(\" > \");\n return this.getDomSelector(el.parentNode, arr);\n };\n\n /**\n * @description 增强cookie操作\n */\n public getCookie = function (name) {\n const nameEQ = name + \"=\";\n const ca = document.cookie.split(\";\");\n for (let i = 0; i < ca.length; i++) {\n let c = ca[i];\n while (c.charAt(0) == \" \") {\n c = c.substring(1, c.length);\n }\n if (c.indexOf(nameEQ) == 0) {\n return this._decodeURIComponent(c.substring(nameEQ.length, c.length));\n }\n }\n return null;\n };\n public setCookie = function (name: string, value: string | number, days?: number) {\n let cdomain = \"\",\n expires = \"\",\n secure = \"\",\n samesite = \"\";\n days = days == null ? 73000 : days;\n\n const domain = this.getMainHost();\n cdomain = domain ? \"; domain=\" + domain : \"\";\n\n if (days !== 0) {\n const date = new Date();\n if (String(days).slice(-1) === \"s\") {\n date.setTime(date.getTime() + Number(String(days).slice(0, -1)) * 1000);\n } else {\n date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);\n }\n\n expires = \"; expires=\" + date.toUTCString();\n }\n\n function getValid(data) {\n if (data) {\n return data;\n } else {\n return false;\n }\n }\n let valid_name = \"\";\n let valid_value = \"\";\n let valid_domain = \"\";\n if (name) {\n valid_name = getValid(name);\n }\n if (value) {\n valid_value = getValid(value);\n }\n if (cdomain) {\n valid_domain = getValid(cdomain);\n }\n if (valid_name && valid_value) {\n document.cookie =\n valid_name + \"=\" + encodeURIComponent(valid_value) + expires + \"; path=/\" + valid_domain + samesite + secure;\n }\n };\n public removeCookie = (name) => {\n this.setCookie(name, \"\", -1);\n };\n\n /**\n * 获取当前时间戳\n * @return {number} [当前时间戳]\n */\n public getTimeStamp = (): number => {\n return new Date().getTime();\n };\n\n /**\n * 获取 UUID\n * @return {string} [UUID唯一值]\n */\n public uuid = () => {\n return \"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\".replace(/[xy]/g, function (c) {\n const r = (Math.random() * 16) | 0,\n v = c == \"x\" ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n };\n\n /**\n * 获取设备Id\n * @return {number} [设备Id]\n */\n public getDistinctId = () => {\n let distinctId = this.getCookie(\"distinctId\");\n if (distinctId) return distinctId;\n distinctId = this.uuid();\n this.setCookie(\"distinctId\", distinctId);\n return distinctId;\n };\n\n /**\n * 获取url中的参数\n * @param {[string]} name [参数名]\n */\n public getQueryValue = (): null | JsonProps => {\n const _href = decodeURI(window.location.href);\n const queryArr = _href.match(new RegExp(\"[?&][^?&]+=[^?&]+\", \"g\")) || [];\n const paramsObj: JsonProps = {};\n for (let i = 0; i < queryArr.length; i++) {\n const _item = queryArr[i].replace(/\\?|\\&/, \"\");\n const pair = _item.split(\"=\");\n\n paramsObj[pair[0]] = pair[1];\n }\n return paramsObj;\n };\n\n /**\n *\n * @param {[object]} para [ajax参数]\n * @returns\n */\n public ajax = (para: any) => {\n para.timeout = para.timeout || 30000;\n\n para.credentials = typeof para.credentials === \"undefined\" ? true : para.credentials;\n\n function getJSON(data) {\n if (!data) {\n return \"\";\n }\n try {\n return JSON.parse(data);\n } catch (e) {\n return {};\n }\n }\n\n const g = this.xhr(para.cors);\n if (!g) {\n return false;\n }\n\n if (!para.type) {\n para.type = para.data ? \"POST\" : \"GET\";\n }\n\n const oldsuccess = para.success;\n const olderror = para.error;\n let errorTimer;\n\n const abort = () => {\n try {\n if (this.isObject(g) && g.abort) {\n g.abort();\n }\n } catch (error) {\n this.printLog(error);\n }\n\n if (errorTimer) {\n clearTimeout(errorTimer);\n errorTimer = null;\n para.error && para.error();\n g.onreadystatechange = null;\n g.onload = null;\n g.onerror = null;\n }\n };\n\n para.success = function (data) {\n oldsuccess(data);\n if (errorTimer) {\n clearTimeout(errorTimer);\n errorTimer = null;\n }\n };\n para.error = function (err) {\n olderror(err);\n if (errorTimer) {\n clearTimeout(errorTimer);\n errorTimer = null;\n }\n };\n errorTimer = setTimeout(function () {\n abort();\n }, para.timeout);\n\n g.onreadystatechange = function () {\n try {\n if (g.readyState == 4) {\n if ((g.status >= 200 && g.status < 300) || g.status == 304) {\n para.success(getJSON(g.responseText));\n } else {\n para.error(getJSON(g.responseText), g.status);\n }\n g.onreadystatechange = null;\n g.onload = null;\n }\n } catch (e) {\n g.onreadystatechange = null;\n g.onload = null;\n }\n };\n\n g.open(para.type, para.url, true);\n\n try {\n if (para.credentials) {\n g.withCredentials = true;\n }\n if (this.isObject(para.header)) {\n this.each(para.header, function (v, i) {\n g.setRequestHeader && g.setRequestHeader(i, v);\n });\n }\n\n if (para.data) {\n if (!para.cors) {\n g.setRequestHeader && g.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\");\n }\n if (para.contentType === \"application/json\") {\n g.setRequestHeader && g.setRequestHeader(\"Content-type\", \"application/json; charset=UTF-8\");\n } else {\n g.setRequestHeader && g.setRequestHeader(\"Content-type\", \"application/x-www-form-urlencoded\");\n }\n }\n } catch (e) {\n this.printLog(e);\n }\n\n g.send(para.data || null);\n };\n public xhr = (cors) => {\n if (cors) {\n if (typeof window.XMLHttpRequest !== \"undefined\" && \"withCredentials\" in new XMLHttpRequest()) {\n return new XMLHttpRequest();\n } else {\n return null;\n }\n } else if (typeof window.XMLHttpRequest !== \"undefined\") {\n return new XMLHttpRequest();\n } else {\n return null;\n }\n };\n\n public getUA = () => {\n const Sys: JsonProps = {};\n const ua = navigator.userAgent.toLowerCase();\n let s;\n if ((s = ua.match(/opera.([\\d.]+)/))) {\n Sys.opera = Number(s[1].split(\".\")[0]);\n } else if ((s = ua.match(/msie ([\\d.]+)/))) {\n Sys.ie = Number(s[1].split(\".\")[0]);\n } else if ((s = ua.match(/edge.([\\d.]+)/))) {\n Sys.edge = Number(s[1].split(\".\")[0]);\n } else if ((s = ua.match(/firefox\\/([\\d.]+)/))) {\n Sys.firefox = Number(s[1].split(\".\")[0]);\n } else if ((s = ua.match(/chrome\\/([\\d.]+)/))) {\n Sys.chrome = Number(s[1].split(\".\")[0]);\n } else if ((s = ua.match(/version\\/([\\d.]+).*safari/))) {\n Sys.safari = Number(s[1].match(/^\\d*.\\d*/));\n } else if ((s = ua.match(/trident\\/([\\d.]+)/))) {\n Sys.ie = 11;\n }\n return Sys;\n };\n\n public isSupportBeaconSend = (): Boolean => {\n let supported = false;\n if (typeof navigator !== \"object\" || typeof navigator.sendBeacon !== \"function\") {\n return supported;\n }\n\n let Sys = this.getUA();\n var ua = navigator.userAgent.toLowerCase();\n\n if (/Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(navigator.userAgent)) {\n var reg = /os [\\d._]*/gi;\n var verinfo = ua.match(reg);\n var version = (verinfo + \"\").replace(/[^0-9|_.]/gi, \"\").replace(/_/gi, \".\");\n var ver = version.split(\".\");\n\n if (typeof Sys.safari === \"undefined\") {\n Sys.safari = ver[0];\n }\n\n if (ver[0] && +ver[0] < 13) {\n if (Sys.chrome > 41 || Sys.firefox > 30 || Sys.opera > 25 || Sys.safari > 12) {\n supported = true;\n }\n } else if (Sys.chrome > 41 || Sys.firefox > 30 || Sys.opera > 25 || Sys.safari > 11.3) {\n supported = true;\n }\n } else {\n if (Sys.chrome > 38 || Sys.edge > 13 || Sys.firefox > 30 || Sys.opera > 25 || Sys.safari > 11.0) {\n supported = true;\n }\n }\n return supported;\n };\n\n /**\n * beacon请求\n * @param {[string]} url\n * @param {[object]} params\n */\n public sendBeacon = (para: any): Promise<{ message?: string; success: boolean }> => {\n if (this.isSupportBeaconSend() === true) {\n const supportType = navigator.sendBeacon(para.url, new URLSearchParams(JSON.stringify(para.data || {})));\n\n if (supportType) {\n return Promise.resolve({ success: true });\n } else {\n return Promise.reject({ success: false });\n }\n } else {\n return Promise.reject({ message: \"不支持sendBeacon,发送失败!\", success: false });\n }\n };\n}\n"],"names":["extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","prototype","hasOwnProperty","call","__assign","assign","t","s","i","n","arguments","length","apply","this","_super","_this","PageView","WebClick","PageRetained","CustomTrack","initParams","preset","pathname","window","location","currentUrl","href","pageKey","replace","substr","systemsInfo","getSystemsInfo","platform","setCookie","getTimeStamp","presetParams","each","val","key","initConfig","test","printLog","listener","unlistener","userInfo","isObject","_a","desc","partkey","business","params","getParams","event","itemKey","getItemKey","privateParamMap","sendData","isTrackSinglePage","rewriteHistory","addSinglePageEvent","onPageViewCallback","historyType","addEventListener","onClickCallback","singlePageEvent","history","pushState","historyName","removeEventListener","e","target","dataset","partKey","position","pageX","pageY","id","className","targetEle","nodeName","eventDescMap","pointerType","elementSelector","getDomSelector","ORGIN","origin","targetUrl","substring","sendRetained","type","_b","pageWidth","innerWidth","pageHeight","innerHeight","screenWidth","screen","width","screenHeight","height","requestTime","deviceId","getDistinctId","sdkVersion","urlParams","getQueryValue","serverUrl","sendTimeout","contentType","isSupportBeaconSend","sendBeacon","url","data","Promise","resolve","reject","ajax","JSON","stringify","credentials","timeout","cors","success","res","error","err","indexOf","__time","getCookie","retainedStartTime","retainedData","retainedDuration","Math","max","appKey","toString","undefined","filter","reduce","str","showLog","autoTrack","TypeError","String","__","constructor","create","__extends","WebTracking","callback","ua","navigator","userAgent","_platform","logMsg","language","wxVersionMatch","match","wxVersion","ipod","ipad","iphone","android","windows","mac","push","join","network","toLowerCase","split","handler","attachEvent","detachEvent","historyWrap","orig","Event","rv","dispatchEvent","replaceState","isArray","obj","forEach","slice","iterator","context","nativeForEach","l","breaker","el","parentNode","tagName","list","children","nodeType","getDomIndex","getAttribute","arr","name","unshift","selector","nameEQ","ca","document","cookie","c","charAt","_decodeURIComponent","value","days","cdomain","expires","domain","getMainHost","date","Date","setTime","getTime","Number","toUTCString","getValid","valid_name","valid_value","valid_domain","encodeURIComponent","r","random","distinctId","uuid","queryArr","decodeURI","RegExp","paramsObj","pair","para","getJSON","parse","g","xhr","errorTimer","oldsuccess","olderror","clearTimeout","setTimeout","abort","onreadystatechange","onload","onerror","readyState","status","responseText","open","withCredentials","header","v","setRequestHeader","send","XMLHttpRequest","Sys","opera","ie","edge","firefox","chrome","safari","supported","getUA","ver","URLSearchParams","message","WebTrackingTools","_i","rest","formatJsonString","console","log","f","result","decodeURIComponent","keyR","expiredTime","domainList","urlItems","pop","mainHost"],"mappings":"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"}
|
package/lib/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../node_modules/tslib/tslib.es6.js","../src/lib/index.ts","../src/lib/tools.ts"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from) {\r\n for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\r\n to[j] = from[i];\r\n return to;\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","/**\n * web 数据埋点 SDK\n * @class WebTracking\n * @version 1.1.0\n * key由这几部分组成:appkey.pagekey.partkey 通过“.”来分割\n * appkey:应用唯一标识\n * pagekey:页面唯一标识,取当前路由 window.location.pathname.replace(/\\//g, '_').substr(1)\n * partkey:控件/自定义事件唯一标识,可通过接口获取或自定义\n */\nimport Tools from \"./tools\";\nimport {\n EventParams,\n InitParams,\n SystemsInfoTypes,\n TrackParams,\n PresetParams,\n TrackingPostParams,\n HistoryType,\n TargetEleProps,\n JsonProps,\n EventTypes,\n PrivateParamProps,\n} from \"./type\";\n\nclass WebTracking extends Tools {\n initConfig: InitParams;\n sdkVersion: string;\n systemsInfo: SystemsInfoTypes;\n\n constructor() {\n super();\n this.sdkVersion = \"1.1.0\"; // sdk版本\n this.initConfig = {\n appKey: \"\", // 应用唯一标识(由接口生成)\n platform: undefined, // 手动指定客户端平台类型(h5、pc、ipad、other)\n showLog: false, // (是否在网页控制台打印发送的数据)默认:不打印\n serverUrl: \"\", // 数据接收地址\n autoTrack: false, //(是否开启全埋点)指的是:页面浏览、元素点击事件自动上报 默认: 关闭\n sendTimeout: 3000, //(接口发送超时时长,超过该时长未发送成功将强制取消)3000ms(默认)\n isTrackSinglePage: false, //(是否采集单页面应用的路由变化)默认: 不采集\n contentType: \"application/x-www-form-urlencoded\", // 数据类型,默认form data\n business: {}, // 全局业务参数\n };\n // 系统信息\n this.systemsInfo = {};\n }\n\n // 用户信息\n protected userInfo?: JsonProps = null;\n // 当前路由\n protected currentUrl: string = \"\";\n // 页面唯一标识,取当前路由 window.location.pathname.replace(/\\//g, '_').substr(1)\n protected pageKey: string = \"\";\n // 上传事件描述\n protected eventDescMap: { [key: string]: string } = {\n PageView: \"Web 浏览页面\",\n WebClick: \"Web 元素点击\",\n PageRetained: \"Web 页面浏览时长\",\n CustomTrack: \"Web 自定义代码上报\",\n };\n\n /**\n * @description 初始化函数\n * @param {object} InitParams [初始化参数]\n */\n public init = (initParams: InitParams) => {\n this.preset(initParams);\n\n const pathname = window.location.pathname;\n this.currentUrl = window.location.href;\n this.pageKey = pathname.replace(/\\//g, \"_\").substr(1);\n\n this.systemsInfo = this.getSystemsInfo(initParams.platform);\n\n this.setCookie(\"retainedStartTime\", this.getTimeStamp());\n };\n\n /**\n * TODO: 需要判断有哪些不能被预制的参数\n * @description 预置参数\n * @param {object} PresetParams [预置参数]\n */\n public preset = (presetParams: PresetParams) => {\n if (presetParams instanceof Object) {\n this.each(presetParams, (val, key) => {\n if (this.initConfig.hasOwnProperty(key)) {\n // TODO:后面加一些校验\n this.initConfig[key] = val;\n }\n });\n }\n \n if (\n !/^(((ht|f)tps?):\\/\\/)?[\\w-]+(\\.[\\w-]+)+([\\w.,@?^=%&:/~+#-\\(\\)]*[\\w@?^=%&/~+#-\\(\\)])?$/.test(\n this.initConfig[\"serverUrl\"]\n )\n ) {\n this.printLog(\n \"当前 server_url 为空或不正确,只在控制台打印日志,network 中不会发数据,请配置正确的 server_url!\"\n );\n this.initConfig[\"showLog\"] = true;\n }\n\n // 如果启用了全埋点\n if (!!this.initConfig[\"autoTrack\"]) {\n // 启用监听\n this.listener();\n } else {\n // 取消监听\n this.unlistener();\n }\n };\n\n /**\n * 用户登录\n */\n public login = (userInfo: JsonProps) => {\n if (this.isObject(userInfo)) this.userInfo = userInfo;\n };\n\n /**\n * 自定义代码埋点上报\n * @param {object} TrackParams [自定义上报参数]\n * @return {Promise} [回调]\n */\n public track = ({ desc, partkey, business }: TrackParams): Promise<{}> => {\n const params = this.getParams({\n desc,\n event: \"CustomTrack\",\n itemKey: this.getItemKey(partkey),\n privateParamMap: {\n business,\n },\n });\n return this.sendData(params);\n };\n\n /**\n * @description 监听全埋点事件\n */\n protected listener = () => {\n if (!!this.initConfig.isTrackSinglePage) {\n this.rewriteHistory();\n this.addSinglePageEvent(this.onPageViewCallback);\n }\n\n this.each([\"load\", \"beforeunload\"], (historyType: HistoryType) => {\n this.addEventListener(window, historyType, this.onPageViewCallback);\n });\n\n this.addEventListener(window, \"click\", this.onClickCallback);\n };\n\n /**\n * @description 取消全埋点事件\n */\n protected unlistener = () => {\n if (!!this.initConfig.isTrackSinglePage) {\n const historyPushState = window.history.pushState;\n const singlePageEvent = !!historyPushState ? \"popstate\" : \"hashchange\";\n this.each([\"pushState\", \"replaceState\", singlePageEvent], (historyName: string) => {\n this.removeEventListener(window, historyName, this.onPageViewCallback);\n });\n }\n\n this.each([\"load\", \"beforeunload\"], (historyType: HistoryType) => {\n this.removeEventListener(window, historyType, this.onPageViewCallback);\n });\n\n this.removeEventListener(window, \"click\", this.onClickCallback);\n };\n\n protected onClickCallback = (e: any): Promise<{}> => {\n if (!e?.target?.dataset?.partKey) return;\n\n const position: [number, number] = [e.pageX, e.pageY];\n const id = e.target.id;\n const className = e.target.className;\n const nodeName = e.target.nodeName;\n const targetEle: TargetEleProps = {\n id,\n nodeName,\n className,\n position,\n };\n\n const params = this.getParams({\n event: \"WebClick\",\n desc: this.eventDescMap[\"WebClick\"],\n itemKey: this.getItemKey(e.target.dataset.partKey),\n privateParamMap: {\n targetEle,\n pointerType: e.pointerType,\n currentUrl: this.currentUrl,\n elementSelector: this.getDomSelector(e.target),\n },\n });\n\n return this.sendData(params);\n };\n\n /**\n * @description 添加单页面监听事件\n * @param callback\n */\n public addSinglePageEvent(callback: (e: EventParams) => void) {\n const historyPushState = window.history.pushState;\n\n const singlePageEvent = historyPushState ? \"popstate\" : \"hashchange\";\n\n this.each([\"pushState\", \"replaceState\", singlePageEvent], (historyType: HistoryType) => {\n this.addEventListener(window, historyType, callback);\n });\n }\n\n /**\n * @description 路由触发事件\n */\n protected onPageViewCallback = (e: EventParams) => {\n const ORGIN = window.location.origin;\n const params = this.getParams({\n event: \"PageView\",\n desc: this.eventDescMap[\"PageView\"],\n privateParamMap: {\n currentUrl: this.currentUrl,\n targetUrl: e.arguments?.[2] ? ORGIN + e.arguments?.[2] : null,\n },\n });\n\n this.currentUrl = window.location.href;\n this.pageKey = window.location.pathname.replace(/\\//g, \"_\").substring(1);\n\n this.sendRetained(e.type);\n this.sendData(params);\n };\n\n getParams = ({\n event,\n desc,\n privateParamMap = {},\n itemKey,\n }: {\n event: EventTypes;\n desc: string;\n privateParamMap?: PrivateParamProps;\n itemKey?: string;\n }): TrackingPostParams => {\n const { business } = this.initConfig;\n\n const pageWidth = window.innerWidth;\n const pageHeight = window.innerHeight;\n const screenWidth = window.screen.width;\n const screenHeight = window.screen.height;\n\n const params = {\n desc,\n event,\n itemKey: itemKey || this.getItemKey(),\n requestTime: this.getTimeStamp(),\n deviceId: this.getDistinctId(),\n privateParamMap: {\n ...privateParamMap,\n pageWidth,\n pageHeight,\n screenWidth,\n screenHeight,\n sdkVersion: this.sdkVersion,\n systemsInfo: this.systemsInfo,\n urlParams: this.getQueryValue(),\n userInfo: this.userInfo,\n currentUrl: privateParamMap.currentUrl || this.currentUrl,\n business: { ...(business || {}), ...(privateParamMap.business || {}) },\n },\n };\n\n return params;\n };\n\n /**\n * 发送数据通用函数\n */\n sendData = (params: TrackingPostParams): Promise<{}> => {\n const { serverUrl, sendTimeout, contentType, showLog } = this.initConfig;\n\n if (!!showLog) this.printLog(params);\n\n if (this.isSupportBeaconSend() === true) {\n return this.sendBeacon({\n url: serverUrl,\n data: params,\n });\n } else {\n return new Promise((resolve, reject) => {\n this.ajax({\n url: serverUrl,\n type: \"POST\",\n data: JSON.stringify(params),\n contentType: contentType,\n credentials: false,\n timeout: sendTimeout,\n cors: true,\n success: (res) => resolve(res),\n error: (err) => reject(err),\n });\n });\n }\n };\n\n /**\n * @description 留存时长上报\n * @param type\n */\n sendRetained = (type: string) => {\n const params = this.getParams({ event: \"PageRetained\", desc: this.eventDescMap[\"PageRetained\"] });\n\n if ([\"beforeunload\", \"pushState\", \"replaceState\", \"hashchange\", \"popstate\"].indexOf(type) >= 0) {\n const __time = this.getCookie(\"retainedStartTime\");\n const retainedStartTime = __time ? +__time : this.getTimeStamp();\n const retainedData: TrackingPostParams = {\n ...params,\n privateParamMap: {\n ...params.privateParamMap,\n retainedDuration: Math.max(params.requestTime - retainedStartTime, 0),\n },\n };\n\n this.sendData(retainedData);\n this.setCookie(\"retainedStartTime\", this.getTimeStamp());\n }\n };\n\n /**\n * @description 获取 itemKey\n * @param {[string]} partkey [控件/自定义事件的唯一标识]\n * @return {[string]}\n */\n protected getItemKey = (partkey?: string | number): string => {\n const appKey = this.initConfig.appKey;\n const keys: string[] = [appKey, this.pageKey, partkey ? partkey.toString() : undefined].filter(\n (key: string | undefined) => !!key\n );\n return keys.reduce((str, key) => str + `${str.length ? \".\" : \"\"}` + key, \"\");\n };\n}\n\nexport default new WebTracking();\n","/**\n * 埋点工具函数\n */\nimport { Target, SystemsInfoTypes, JsonProps, PlatformType } from \"./type\";\n\nexport default class WebTrackingTools {\n constructor() {}\n\n /**\n * 打印log\n */\n public printLog(...rest: any) {\n if (this.isObject(rest[0])) {\n rest[0] = this.formatJsonString(rest[0]);\n }\n\n if (typeof console === \"object\" && console.log) {\n try {\n return console.log.apply(console, rest);\n } catch (e) {\n console.log(rest[0]);\n }\n }\n }\n\n /**\n * 系统信息\n */\n public getSystemsInfo = (platform: PlatformType | string): SystemsInfoTypes => {\n // print system info\n const ua = navigator.userAgent;\n const language = navigator.language;\n\n let _platform: PlatformType = \"other\";\n let logMsg: string[] = [];\n let systemsInfo: SystemsInfoTypes = {\n language,\n };\n\n // wechat client version\n const wxVersionMatch = ua.match(/MicroMessenger\\/([\\d\\.]+)/i);\n const wxVersion = wxVersionMatch && wxVersionMatch[1] ? wxVersionMatch[1] : null;\n\n // device & system\n const ipod = ua.match(/(ipod).*\\s([\\d_]+)/i),\n ipad = ua.match(/(ipad).*\\s([\\d_]+)/i),\n iphone = ua.match(/(iphone)\\sos\\s([\\d_]+)/i),\n android = ua.match(/(android)\\s([\\d\\.]+)/i),\n windows = ua.match(/(Windows NT)\\s([\\d\\.]+)/i),\n mac = ua.match(/(Mac OS X)\\s([\\d_]+)/i);\n\n logMsg = [];\n if (android) {\n logMsg.push(\"Android \" + android[2]);\n _platform = \"h5\";\n } else if (iphone) {\n logMsg.push(\"iPhone, iOS \" + iphone[2].replace(/_/g, \".\"));\n _platform = \"h5\";\n } else if (ipad) {\n logMsg.push(\"iPad, iOS \" + ipad[2].replace(/_/g, \".\"));\n _platform = \"ipad\";\n } else if (ipod) {\n logMsg.push(\"iPod, iOS \" + ipod[2].replace(/_/g, \".\"));\n _platform = \"h5\";\n } else if (windows) {\n logMsg.push(\"Windows \" + windows[2].replace(/_/g, \".\"));\n _platform = \"pc\";\n } else if (mac) {\n logMsg.push(\"Mac, MacOS \" + mac[2].replace(/_/g, \".\"));\n _platform = \"pc\";\n }\n\n if (wxVersion) {\n logMsg.push(\"WeChat \" + wxVersion);\n }\n\n systemsInfo[\"client\"] = logMsg.length ? logMsg.join(\", \") : \"Unknown\";\n systemsInfo[\"platform\"] = platform || _platform;\n\n // network type\n let network = ua.toLowerCase().match(/ nettype\\/([^ ]+)/g);\n\n if (network && network[0]) {\n // @ts-ignore\n network = network[0].split(\"/\");\n logMsg = [network[1]];\n systemsInfo[\"network\"] = logMsg.length ? logMsg.join(\", \") : \"Unknown\";\n }\n\n // User Agent\n systemsInfo[\"ua\"] = ua;\n\n return systemsInfo;\n };\n\n /**\n * 监听事件\n * @param {Window | Element} target\n * @param {String} type\n * @param {Function} handler\n */\n protected addEventListener = (target: Target, type: string, handler: (e: Event) => void) => {\n if (target.addEventListener) {\n target.addEventListener(type, handler, false);\n } else {\n target.attachEvent &&\n target.attachEvent(\n \"on\" + type,\n function (event) {\n return handler.call(target, event);\n },\n false\n );\n }\n };\n\n /**\n * 移除监听事件\n * @param {Element} target\n * @param {String} type\n * @param {Funtion} handler\n */\n protected removeEventListener = (target: Target, type: string, handler: (e: Event) => void) => {\n if (target.removeEventListener) {\n target.removeEventListener(type, handler);\n } else {\n target.detachEvent &&\n target.detachEvent(\n \"on\" + type,\n function (event) {\n return handler.call(target, event);\n },\n true\n );\n }\n };\n\n /**\n * 重写history[pushState][replaceState]方法\n */\n public rewriteHistory = () => {\n const history = window.history;\n\n const historyWrap = function (type: \"pushState\" | \"replaceState\") {\n const history = window.history;\n const orig: any = history[type];\n const e: any = new Event(type);\n return function () {\n const rv = orig.apply(history, arguments);\n e.arguments = arguments;\n window.dispatchEvent(e);\n return rv;\n };\n };\n\n // 重写\n if (!!window.history.pushState) {\n history.pushState = historyWrap(\"pushState\");\n history.replaceState = historyWrap(\"replaceState\");\n }\n };\n\n /**\n * @description 检验是否是对象\n */\n public isObject(obj) {\n if (obj == null) {\n return false;\n } else {\n return toString.call(obj) == \"[object Object]\";\n }\n }\n\n public isUndefined(obj) {\n return obj === void 0;\n }\n\n public isArray =\n Array.isArray ||\n function (obj) {\n return toString.call(obj) === \"[object Array]\";\n };\n\n public isString(obj) {\n return toString.call(obj) == \"[object String]\";\n }\n\n public isDate(obj) {\n return toString.call(obj) == \"[object Date]\";\n }\n\n public isBoolean(obj) {\n return toString.call(obj) == \"[object Boolean]\";\n }\n\n public isNumber(obj) {\n return toString.call(obj) == \"[object Number]\" && /[\\d\\.]+/.test(String(obj));\n }\n\n public isElement(obj) {\n return !!(obj && obj.nodeType === 1);\n }\n\n public isFunction(f) {\n if (!f) {\n return false;\n }\n const type = toString.call(f);\n return type == \"[object Function]\" || type == \"[object AsyncFunction]\";\n }\n\n public isJSONString(str) {\n try {\n JSON.parse(str);\n } catch (e) {\n return false;\n }\n return true;\n }\n\n /**\n * 将json序列化成json字符串\n * @param obj\n * @returns {[JsonString]} [json字符串]\n */\n protected formatJsonString = (obj): string => {\n try {\n return JSON.stringify(obj, null, \" \");\n } catch (e) {\n return JSON.stringify(obj);\n }\n };\n\n public nativeForEach = Array.prototype.forEach;\n public slice = Array.prototype.slice;\n public hasOwnProperty = Object.prototype.hasOwnProperty;\n public breaker = {};\n\n /**\n * @description 循环遍历\n */\n public each = (obj, iterator, context?: null) => {\n if (obj == null) {\n return false;\n }\n\n if (this.nativeForEach && obj.forEach === this.nativeForEach) {\n obj.forEach(iterator, context);\n } else if (this.isArray(obj) && obj.length === +obj.length) {\n for (let i = 0, l = obj.length; i < l; i++) {\n if (i in obj && iterator.call(context, obj[i], i, obj) === this.breaker) {\n return false;\n }\n }\n } else {\n for (let key in obj) {\n if (this.hasOwnProperty.call(obj, key)) {\n if (iterator.call(context, obj[key], key, obj) === this.breaker) {\n return false;\n }\n }\n }\n }\n };\n\n public _decodeURIComponent(val) {\n let result = val;\n try {\n result = decodeURIComponent(val);\n } catch (e) {\n result = val;\n }\n return result;\n }\n\n public getMainHost() {\n let key = `mh_${Math.random()}`;\n let keyR = new RegExp(`(^|;)\\\\s*${key}=12345`);\n let expiredTime = new Date(0);\n let domain = document.domain;\n let domainList = domain.split(\".\");\n\n let urlItems = [];\n // 主域名一定会有两部分组成\n urlItems.unshift(domainList.pop());\n // 慢慢从后往前测试\n while (domainList.length) {\n urlItems.unshift(domainList.pop());\n let mainHost = urlItems.join(\".\");\n let cookie = `${key}=${12345};domain=.${mainHost}`;\n\n document.cookie = cookie;\n\n //如果cookie存在,则说明域名合法\n if (keyR.test(document.cookie)) {\n document.cookie = `${cookie};expires=${expiredTime}`;\n return mainHost;\n }\n }\n }\n\n protected getDomIndex = (el: Element): number => {\n if (!el.parentNode) return -1;\n let i = 0;\n const nodeName = el.tagName;\n const list = el.parentNode.children;\n for (let n = 0; n < list.length; n++) {\n if (list[n].tagName === nodeName) {\n if (el === list[n]) {\n return i;\n } else {\n i++;\n }\n }\n }\n return -1;\n };\n\n protected selector = (el: Element): string => {\n const i = el.parentNode && 9 == el.parentNode.nodeType ? -1 : this.getDomIndex(el);\n if (el.getAttribute && el.getAttribute(\"id\") && /^[A-Za-z][-A-Za-z0-9_:.]*$/.test(el.getAttribute(\"id\"))) {\n return \"#\" + el.getAttribute(\"id\");\n } else {\n return el.tagName.toLowerCase() + (~i ? \":nth-of-type(\" + (i + 1) + \")\" : \"\");\n }\n };\n\n public getDomSelector = (el: any, arr?: string[]) => {\n if (!el || !el.parentNode || !el.parentNode.children) {\n return false;\n }\n arr = arr && arr.join ? arr : [];\n const name = el.nodeName.toLowerCase();\n if (!el || name === \"body\" || 1 != el.nodeType) {\n arr.unshift(\"body\");\n return arr.join(\" > \");\n }\n arr.unshift(this.selector(el));\n if (el.getAttribute && el.getAttribute(\"id\") && /^[A-Za-z][-A-Za-z0-9_:.]*$/.test(el.getAttribute(\"id\")))\n return arr.join(\" > \");\n return this.getDomSelector(el.parentNode, arr);\n };\n\n /**\n * @description 增强cookie操作\n */\n public getCookie = function (name) {\n const nameEQ = name + \"=\";\n const ca = document.cookie.split(\";\");\n for (let i = 0; i < ca.length; i++) {\n let c = ca[i];\n while (c.charAt(0) == \" \") {\n c = c.substring(1, c.length);\n }\n if (c.indexOf(nameEQ) == 0) {\n return this._decodeURIComponent(c.substring(nameEQ.length, c.length));\n }\n }\n return null;\n };\n public setCookie = function (name: string, value: string | number, days?: number) {\n let cdomain = \"\",\n expires = \"\",\n secure = \"\",\n samesite = \"\";\n days = days == null ? 73000 : days;\n\n const domain = this.getMainHost();\n cdomain = domain ? \"; domain=\" + domain : \"\";\n\n if (days !== 0) {\n const date = new Date();\n if (String(days).slice(-1) === \"s\") {\n date.setTime(date.getTime() + Number(String(days).slice(0, -1)) * 1000);\n } else {\n date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);\n }\n\n expires = \"; expires=\" + date.toUTCString();\n }\n\n function getValid(data) {\n if (data) {\n return data;\n } else {\n return false;\n }\n }\n let valid_name = \"\";\n let valid_value = \"\";\n let valid_domain = \"\";\n if (name) {\n valid_name = getValid(name);\n }\n if (value) {\n valid_value = getValid(value);\n }\n if (cdomain) {\n valid_domain = getValid(cdomain);\n }\n if (valid_name && valid_value) {\n document.cookie =\n valid_name + \"=\" + encodeURIComponent(valid_value) + expires + \"; path=/\" + valid_domain + samesite + secure;\n }\n };\n public removeCookie = (name) => {\n this.setCookie(name, \"\", -1);\n };\n\n /**\n * 获取当前时间戳\n * @return {number} [当前时间戳]\n */\n public getTimeStamp = (): number => {\n return new Date().getTime();\n };\n\n /**\n * 获取 UUID\n * @return {string} [UUID唯一值]\n */\n public uuid = () => {\n return \"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\".replace(/[xy]/g, function (c) {\n const r = (Math.random() * 16) | 0,\n v = c == \"x\" ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n };\n\n /**\n * 获取设备Id\n * @return {number} [设备Id]\n */\n public getDistinctId = () => {\n let distinctId = this.getCookie(\"distinctId\");\n if (distinctId) return distinctId;\n distinctId = this.uuid();\n this.setCookie(\"distinctId\", distinctId);\n return distinctId;\n };\n\n /**\n * 获取url中的参数\n * @param {[string]} name [参数名]\n */\n public getQueryValue = (): null | JsonProps => {\n const _href = decodeURI(window.location.href);\n const queryArr = _href.match(new RegExp(\"[?&][^?&]+=[^?&]+\", \"g\")) || [];\n const paramsObj: JsonProps = {};\n for (let i = 0; i < queryArr.length; i++) {\n const _item = queryArr[i].replace(/\\?|\\&/, \"\");\n const pair = _item.split(\"=\");\n\n paramsObj[pair[0]] = pair[1];\n }\n return paramsObj;\n };\n\n /**\n *\n * @param {[object]} para [ajax参数]\n * @returns\n */\n public ajax = (para: any) => {\n para.timeout = para.timeout || 30000;\n\n para.credentials = typeof para.credentials === \"undefined\" ? true : para.credentials;\n\n function getJSON(data) {\n if (!data) {\n return \"\";\n }\n try {\n return JSON.parse(data);\n } catch (e) {\n return {};\n }\n }\n\n const g = this.xhr(para.cors);\n if (!g) {\n return false;\n }\n\n if (!para.type) {\n para.type = para.data ? \"POST\" : \"GET\";\n }\n\n const oldsuccess = para.success;\n const olderror = para.error;\n let errorTimer;\n\n const abort = () => {\n try {\n if (this.isObject(g) && g.abort) {\n g.abort();\n }\n } catch (error) {\n this.printLog(error);\n }\n\n if (errorTimer) {\n clearTimeout(errorTimer);\n errorTimer = null;\n para.error && para.error();\n g.onreadystatechange = null;\n g.onload = null;\n g.onerror = null;\n }\n };\n\n para.success = function (data) {\n oldsuccess(data);\n if (errorTimer) {\n clearTimeout(errorTimer);\n errorTimer = null;\n }\n };\n para.error = function (err) {\n olderror(err);\n if (errorTimer) {\n clearTimeout(errorTimer);\n errorTimer = null;\n }\n };\n errorTimer = setTimeout(function () {\n abort();\n }, para.timeout);\n\n g.onreadystatechange = function () {\n try {\n if (g.readyState == 4) {\n if ((g.status >= 200 && g.status < 300) || g.status == 304) {\n para.success(getJSON(g.responseText));\n } else {\n para.error(getJSON(g.responseText), g.status);\n }\n g.onreadystatechange = null;\n g.onload = null;\n }\n } catch (e) {\n g.onreadystatechange = null;\n g.onload = null;\n }\n };\n\n g.open(para.type, para.url, true);\n\n try {\n if (para.credentials) {\n g.withCredentials = true;\n }\n if (this.isObject(para.header)) {\n this.each(para.header, function (v, i) {\n g.setRequestHeader && g.setRequestHeader(i, v);\n });\n }\n\n if (para.data) {\n if (!para.cors) {\n g.setRequestHeader && g.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\");\n }\n if (para.contentType === \"application/json\") {\n g.setRequestHeader && g.setRequestHeader(\"Content-type\", \"application/json; charset=UTF-8\");\n } else {\n g.setRequestHeader && g.setRequestHeader(\"Content-type\", \"application/x-www-form-urlencoded\");\n }\n }\n } catch (e) {\n this.printLog(e);\n }\n\n g.send(para.data || null);\n };\n public xhr = (cors) => {\n if (cors) {\n if (typeof window.XMLHttpRequest !== \"undefined\" && \"withCredentials\" in new XMLHttpRequest()) {\n return new XMLHttpRequest();\n } else {\n return null;\n }\n } else if (typeof window.XMLHttpRequest !== \"undefined\") {\n return new XMLHttpRequest();\n } else {\n return null;\n }\n };\n\n public getUA = () => {\n const Sys: JsonProps = {};\n const ua = navigator.userAgent.toLowerCase();\n let s;\n if ((s = ua.match(/opera.([\\d.]+)/))) {\n Sys.opera = Number(s[1].split(\".\")[0]);\n } else if ((s = ua.match(/msie ([\\d.]+)/))) {\n Sys.ie = Number(s[1].split(\".\")[0]);\n } else if ((s = ua.match(/edge.([\\d.]+)/))) {\n Sys.edge = Number(s[1].split(\".\")[0]);\n } else if ((s = ua.match(/firefox\\/([\\d.]+)/))) {\n Sys.firefox = Number(s[1].split(\".\")[0]);\n } else if ((s = ua.match(/chrome\\/([\\d.]+)/))) {\n Sys.chrome = Number(s[1].split(\".\")[0]);\n } else if ((s = ua.match(/version\\/([\\d.]+).*safari/))) {\n Sys.safari = Number(s[1].match(/^\\d*.\\d*/));\n } else if ((s = ua.match(/trident\\/([\\d.]+)/))) {\n Sys.ie = 11;\n }\n return Sys;\n };\n\n public isSupportBeaconSend = (): Boolean => {\n let supported = false;\n if (typeof navigator !== \"object\" || typeof navigator.sendBeacon !== \"function\") {\n return supported;\n }\n\n let Sys = this.getUA();\n var ua = navigator.userAgent.toLowerCase();\n\n if (/Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(navigator.userAgent)) {\n var reg = /os [\\d._]*/gi;\n var verinfo = ua.match(reg);\n var version = (verinfo + \"\").replace(/[^0-9|_.]/gi, \"\").replace(/_/gi, \".\");\n var ver = version.split(\".\");\n\n if (typeof Sys.safari === \"undefined\") {\n Sys.safari = ver[0];\n }\n\n if (ver[0] && +ver[0] < 13) {\n if (Sys.chrome > 41 || Sys.firefox > 30 || Sys.opera > 25 || Sys.safari > 12) {\n supported = true;\n }\n } else if (Sys.chrome > 41 || Sys.firefox > 30 || Sys.opera > 25 || Sys.safari > 11.3) {\n supported = true;\n }\n } else {\n if (Sys.chrome > 38 || Sys.edge > 13 || Sys.firefox > 30 || Sys.opera > 25 || Sys.safari > 11.0) {\n supported = true;\n }\n }\n return supported;\n };\n\n /**\n * beacon请求\n * @param {[string]} url\n * @param {[object]} params\n */\n public sendBeacon = (para: any): Promise<{ message?: string; success: boolean }> => {\n if (this.isSupportBeaconSend() === true) {\n const supportType = navigator.sendBeacon(para.url, new URLSearchParams(JSON.stringify(para.data || {})));\n\n if (supportType) {\n return Promise.resolve({ success: true });\n } else {\n return Promise.reject({ success: false });\n }\n } else {\n return Promise.reject({ message: \"不支持sendBeacon,发送失败!\", success: false });\n }\n };\n}\n"],"names":["extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","prototype","hasOwnProperty","call","__assign","assign","t","s","i","n","arguments","length","apply","this","_super","_this","PageView","WebClick","PageRetained","CustomTrack","initParams","preset","pathname","window","location","currentUrl","href","pageKey","replace","substr","systemsInfo","getSystemsInfo","platform","setCookie","getTimeStamp","presetParams","each","val","key","initConfig","test","printLog","listener","unlistener","userInfo","isObject","_a","desc","partkey","business","params","getParams","event","itemKey","getItemKey","privateParamMap","sendData","isTrackSinglePage","rewriteHistory","addSinglePageEvent","onPageViewCallback","historyType","addEventListener","onClickCallback","singlePageEvent","history","pushState","historyName","removeEventListener","e","target","dataset","partKey","position","pageX","pageY","id","className","targetEle","nodeName","eventDescMap","pointerType","elementSelector","getDomSelector","ORGIN","origin","targetUrl","substring","sendRetained","type","_b","pageWidth","innerWidth","pageHeight","innerHeight","screenWidth","screen","width","screenHeight","height","requestTime","deviceId","getDistinctId","sdkVersion","urlParams","getQueryValue","serverUrl","sendTimeout","contentType","isSupportBeaconSend","sendBeacon","url","data","Promise","resolve","reject","ajax","JSON","stringify","credentials","timeout","cors","success","res","error","err","indexOf","__time","getCookie","retainedStartTime","retainedData","retainedDuration","Math","max","appKey","toString","undefined","filter","reduce","str","showLog","autoTrack","TypeError","String","__","constructor","create","__extends","WebTracking","callback","ua","navigator","userAgent","_platform","logMsg","language","wxVersionMatch","match","wxVersion","ipod","ipad","iphone","android","windows","mac","push","join","network","toLowerCase","split","handler","attachEvent","detachEvent","historyWrap","orig","Event","rv","dispatchEvent","replaceState","isArray","obj","forEach","slice","iterator","context","nativeForEach","l","breaker","el","parentNode","tagName","list","children","nodeType","getDomIndex","getAttribute","arr","name","unshift","selector","nameEQ","ca","document","cookie","c","charAt","_decodeURIComponent","value","days","cdomain","expires","domain","getMainHost","date","Date","setTime","getTime","Number","toUTCString","getValid","valid_name","valid_value","valid_domain","encodeURIComponent","r","random","distinctId","uuid","queryArr","decodeURI","RegExp","paramsObj","pair","para","getJSON","parse","g","xhr","errorTimer","oldsuccess","olderror","clearTimeout","setTimeout","abort","onreadystatechange","onload","onerror","readyState","status","responseText","open","withCredentials","header","v","setRequestHeader","send","XMLHttpRequest","Sys","opera","ie","edge","firefox","chrome","safari","supported","getUA","ver","URLSearchParams","message","WebTrackingTools","_i","rest","formatJsonString","console","log","f","result","decodeURIComponent","keyR","expiredTime","domainList","urlItems","pop","mainHost"],"mappings":"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"}
|