@fle-sdk/event-tracking-web 1.0.8 → 1.1.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 +317 -93
- package/lib/index.ems.js +1 -1
- package/lib/index.ems.js.map +1 -1
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/types/index.d.ts +73 -111
- package/lib/types/tools.d.ts +112 -0
- package/lib/types/type.d.ts +121 -70
- package/package.json +3 -3
package/lib/index.ems.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.ems.js","sources":["../node_modules/tslib/tslib.es6.js","../src/lib/index.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 * key由这几部分组成:appkey.pagekey.partkey 通过“.”来分割\n * appkey:应用唯一标识\n * pagekey:页面唯一标识,取当前路由 window.location.pathname.replace(/\\//g, '_').substr(1)\n * partkey:控件/自定义事件的唯一标识,当是控件触发且没有partkey时,会取当前控件的 id/class/dom\n */\n\nimport {\n _window,\n ConfigProps,\n OtherInfoProps,\n ApiConfigProps,\n JsonProps,\n WebTrackingProps,\n TrackingPostProps,\n CustomTrackProps,\n TargetEleProps,\n RequestProps,\n SystemInfoProps,\n} from \"./type\";\n\nclass WebTracking {\n private config: ConfigProps;\n\n private otherInfo: OtherInfoProps;\n\n private currentUrl: string;\n\n private apiConfig: ApiConfigProps;\n\n private eventDescMap: JsonProps;\n\n constructor() {\n this.config = {\n appKey: \"\", // 项目 ID\n pageKey: \"\", // 页面 ID\n siteId: \"\", // 站点 ID\n };\n\n this.otherInfo = {\n sdkVersion: \"1.0.7\", // sdk 版本\n platformType: \"pc\", // h5 or pc\n };\n\n this.currentUrl = \"\"; // 当前路由\n\n this.apiConfig = {\n serverApi: \"\", // 埋点上报 api\n serverHost: \"\", // 埋点服务器 host\n };\n\n // 上传事件描述\n this.eventDescMap = {\n load: \"浏览器上报事件:页面加载\",\n beforeunload: \"浏览器上报事件:页面卸载\",\n pushState: \"浏览器上报事件:追加新路由\",\n replaceState: \"浏览器上报事件:替换当前路由为新路由\",\n popstate: \"浏览器上报事件:前进、回退、hash值改变\",\n hashchange: \"浏览器上报事件:hash值改变\",\n click: \"点击上报事件\",\n retained: \"浏览器上报事件:留存时长\",\n customTrack: \"自定义事件上报\",\n };\n }\n\n /**\n * 初始化函数\n * @param {[object]} configParams [初始化参数]\n */\n public init = (configParams: WebTrackingProps) => {\n // 初始化配置参数\n if (configParams instanceof Object) {\n for (let key in configParams) {\n if (this.config[key] !== undefined) {\n this.config[key] = configParams[key];\n }\n if (this.otherInfo[key] !== undefined) {\n this.otherInfo[key] = configParams[key];\n }\n if (this.apiConfig[key] !== undefined) {\n this.apiConfig[key] = configParams[key];\n }\n }\n }\n\n this.config.pageKey = window.location.pathname\n .replace(/\\//g, \"_\")\n .substr(1);\n\n this.otherInfo.platformType = this.getPlatformType();\n this.otherInfo.system = this.systemInfo();\n\n this.currentUrl = window.location.pathname;\n\n // 重写History某些方法\n this.rewriteHistory();\n\n // 启用监听\n this.listener();\n };\n\n /**\n * 自定义采集方法\n * @param {[string]} event [事件类型]\n * @param {[object]} extroInfo [扩展信息]\n * @return {[Promise]} [回调]\n */\n public tracking = ({\n desc,\n partkey,\n business,\n }: CustomTrackProps): Promise<{ message: string }> => {\n return this.trackingPost({\n event: \"customTrack\",\n desc: desc || this.eventDescMap[\"customTrack\"],\n itemKey: this.getItemKey(partkey || \"customTrack\"),\n extroInfo: {\n business,\n },\n });\n };\n\n /**\n * 上报触发方法\n * @param {[string]} event [事件类型]\n * @param {[string]} desc [事件描述]\n * @param {[string]} itemKey [事件Id]\n * @param {[object]} extroInfo [扩展信息]\n * @return {[Promise]} [回调]\n */\n trackingPost = ({\n event,\n desc,\n itemKey,\n extroInfo,\n }: TrackingPostProps): Promise<{ message: string }> => {\n const params = {\n ...this.config,\n event,\n desc,\n itemKey,\n requestTime: this.getTimeStamp(),\n deviceId: this.getDistinctId(),\n privateParamMap: {\n ...extroInfo,\n ...this.otherInfo,\n urlParams: this.getQueryValue(),\n },\n };\n const data = {\n url: `${this.apiConfig.serverHost}${this.apiConfig.serverApi}`,\n headers: {\n \"Content-Type\": \"application/json\",\n // authority_token:\n // this.getCookie(\"token\") || this.getCookie(\"seller_token\"),\n },\n params: JSON.stringify(params),\n };\n\n // 留存时长上报\n if ([\"beforeunload\", \"pushState\", \"replaceState\", \"hashchange\", \"popstate\"].indexOf(event) >= 0) {\n const __time = this.getCookie(\"retainedStartTime\");\n const retainedStartTime = __time ? +__time : this.getTimeStamp();\n const retainedData = {\n url: `${this.apiConfig.serverHost}${this.apiConfig.serverApi}`,\n headers: {\n \"Content-Type\": \"application/json\",\n },\n params: JSON.stringify({\n ...params,\n event: \"retained\",\n desc: this.eventDescMap.retained,\n retainedStartTime\n })\n }\n event === \"beforeunload\" ? this.sendBeacon(retainedData) : this.httpPost(retainedData);\n \n this.setCookie(\"retainedStartTime\", this.getTimeStamp())\n }\n\n return event === \"beforeunload\"\n ? this.sendBeacon(data)\n : this.httpPost(data);\n };\n\n onClick = (e: any) => {\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 nodeName: nodeName,\n id: id,\n className: className,\n };\n const pageWidth = document.documentElement.offsetWidth;\n const pageHeight = document.documentElement.offsetHeight;\n const screenWidth = window.screen.width;\n const screenHeight = window.screen.height;\n const screenAvailWidth = window.screen.availWidth;\n const screenAvailHeight = window.screen.availHeight;\n const windowInnerWidth = window.innerWidth;\n const windowInnerHeight = window.innerHeight;\n\n this.trackingPost({\n event: \"click\",\n desc: e.target.dataset.desc || this.eventDescMap[\"click\"],\n itemKey: this.getItemKey(e.target.dataset.partKey),\n extroInfo: {\n position,\n targetEle,\n pageWidth,\n pageHeight,\n screenWidth,\n screenHeight,\n screenAvailWidth,\n screenAvailHeight,\n windowInnerWidth,\n windowInnerHeight,\n },\n });\n };\n\n /**\n * 监听路由事件\n */\n addRouteEvent = (callback: Function) => {\n const historyPushState = window.history.pushState;\n\n const singlePageEvent = !!historyPushState ? \"popstate\" : \"hashchange\";\n\n [\n \"load\",\n \"beforeunload\",\n \"pushState\",\n \"replaceState\",\n singlePageEvent,\n ].forEach((historyName: string) => {\n this.addEventListener(window, historyName, callback);\n });\n };\n\n /**\n * 路由触发事件\n */\n onPushStateHandler = (e: any) => {\n this.trackingPost({\n event: e.type,\n desc: this.eventDescMap[e.type],\n itemKey: this.getItemKey(),\n extroInfo: {\n sourceUrl: this.currentUrl,\n targetUrl: e.arguments?.[2],\n },\n });\n\n // retained\n if ([\"load\"].indexOf(e.type) >= 0) {\n this.setCookie(\"retainedStartTime\", this.getTimeStamp())\n }\n\n this.currentUrl = window.location.pathname;\n this.config.pageKey = window.location.pathname\n .replace(/\\//g, \"_\")\n .substr(1);\n };\n\n /**\n * 监听集合\n */\n listener = () => {\n this.addRouteEvent(this.onPushStateHandler);\n\n this.addEventListener(window, \"click\", this.onClick);\n\n this.addEventListener(window, \"unload\", this.unload);\n };\n\n /**\n * 手动移除监听事件\n */\n unload = () => {\n const historyPushState = window.history.pushState;\n const singlePageEvent = !!historyPushState ? \"popstate\" : \"hashchange\";\n [\n \"load\",\n \"beforeunload\",\n \"pushState\",\n \"replaceState\",\n singlePageEvent,\n ].forEach((historyName: string) => {\n this.removeEventListener(window, historyName, this.onPushStateHandler);\n });\n\n this.removeEventListener(window, \"click\", this.onClick);\n\n this.removeEventListener(window, \"unload\", this.unload);\n };\n\n // ------ helps ------\n\n /**\n * 获取 UUID\n * @return {[string]} [UUID唯一值]\n */\n protected 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 * 获取 itemKey\n * @param {[string]} partkey [参数名]\n * @return {[string]} [UUID唯一值]\n */\n protected getItemKey = (partkey?: string): string => {\n const { appKey, pageKey } = this.config;\n const keys: any[] = [appKey, pageKey, partkey].filter(\n (key: string | undefined) => !!key\n );\n return keys.reduce(\n (str, key) => str + `${str.length ? \".\" : \"\"}` + key,\n \"\"\n );\n };\n\n /**\n * 获取url中的参数\n * @param {[string]} name [参数名]\n * @return {[string]} [参数值]\n */\n protected getQueryValue = (name?: string): string | null | JsonProps => {\n var query = decodeURI(window.location.search.substring(1));\n var vars = query.split(\"&\");\n var paramsObj: JsonProps = {};\n for (var i = 0; i < vars.length; i++) {\n var pair = vars[i].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 * @return {[number]} [当前时间戳]\n */\n protected getTimeStamp = (): number => {\n return new Date().getTime();\n };\n\n /**\n * 获取设备Id\n * @return {[number]} [当前时间戳]\n */\n protected 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 * 获取平台类型\n * @return {[string]} [pc / h5]\n */\n protected getPlatformType = () => {\n var userAgentInfo = navigator.userAgent;\n var Agents = new Array(\n \"Android\",\n \"iPhone\",\n \"SymbianOS\",\n \"Windows Phone\",\n \"iPad\",\n \"iPod\"\n );\n var flag = true;\n for (var 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 * 设置cookie\n * @param {[string]} name [cookie名称]\n * @param {[string | number]} value [cookie对应值]\n */\n protected setCookie = (name: string, value: string | number) => {\n document.cookie = name + \"=\" + value + \";\" + document.cookie;\n };\n\n /**\n * 获取cookie\n * @param {[string]} name [cookie名称]\n * @return {[number]} [cookie名称对应的值]\n */\n protected getCookie = (name: string) => {\n var name = name + \"=\";\n var decodedCookie = decodeURIComponent(document.cookie);\n var ca = decodedCookie.split(\";\");\n for (var i = 0; i < ca.length; i++) {\n var c = ca[i];\n while (c.charAt(0) === \" \") {\n c = c.substring(1);\n }\n if (c.indexOf(name) === 0) {\n return c.substring(name.length, c.length);\n }\n }\n return \"\";\n };\n\n /**\n * xhr 请求\n * @param {[string]} url\n * @param {[object]} headers\n * @param {[object]} params\n */\n protected httpPost = ({\n url,\n headers,\n params,\n async = true\n }: RequestProps): Promise<{ message: string }> => {\n return new Promise((resolve, reject) => {\n const xhr = new XMLHttpRequest();\n xhr.open(\"post\", url, async);\n xhr.onreadystatechange = () => {\n if (xhr.readyState === 4) {\n if (xhr.status === 200) {\n var responseText: any = xhr.responseText; // 返回结果\n if (!responseText) return reject({ message: \"Request Error\" });\n\n var res = null;\n\n try {\n res = JSON.parse(responseText);\n } catch (error) {}\n\n if (res && res.code === \"2000\") {\n return resolve(res);\n } else {\n return reject({ message: \"Request Error\" });\n }\n } else {\n console.log(xhr.statusText);\n return reject({ message: xhr.statusText });\n }\n }\n };\n xhr.onerror = function (e) {\n console.log(xhr.statusText);\n return reject({ message: xhr.statusText });\n };\n headers instanceof Object &&\n Object.keys(headers).forEach((key) => {\n xhr.setRequestHeader(key, headers[key]);\n });\n xhr.send(params);\n });\n };\n\n /**\n * sendBeacon请求\n * @param {[string]} url\n * @param {[object]} params\n */\n protected sendBeacon = (data: RequestProps): Promise<{ message: string }> => {\n if (\n typeof navigator === \"object\" &&\n typeof navigator.sendBeacon === \"function\"\n ) {\n const headers = {\n type: 'application/json'\n };\n const blob = new Blob([JSON.stringify(data.params)], headers);\n navigator.sendBeacon(data.url, blob);\n return Promise.resolve({ message: \"发送成功!\" });\n } else {\n return this.httpPost({...data, async: false});\n }\n };\n\n /**\n * 移除监听事件\n * @param {[object]} target\n * @param {[object]} type\n * @param {[funtion]} handler\n */\n protected removeEventListener = (\n target: _window,\n type: string,\n handler: any\n ) => {\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 * 监听事件\n * @param {[object]} target\n * @param {[object]} type\n * @param {[funtion]} handler\n */\n protected addEventListener = (target: _window, type: string, handler: any) => {\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 * 重写history[pushState][replaceState]方法\n */\n protected 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 * 系统信息\n */\n protected systemInfo() {\n // print system info\n const ua = navigator.userAgent;\n const language = navigator.language;\n\n let logMsg: string[] = [];\n let systemInfo: SystemInfoProps = {\n language,\n };\n\n // wechat client version\n const wxVersionMatch = ua.match(/MicroMessenger\\/([\\d\\.]+)/i);\n const wxVersion =\n wxVersionMatch && wxVersionMatch[1] ? wxVersionMatch[1] : null;\n const isMiniprogram = location.host === \"servicewechat.com\";\n\n // location\n if (!isMiniprogram) {\n systemInfo[\"location\"] = location.href;\n }\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 systemInfo[\"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 systemInfo[\"network\"] = logMsg.length ? logMsg.join(\", \") : \"Unknown\";\n }\n\n // User Agent\n systemInfo[\"ua\"] = ua;\n\n // performance related\n // use `setTimeout` to make sure all timing points are available\n setTimeout(function () {\n const performance =\n window.performance ||\n (<any>window).msPerformance ||\n (<any>window).webkitPerformance;\n\n // timing\n if (performance && performance.timing) {\n const t = performance.timing;\n if (t.navigationStart) {\n systemInfo[\"navigationStart\"] = t.navigationStart;\n }\n if (t.navigationStart && t.domainLookupStart) {\n systemInfo[\"navigation\"] =\n t.domainLookupStart - t.navigationStart + \"ms\";\n }\n if (t.domainLookupEnd && t.domainLookupStart) {\n systemInfo[\"dns\"] = t.domainLookupEnd - t.domainLookupStart + \"ms\";\n }\n if (t.connectEnd && t.connectStart) {\n if (t.connectEnd && t.secureConnectionStart) {\n systemInfo[\"tcp (ssl)\"] =\n t.connectEnd -\n t.connectStart +\n \"ms (\" +\n (t.connectEnd - t.secureConnectionStart) +\n \"ms)\";\n } else {\n systemInfo[\"tcp\"] = t.connectEnd - t.connectStart + \"ms\";\n }\n }\n if (t.responseStart && t.requestStart) {\n systemInfo[\"request\"] = t.responseStart - t.requestStart + \"ms\";\n }\n if (t.responseEnd && t.responseStart) {\n systemInfo[\"response\"] = t.responseEnd - t.responseStart + \"ms\";\n }\n if (t.domComplete && t.domLoading) {\n if (t.domContentLoadedEventStart && t.domLoading) {\n systemInfo[\"domComplete (domLoaded)\"] =\n t.domComplete -\n t.domLoading +\n \"ms (\" +\n (t.domContentLoadedEventStart - t.domLoading) +\n \"ms)\";\n } else {\n systemInfo[\"domComplete\"] = t.domComplete - t.domLoading + \"ms\";\n }\n }\n if (t.loadEventEnd && t.loadEventStart) {\n systemInfo[\"loadEvent\"] = t.loadEventEnd - t.loadEventStart + \"ms\";\n }\n if (t.navigationStart && t.loadEventEnd) {\n systemInfo[\"total (DOM)\"] =\n t.loadEventEnd -\n t.navigationStart +\n \"ms (\" +\n (t.domComplete - t.navigationStart) +\n \"ms)\";\n }\n }\n }, 0);\n\n return systemInfo;\n }\n}\n\nexport default new WebTracking();\n"],"names":["__assign","Object","assign","t","s","i","n","arguments","length","p","prototype","hasOwnProperty","call","apply","this","configParams","key","undefined","_this","config","otherInfo","apiConfig","pageKey","window","location","pathname","replace","substr","platformType","getPlatformType","system","systemInfo","currentUrl","rewriteHistory","listener","_a","desc","partkey","business","trackingPost","event","eventDescMap","itemKey","getItemKey","extroInfo","params","requestTime","getTimeStamp","deviceId","getDistinctId","privateParamMap","urlParams","getQueryValue","data","url","serverHost","serverApi","headers","JSON","stringify","indexOf","__time","getCookie","retainedStartTime","retainedData","retained","sendBeacon","httpPost","setCookie","e","target","dataset","partKey","position","pageX","pageY","id","className","targetEle","nodeName","pageWidth","document","documentElement","offsetWidth","pageHeight","offsetHeight","screenWidth","screen","width","screenHeight","height","screenAvailWidth","availWidth","screenAvailHeight","availHeight","windowInnerWidth","innerWidth","windowInnerHeight","innerHeight","callback","history","pushState","forEach","historyName","addEventListener","type","sourceUrl","targetUrl","addRouteEvent","onPushStateHandler","onClick","unload","removeEventListener","c","r","Math","random","toString","filter","reduce","str","name","vars","decodeURI","search","substring","split","paramsObj","pair","Date","getTime","distinctId","uuid","userAgentInfo","navigator","userAgent","Agents","Array","flag","v","value","cookie","ca","decodeURIComponent","charAt","_b","async","Promise","resolve","reject","xhr","XMLHttpRequest","open","onreadystatechange","readyState","status","responseText","message","res","parse","error","code","console","log","statusText","onerror","keys","setRequestHeader","send","blob","Blob","handler","detachEvent","attachEvent","historyWrap","orig","Event","rv","dispatchEvent","replaceState","appKey","siteId","sdkVersion","load","beforeunload","popstate","hashchange","click","customTrack","WebTracking","ua","logMsg","language","wxVersionMatch","match","wxVersion","host","href","ipod","ipad","iphone","android","mac","push","join","network","toLowerCase","setTimeout","performance","msPerformance","webkitPerformance","timing","navigationStart","domainLookupStart","domainLookupEnd","connectEnd","connectStart","secureConnectionStart","responseStart","requestStart","responseEnd","domComplete","domLoading","domContentLoadedEventStart","loadEventEnd","loadEventStart"],"mappings":"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"}
|
|
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.js
CHANGED
|
@@ -12,5 +12,5 @@
|
|
|
12
12
|
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
13
13
|
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
14
14
|
PERFORMANCE OF THIS SOFTWARE.
|
|
15
|
-
***************************************************************************** */var e=function(){return(e=Object.assign||function(e){for(var t,n=1,o=arguments.length;n<o;n++)for(var a in t=arguments[n])Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e}).apply(this,arguments)};return new(function(){function t(){var t=this;this.init=function(e){if(e instanceof Object)for(var n in e)void 0!==t.config[n]&&(t.config[n]=e[n]),void 0!==t.otherInfo[n]&&(t.otherInfo[n]=e[n]),void 0!==t.apiConfig[n]&&(t.apiConfig[n]=e[n]);t.config.pageKey=window.location.pathname.replace(/\//g,"_").substr(1),t.otherInfo.platformType=t.getPlatformType(),t.otherInfo.system=t.systemInfo(),t.currentUrl=window.location.pathname,t.rewriteHistory(),t.listener()},this.tracking=function(e){var n=e.desc,o=e.partkey,a=e.business;return t.trackingPost({event:"customTrack",desc:n||t.eventDescMap.customTrack,itemKey:t.getItemKey(o||"customTrack"),extroInfo:{business:a}})},this.trackingPost=function(n){var o=n.event,a=n.desc,i=n.itemKey,r=n.extroInfo,s=e(e({},t.config),{event:o,desc:a,itemKey:i,requestTime:t.getTimeStamp(),deviceId:t.getDistinctId(),privateParamMap:e(e(e({},r),t.otherInfo),{urlParams:t.getQueryValue()})}),c={url:""+t.apiConfig.serverHost+t.apiConfig.serverApi,headers:{"Content-Type":"application/json"},params:JSON.stringify(s)};if(["beforeunload","pushState","replaceState","hashchange","popstate"].indexOf(o)>=0){var d=t.getCookie("retainedStartTime"),u=d?+d:t.getTimeStamp(),p={url:""+t.apiConfig.serverHost+t.apiConfig.serverApi,headers:{"Content-Type":"application/json"},params:JSON.stringify(e(e({},s),{event:"retained",desc:t.eventDescMap.retained,retainedStartTime:u}))};"beforeunload"===o?t.sendBeacon(p):t.httpPost(p),t.setCookie("retainedStartTime",t.getTimeStamp())}return"beforeunload"===o?t.sendBeacon(c):t.httpPost(c)},this.onClick=function(e){if(e.target.dataset.partKey){var n=[e.pageX,e.pageY],o=e.target.id,a=e.target.className,i={nodeName:e.target.nodeName,id:o,className:a},r=document.documentElement.offsetWidth,s=document.documentElement.offsetHeight,c=window.screen.width,d=window.screen.height,u=window.screen.availWidth,p=window.screen.availHeight,h=window.innerWidth,l=window.innerHeight;t.trackingPost({event:"click",desc:e.target.dataset.desc||t.eventDescMap.click,itemKey:t.getItemKey(e.target.dataset.partKey),extroInfo:{position:n,targetEle:i,pageWidth:r,pageHeight:s,screenWidth:c,screenHeight:d,screenAvailWidth:u,screenAvailHeight:p,windowInnerWidth:h,windowInnerHeight:l}})}},this.addRouteEvent=function(e){["load","beforeunload","pushState","replaceState",window.history.pushState?"popstate":"hashchange"].forEach((function(n){t.addEventListener(window,n,e)}))},this.onPushStateHandler=function(e){var n;t.trackingPost({event:e.type,desc:t.eventDescMap[e.type],itemKey:t.getItemKey(),extroInfo:{sourceUrl:t.currentUrl,targetUrl:null===(n=e.arguments)||void 0===n?void 0:n[2]}}),["load"].indexOf(e.type)>=0&&t.setCookie("retainedStartTime",t.getTimeStamp()),t.currentUrl=window.location.pathname,t.config.pageKey=window.location.pathname.replace(/\//g,"_").substr(1)},this.listener=function(){t.addRouteEvent(t.onPushStateHandler),t.addEventListener(window,"click",t.onClick),t.addEventListener(window,"unload",t.unload)},this.unload=function(){["load","beforeunload","pushState","replaceState",window.history.pushState?"popstate":"hashchange"].forEach((function(e){t.removeEventListener(window,e,t.onPushStateHandler)})),t.removeEventListener(window,"click",t.onClick),t.removeEventListener(window,"unload",t.unload)},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.getItemKey=function(e){var n=t.config;return[n.appKey,n.pageKey,e].filter((function(e){return!!e})).reduce((function(e,t){return e+(e.length?".":"")+t}),"")},this.getQueryValue=function(e){for(var t=decodeURI(window.location.search.substring(1)).split("&"),n={},o=0;o<t.length;o++){var a=t[o].split("=");if(a[0]===e)return a[1];n[a[0]]=a[1]}return e?null:n},this.getTimeStamp=function(){return(new Date).getTime()},this.getDistinctId=function(){var e=t.getCookie("distinctId");return e||(e=t.uuid(),t.setCookie("distinctId",e),e)},this.getPlatformType=function(){for(var e=navigator.userAgent,t=new Array("Android","iPhone","SymbianOS","Windows Phone","iPad","iPod"),n=!0,o=0;o<t.length;o++)if(e.indexOf(t[o])>0){n=!1;break}return n?"pc":"h5"},this.setCookie=function(e,t){document.cookie=e+"="+t+";"+document.cookie},this.getCookie=function(e){e+="=";for(var t=decodeURIComponent(document.cookie).split(";"),n=0;n<t.length;n++){for(var o=t[n];" "===o.charAt(0);)o=o.substring(1);if(0===o.indexOf(e))return o.substring(e.length,o.length)}return""},this.httpPost=function(e){var t=e.url,n=e.headers,o=e.params,a=e.async,i=void 0===a||a;return new Promise((function(e,a){var r=new XMLHttpRequest;r.open("post",t,i),r.onreadystatechange=function(){if(4===r.readyState){if(200===r.status){var t=r.responseText;if(!t)return a({message:"Request Error"});var n=null;try{n=JSON.parse(t)}catch(e){}return n&&"2000"===n.code?e(n):a({message:"Request Error"})}return console.log(r.statusText),a({message:r.statusText})}},r.onerror=function(e){return console.log(r.statusText),a({message:r.statusText})},n instanceof Object&&Object.keys(n).forEach((function(e){r.setRequestHeader(e,n[e])})),r.send(o)}))},this.sendBeacon=function(n){if("object"==typeof navigator&&"function"==typeof navigator.sendBeacon){var o=new Blob([JSON.stringify(n.params)],{type:"application/json"});return navigator.sendBeacon(n.url,o),Promise.resolve({message:"发送成功!"})}return t.httpPost(e(e({},n),{async:!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.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.rewriteHistory=function(){var e=window.history,t=function(e){var t=window.history,n=t[e],o=new Event(e);return function(){var e=n.apply(t,arguments);return o.arguments=arguments,window.dispatchEvent(o),e}};window.history.pushState&&(e.pushState=t("pushState"),e.replaceState=t("replaceState"))},this.config={appKey:"",pageKey:"",siteId:""},this.otherInfo={sdkVersion:"1.0.7",platformType:"pc"},this.currentUrl="",this.apiConfig={serverApi:"",serverHost:""},this.eventDescMap={load:"浏览器上报事件:页面加载",beforeunload:"浏览器上报事件:页面卸载",pushState:"浏览器上报事件:追加新路由",replaceState:"浏览器上报事件:替换当前路由为新路由",popstate:"浏览器上报事件:前进、回退、hash值改变",hashchange:"浏览器上报事件:hash值改变",click:"点击上报事件",retained:"浏览器上报事件:留存时长",customTrack:"自定义事件上报"}}return t.prototype.systemInfo=function(){var e=navigator.userAgent,t=[],n={language:navigator.language},o=e.match(/MicroMessenger\/([\d\.]+)/i),a=o&&o[1]?o[1]:null;"servicewechat.com"===location.host||(n.location=location.href);var i=e.match(/(ipod).*\s([\d_]+)/i),r=e.match(/(ipad).*\s([\d_]+)/i),s=e.match(/(iphone)\sos\s([\d_]+)/i),c=e.match(/(android)\s([\d\.]+)/i),d=e.match(/(Mac OS X)\s([\d_]+)/i);t=[],c?t.push("Android "+c[2]):s?t.push("iPhone, iOS "+s[2].replace(/_/g,".")):r?t.push("iPad, iOS "+r[2].replace(/_/g,".")):i?t.push("iPod, iOS "+i[2].replace(/_/g,".")):d&&t.push("Mac, MacOS "+d[2].replace(/_/g,".")),a&&t.push("WeChat "+a),n.client=t.length?t.join(", "):"Unknown";var u=e.toLowerCase().match(/ nettype\/([^ ]+)/g);return u&&u[0]&&(t=[(u=u[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},t}())}));
|
|
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)};return 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}()))}));
|
|
16
16
|
//# sourceMappingURL=index.js.map
|