{"version":3,"file":"telescope.min.js","sources":["../node_modules/tslib/tslib.es6.js","../src/constant/index.ts","../src/core/config.ts","../node_modules/ramda/src/internal/_isPlaceholder.js","../node_modules/ramda/src/internal/_curry1.js","../node_modules/ramda/src/internal/_curry2.js","../node_modules/ramda/src/internal/_arrayFromIterator.js","../node_modules/ramda/src/internal/_includesWith.js","../node_modules/ramda/src/internal/_functionName.js","../node_modules/ramda/src/internal/_has.js","../node_modules/ramda/src/internal/_objectIs.js","../node_modules/ramda/src/internal/_isArguments.js","../node_modules/ramda/src/keys.js","../node_modules/ramda/src/type.js","../node_modules/ramda/src/internal/_equals.js","../node_modules/ramda/src/equals.js","../src/utils/util.ts","../src/core/clientInfo.ts","../src/core/pageInfo.ts","../src/utils/http.ts","../src/core/libInfo.ts","../src/core/durationTime.ts","../src/core/user.ts","../node_modules/ramda/src/pick.js","../src/core/send.ts","../src/core/netInfo.ts","../src/core/exchange.ts","../src/core/viewTracker.ts","../node_modules/vissense/dist/vissense.js","../src/core/actionTracker.ts","../node_modules/ramda/src/internal/_curry3.js","../node_modules/ramda/src/always.js","../node_modules/ramda/src/over.js","../node_modules/ramda/src/set.js","../node_modules/ramda/src/assoc.js","../node_modules/ramda/src/internal/_isArray.js","../node_modules/ramda/src/internal/_isTransformer.js","../node_modules/ramda/src/internal/_dispatchable.js","../node_modules/ramda/src/internal/_map.js","../node_modules/ramda/src/internal/_isString.js","../node_modules/ramda/src/internal/_isArrayLike.js","../node_modules/ramda/src/internal/_xwrap.js","../node_modules/ramda/src/internal/_arity.js","../node_modules/ramda/src/bind.js","../node_modules/ramda/src/internal/_reduce.js","../node_modules/ramda/src/internal/_xfBase.js","../node_modules/ramda/src/internal/_xmap.js","../node_modules/ramda/src/internal/_curryN.js","../node_modules/ramda/src/curryN.js","../node_modules/ramda/src/map.js","../node_modules/ramda/src/lens.js","../node_modules/ramda/src/internal/_isInteger.js","../node_modules/ramda/src/nth.js","../node_modules/ramda/src/paths.js","../node_modules/ramda/src/path.js","../node_modules/ramda/src/prop.js","../node_modules/ramda/src/lensProp.js","../src/decoratiors/tools.ts","../src/directives/generate.ts","../src/directives/trackView.ts","../src/directives/trackEvent.ts","../src/directives/trackPage.ts","../node_modules/ev-emitter/ev-emitter.js","../node_modules/@zyf2e/imagesloaded/imagesloaded.js","../src/core/performance.ts","../src/core/autoTrack.ts","../src/core/trycatch.ts","../src/core/bindEvent.ts","../src/utils/injectedXHR.ts","../src/utils/hijackHistoryEvent.ts","../src/internal.ts","../src/index.ts","../src/decoratiors/tracker.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, SuppressedError, Symbol */\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 __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\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 (g && (g = 0, op[0] && (_ = 0)), _) 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 var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\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, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\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\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\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: false } : 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\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n function next() {\r\n while (env.stack.length) {\r\n var rec = env.stack.pop();\r\n try {\r\n var result = rec.dispose && rec.dispose.call(rec.value);\r\n if (rec.async) return Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n};\r\n","//日志收集接口\nexport const SERVER_URL = `${\n window.location.protocol === 'http:' ? 'http:' : 'https:'\n}//frontlo-collection.91jkys.com/log_h5.gif`; //'http://test.qa.91jkys.com:9342/log.gif';\n\nexport const DEBUG_SERVER_URL = `${\n window.location.protocol === 'http:' ? 'http:' : 'https:'\n}//frontlo-collection.91jkys.com/f2e/log.gif`;\n\nexport const BEAT_SERVER_URL = `${\n window.location.protocol === 'http:' ? 'http:' : 'https:'\n}//frontlo-collection.91jkys.com/beat.gif`;\n\nexport const DURATION_SERVER_URL = `${\n window.location.protocol === 'http:' ? 'http:' : 'https:'\n}//frontlo-collection.91jkys.com/duration.gif`;\n\nexport const CUSTOM_TOKEN_KEY = 'TRYCATCH_TOKEN';\n\nexport const SEND_TYPE = {\n SYNC: 'SYNC',\n ASYNC: 'ASYNC',\n UNLOAD: 'UNLOAD'\n};\n\nexport const ENVIRONMENT = {\n PRODUCTION: 'production',\n DEVELOPMENT: 'development'\n};\n\nexport const ACTION_TYPE = {\n EVENT: 'EVENT',\n PAGE: 'PAGE',\n AUTO_EVENT: 'AUTO_EVENT',\n AUTO_PAGE: 'AUTO_PAGE',\n VIEW: 'VIEW',\n DURATION: 'DURATION',\n VIEW_DURATION: 'VIEW_DURATION'\n};\n\nexport const DATA_KEY = {\n trackId: 'trackId'\n};\n\nexport const SAFETY_KEY = [\n 'version',\n 'custom',\n 'title',\n 'actionType',\n 'eventName',\n 'pageId',\n 'domId',\n 'domClass',\n 'domHref',\n 'domName',\n 'domTag',\n 'domContent',\n 'domPath',\n 'trackId',\n 'referrerId',\n 'score',\n 'startTime',\n 'endTime',\n 'durationTime',\n 'channel',\n 'netType',\n 'debug',\n 'seKeywords',\n 'bizId',\n 'isAutoTrack',\n 'autoTrackId',\n //\n 'contentId',\n 'patientId',\n 'doctorId',\n 'skuId',\n 'prescriptionId',\n 'storeId',\n 'inquiryId',\n 'orderId',\n 'activityId',\n 'supportedAbi'\n];\n","import {\n CUSTOM_TOKEN_KEY,\n DEBUG_SERVER_URL,\n SERVER_URL,\n BEAT_SERVER_URL,\n DURATION_SERVER_URL\n} from './../constant/index';\n\nimport { SEND_TYPE } from '../constant';\n// import Base64 from '../utils/base64';\n// import { getGlobal } from 'src/utils/util';\n\nexport interface IConfig {\n trackKey: string;\n serverUrl: string;\n debugServerUrl: string;\n beatServerUrl: string;\n durationServerUrl: string;\n version: string;\n offlineUrl: string;\n sendType: string;\n delayTime: number;\n autoTrackPage: boolean;\n autoTrackClick: boolean;\n autoInstall: boolean;\n delayLink: boolean;\n delayLinkTime: number;\n deviceIdKey: string;\n beforeGenerateLog: Function | null;\n routeChangeAfter: Function | null;\n autoTrackPrefix: string;\n localGenerateDeviceId: boolean;\n sendBeat: boolean;\n}\n\nconst ua = window.navigator.userAgent;\nconst protocol = window.location.protocol === 'http:' ? 'http:' : 'https:';\nconst host = window.location.host;\nlet defaultUrl = {};\n//跟进host 判断环境\nif (/(pre|qa|127|192)\\.|localhost/.test(host) || (/env\\((pre|qa)\\)/i.test(ua) && !host)) {\n defaultUrl = {\n serverUrl: `${protocol}//frontlo-collection.qa.91jkys.com/log_h5.gif`,\n debugServerUrl: `${protocol}//frontlo-collection.qa.91jkys.com/f2e/log.gif`,\n beatServerUrl: `${protocol}//frontlo-collection.qa.91jkys.com/beat.gif`,\n durationServerUrl: `${protocol}//frontlo-collection.qa.91jkys.com/duration.gif`\n };\n} else if (/zyhealth\\.com/.test(host)) {\n defaultUrl = {\n serverUrl: `${protocol}//frontlo-collection.zyhealth.com/log_h5.gif`,\n debugServerUrl: `${protocol}//frontlo-collection.zyhealth.com/f2e/log.gif`,\n beatServerUrl: `${protocol}//frontlo-collection.zyhealth.com/beat.gif`,\n durationServerUrl: `${protocol}//frontlo-collection.zyhealth.com/duration.gif`\n };\n} else if (/dia-solution\\.com/.test(host)) {\n defaultUrl = {\n serverUrl: `${protocol}//frontlo-collection.dia-solution.com/log_h5.gif`,\n debugServerUrl: `${protocol}//frontlo-collection.dia-solution.com/f2e/log.gif`,\n beatServerUrl: `${protocol}//frontlo-collection.dia-solution.com/beat.gif`,\n durationServerUrl: `${protocol}//frontlo-collection.dia-solution.com/duration.gif`\n };\n} else if (/c4-91jkys\\.com/.test(host)) {\n defaultUrl = {\n serverUrl: `${protocol}//frontlo-collection.c4-91jkys.com/log_h5.gif`,\n debugServerUrl: `${protocol}//frontlo-collection.c4-91jkys.com/f2e/log.gif`,\n beatServerUrl: `${protocol}//frontlo-collection.c4-91jkys.com/beat.gif`,\n durationServerUrl: `${protocol}//frontlo-collection.c4-91jkys.com/duration.gif`\n };\n} else if (/c10-91jkys\\.com/.test(host)) {\n defaultUrl = {\n serverUrl: `${protocol}//frontlo-collection.c10-91jkys.com/log_h5.gif`,\n debugServerUrl: `${protocol}//frontlo-collection.c10-91jkys.com/f2e/log.gif`,\n beatServerUrl: `${protocol}//frontlo-collection.c10-91jkys.com/beat.gif`,\n durationServerUrl: `${protocol}//frontlo-collection.c10-91jkys.com/duration.gif`\n };\n}\n\n//default config\nlet config: IConfig = {\n trackKey: '1f003e7e36e93a0f3954aa466b8acfcf079f3b59d55c258e64113befe292e451', //日志验证\n version: null,\n offlineUrl: '', // 离线带参数url\n sendType: SEND_TYPE.ASYNC, //发送日志方式 (同步发,异步延迟发,关闭浏览器前发送)\n delayTime: 300, //延迟发送的时间\n autoTrackPage: true, //自动埋点页面\n autoTrackClick: true, //自动埋点a,button,input,attr==='role',e.target\n autoInstall: true, //自动开始埋点监控\n delayLink: false, //跳转延迟\n delayLinkTime: 300,\n deviceIdKey: CUSTOM_TOKEN_KEY,\n beforeGenerateLog: null,\n autoTrackPrefix: '',\n localGenerateDeviceId: true,\n routeChangeAfter: null,\n sendBeat: false,\n\n serverUrl: SERVER_URL,\n debugServerUrl: DEBUG_SERVER_URL,\n beatServerUrl: BEAT_SERVER_URL,\n durationServerUrl: DURATION_SERVER_URL,\n ...defaultUrl\n};\n\n//script tracker-key config\nlet scriptDom = document.querySelector('script[track-key]') || document.querySelector('script[trackKey]');\nif (scriptDom) {\n let trackKey = scriptDom.getAttribute('track-key') || scriptDom.getAttribute('trackKey') || '';\n if (trackKey) {\n config.trackKey = trackKey;\n }\n let autoTrackPrefix = scriptDom.getAttribute('auto-track-prefix');\n if (autoTrackPrefix) {\n config.autoTrackPrefix = autoTrackPrefix;\n }else if(!config.autoTrackPrefix&&config.trackKey){\n config.autoTrackPrefix=`zhiyun-${config.trackKey.replace(/\\d/g,'').substring(0,6)}`\n }\n}\n\nexport function getConfig() {\n if(!config.version&&typeof (window as any).version === 'string'){\n config.version=(window as any).version;\n }\n return config;\n}\n\nexport function setConfig(data: Partial) {\n config = { ...config, ...data };\n if(!config.autoTrackPrefix&&config.trackKey){\n config.autoTrackPrefix=`zhiyun-${config.trackKey.replace(/\\d/g,'').substring(0,6)}`\n }\n}\n","function _isPlaceholder(a) {\n return a != null && typeof a === 'object' && a['@@functional/placeholder'] === true;\n}\n\nmodule.exports = _isPlaceholder;","var _isPlaceholder =\n/*#__PURE__*/\nrequire(\"./_isPlaceholder\");\n/**\n * Optimized internal one-arity curry function.\n *\n * @private\n * @category Function\n * @param {Function} fn The function to curry.\n * @return {Function} The curried function.\n */\n\n\nfunction _curry1(fn) {\n return function f1(a) {\n if (arguments.length === 0 || _isPlaceholder(a)) {\n return f1;\n } else {\n return fn.apply(this, arguments);\n }\n };\n}\n\nmodule.exports = _curry1;","var _curry1 =\n/*#__PURE__*/\nrequire(\"./_curry1\");\n\nvar _isPlaceholder =\n/*#__PURE__*/\nrequire(\"./_isPlaceholder\");\n/**\n * Optimized internal two-arity curry function.\n *\n * @private\n * @category Function\n * @param {Function} fn The function to curry.\n * @return {Function} The curried function.\n */\n\n\nfunction _curry2(fn) {\n return function f2(a, b) {\n switch (arguments.length) {\n case 0:\n return f2;\n\n case 1:\n return _isPlaceholder(a) ? f2 : _curry1(function (_b) {\n return fn(a, _b);\n });\n\n default:\n return _isPlaceholder(a) && _isPlaceholder(b) ? f2 : _isPlaceholder(a) ? _curry1(function (_a) {\n return fn(_a, b);\n }) : _isPlaceholder(b) ? _curry1(function (_b) {\n return fn(a, _b);\n }) : fn(a, b);\n }\n };\n}\n\nmodule.exports = _curry2;","function _arrayFromIterator(iter) {\n var list = [];\n var next;\n\n while (!(next = iter.next()).done) {\n list.push(next.value);\n }\n\n return list;\n}\n\nmodule.exports = _arrayFromIterator;","function _includesWith(pred, x, list) {\n var idx = 0;\n var len = list.length;\n\n while (idx < len) {\n if (pred(x, list[idx])) {\n return true;\n }\n\n idx += 1;\n }\n\n return false;\n}\n\nmodule.exports = _includesWith;","function _functionName(f) {\n // String(x => x) evaluates to \"x => x\", so the pattern may not match.\n var match = String(f).match(/^function (\\w*)/);\n return match == null ? '' : match[1];\n}\n\nmodule.exports = _functionName;","function _has(prop, obj) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nmodule.exports = _has;","// Based on https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\nfunction _objectIs(a, b) {\n // SameValue algorithm\n if (a === b) {\n // Steps 1-5, 7-10\n // Steps 6.b-6.e: +0 != -0\n return a !== 0 || 1 / a === 1 / b;\n } else {\n // Step 6.a: NaN == NaN\n return a !== a && b !== b;\n }\n}\n\nmodule.exports = typeof Object.is === 'function' ? Object.is : _objectIs;","var _has =\n/*#__PURE__*/\nrequire(\"./_has\");\n\nvar toString = Object.prototype.toString;\n\nvar _isArguments =\n/*#__PURE__*/\nfunction () {\n return toString.call(arguments) === '[object Arguments]' ? function _isArguments(x) {\n return toString.call(x) === '[object Arguments]';\n } : function _isArguments(x) {\n return _has('callee', x);\n };\n}();\n\nmodule.exports = _isArguments;","var _curry1 =\n/*#__PURE__*/\nrequire(\"./internal/_curry1\");\n\nvar _has =\n/*#__PURE__*/\nrequire(\"./internal/_has\");\n\nvar _isArguments =\n/*#__PURE__*/\nrequire(\"./internal/_isArguments\"); // cover IE < 9 keys issues\n\n\nvar hasEnumBug = !\n/*#__PURE__*/\n{\n toString: null\n}.propertyIsEnumerable('toString');\nvar nonEnumerableProps = ['constructor', 'valueOf', 'isPrototypeOf', 'toString', 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString']; // Safari bug\n\nvar hasArgsEnumBug =\n/*#__PURE__*/\nfunction () {\n 'use strict';\n\n return arguments.propertyIsEnumerable('length');\n}();\n\nvar contains = function contains(list, item) {\n var idx = 0;\n\n while (idx < list.length) {\n if (list[idx] === item) {\n return true;\n }\n\n idx += 1;\n }\n\n return false;\n};\n/**\n * Returns a list containing the names of all the enumerable own properties of\n * the supplied object.\n * Note that the order of the output array is not guaranteed to be consistent\n * across different JS platforms.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category Object\n * @sig {k: v} -> [k]\n * @param {Object} obj The object to extract properties from\n * @return {Array} An array of the object's own properties.\n * @see R.keysIn, R.values\n * @example\n *\n * R.keys({a: 1, b: 2, c: 3}); //=> ['a', 'b', 'c']\n */\n\n\nvar keys = typeof Object.keys === 'function' && !hasArgsEnumBug ?\n/*#__PURE__*/\n_curry1(function keys(obj) {\n return Object(obj) !== obj ? [] : Object.keys(obj);\n}) :\n/*#__PURE__*/\n_curry1(function keys(obj) {\n if (Object(obj) !== obj) {\n return [];\n }\n\n var prop, nIdx;\n var ks = [];\n\n var checkArgsLength = hasArgsEnumBug && _isArguments(obj);\n\n for (prop in obj) {\n if (_has(prop, obj) && (!checkArgsLength || prop !== 'length')) {\n ks[ks.length] = prop;\n }\n }\n\n if (hasEnumBug) {\n nIdx = nonEnumerableProps.length - 1;\n\n while (nIdx >= 0) {\n prop = nonEnumerableProps[nIdx];\n\n if (_has(prop, obj) && !contains(ks, prop)) {\n ks[ks.length] = prop;\n }\n\n nIdx -= 1;\n }\n }\n\n return ks;\n});\nmodule.exports = keys;","var _curry1 =\n/*#__PURE__*/\nrequire(\"./internal/_curry1\");\n/**\n * Gives a single-word string description of the (native) type of a value,\n * returning such answers as 'Object', 'Number', 'Array', or 'Null'. Does not\n * attempt to distinguish user Object types any further, reporting them all as\n * 'Object'.\n *\n * @func\n * @memberOf R\n * @since v0.8.0\n * @category Type\n * @sig (* -> {*}) -> String\n * @param {*} val The value to test\n * @return {String}\n * @example\n *\n * R.type({}); //=> \"Object\"\n * R.type(1); //=> \"Number\"\n * R.type(false); //=> \"Boolean\"\n * R.type('s'); //=> \"String\"\n * R.type(null); //=> \"Null\"\n * R.type([]); //=> \"Array\"\n * R.type(/[A-z]/); //=> \"RegExp\"\n * R.type(() => {}); //=> \"Function\"\n * R.type(undefined); //=> \"Undefined\"\n */\n\n\nvar type =\n/*#__PURE__*/\n_curry1(function type(val) {\n return val === null ? 'Null' : val === undefined ? 'Undefined' : Object.prototype.toString.call(val).slice(8, -1);\n});\n\nmodule.exports = type;","var _arrayFromIterator =\n/*#__PURE__*/\nrequire(\"./_arrayFromIterator\");\n\nvar _includesWith =\n/*#__PURE__*/\nrequire(\"./_includesWith\");\n\nvar _functionName =\n/*#__PURE__*/\nrequire(\"./_functionName\");\n\nvar _has =\n/*#__PURE__*/\nrequire(\"./_has\");\n\nvar _objectIs =\n/*#__PURE__*/\nrequire(\"./_objectIs\");\n\nvar keys =\n/*#__PURE__*/\nrequire(\"../keys\");\n\nvar type =\n/*#__PURE__*/\nrequire(\"../type\");\n/**\n * private _uniqContentEquals function.\n * That function is checking equality of 2 iterator contents with 2 assumptions\n * - iterators lengths are the same\n * - iterators values are unique\n *\n * false-positive result will be returned for comparision of, e.g.\n * - [1,2,3] and [1,2,3,4]\n * - [1,1,1] and [1,2,3]\n * */\n\n\nfunction _uniqContentEquals(aIterator, bIterator, stackA, stackB) {\n var a = _arrayFromIterator(aIterator);\n\n var b = _arrayFromIterator(bIterator);\n\n function eq(_a, _b) {\n return _equals(_a, _b, stackA.slice(), stackB.slice());\n } // if *a* array contains any element that is not included in *b*\n\n\n return !_includesWith(function (b, aItem) {\n return !_includesWith(eq, aItem, b);\n }, b, a);\n}\n\nfunction _equals(a, b, stackA, stackB) {\n if (_objectIs(a, b)) {\n return true;\n }\n\n var typeA = type(a);\n\n if (typeA !== type(b)) {\n return false;\n }\n\n if (a == null || b == null) {\n return false;\n }\n\n if (typeof a['fantasy-land/equals'] === 'function' || typeof b['fantasy-land/equals'] === 'function') {\n return typeof a['fantasy-land/equals'] === 'function' && a['fantasy-land/equals'](b) && typeof b['fantasy-land/equals'] === 'function' && b['fantasy-land/equals'](a);\n }\n\n if (typeof a.equals === 'function' || typeof b.equals === 'function') {\n return typeof a.equals === 'function' && a.equals(b) && typeof b.equals === 'function' && b.equals(a);\n }\n\n switch (typeA) {\n case 'Arguments':\n case 'Array':\n case 'Object':\n if (typeof a.constructor === 'function' && _functionName(a.constructor) === 'Promise') {\n return a === b;\n }\n\n break;\n\n case 'Boolean':\n case 'Number':\n case 'String':\n if (!(typeof a === typeof b && _objectIs(a.valueOf(), b.valueOf()))) {\n return false;\n }\n\n break;\n\n case 'Date':\n if (!_objectIs(a.valueOf(), b.valueOf())) {\n return false;\n }\n\n break;\n\n case 'Error':\n return a.name === b.name && a.message === b.message;\n\n case 'RegExp':\n if (!(a.source === b.source && a.global === b.global && a.ignoreCase === b.ignoreCase && a.multiline === b.multiline && a.sticky === b.sticky && a.unicode === b.unicode)) {\n return false;\n }\n\n break;\n }\n\n var idx = stackA.length - 1;\n\n while (idx >= 0) {\n if (stackA[idx] === a) {\n return stackB[idx] === b;\n }\n\n idx -= 1;\n }\n\n switch (typeA) {\n case 'Map':\n if (a.size !== b.size) {\n return false;\n }\n\n return _uniqContentEquals(a.entries(), b.entries(), stackA.concat([a]), stackB.concat([b]));\n\n case 'Set':\n if (a.size !== b.size) {\n return false;\n }\n\n return _uniqContentEquals(a.values(), b.values(), stackA.concat([a]), stackB.concat([b]));\n\n case 'Arguments':\n case 'Array':\n case 'Object':\n case 'Boolean':\n case 'Number':\n case 'String':\n case 'Date':\n case 'Error':\n case 'RegExp':\n case 'Int8Array':\n case 'Uint8Array':\n case 'Uint8ClampedArray':\n case 'Int16Array':\n case 'Uint16Array':\n case 'Int32Array':\n case 'Uint32Array':\n case 'Float32Array':\n case 'Float64Array':\n case 'ArrayBuffer':\n break;\n\n default:\n // Values of other types are only equal if identical.\n return false;\n }\n\n var keysA = keys(a);\n\n if (keysA.length !== keys(b).length) {\n return false;\n }\n\n var extendedStackA = stackA.concat([a]);\n var extendedStackB = stackB.concat([b]);\n idx = keysA.length - 1;\n\n while (idx >= 0) {\n var key = keysA[idx];\n\n if (!(_has(key, b) && _equals(b[key], a[key], extendedStackA, extendedStackB))) {\n return false;\n }\n\n idx -= 1;\n }\n\n return true;\n}\n\nmodule.exports = _equals;","var _curry2 =\n/*#__PURE__*/\nrequire(\"./internal/_curry2\");\n\nvar _equals =\n/*#__PURE__*/\nrequire(\"./internal/_equals\");\n/**\n * Returns `true` if its arguments are equivalent, `false` otherwise. Handles\n * cyclical data structures.\n *\n * Dispatches symmetrically to the `equals` methods of both arguments, if\n * present.\n *\n * @func\n * @memberOf R\n * @since v0.15.0\n * @category Relation\n * @sig a -> b -> Boolean\n * @param {*} a\n * @param {*} b\n * @return {Boolean}\n * @example\n *\n * R.equals(1, 1); //=> true\n * R.equals(1, '1'); //=> false\n * R.equals([1, 2, 3], [1, 2, 3]); //=> true\n *\n * const a = {}; a.v = a;\n * const b = {}; b.v = b;\n * R.equals(a, b); //=> true\n */\n\n\nvar equals =\n/*#__PURE__*/\n_curry2(function equals(a, b) {\n return _equals(a, b, [], []);\n});\n\nmodule.exports = equals;","import equals from 'ramda/src/equals';\n\n/**\n *判断promise\n *\n * @export\n * @param {*} f\n * @returns\n */\nexport function isThenable(f: any) {\n return f && typeof f.then === 'function';\n}\n\n/**\n *获取url参数 兼容微信支付 window.location.search改成window.location.href\n *\n * @export\n * @param {string} variable\n * @returns\n */\nexport function getQueryVariable(variable: string) {\n var query = window.location.href.match(/\\?(.*)$/);\n if (!query) return null;\n var vars = query[1].split('&');\n for (var i = 0; i < vars.length; i++) {\n var pair = vars[i].split('=');\n if (pair[0] == variable) {\n return pair[1];\n }\n }\n return null;\n}\n\n/**\n *获取cookie\n *\n * @export\n * @param {string} name\n * @returns\n */\nexport function getCookie(name: string) {\n let cookies = document.cookie.split(';');\n\n for (let i in cookies) {\n let arr = cookies[i].split('=');\n if (name == arr[0].trim()) {\n return unescape(arr[1]).replace(/&&&&/g, ';');\n }\n }\n return null;\n}\n\n/**\n *设置cookie\n *\n * @export\n * @param {string} name\n * @param {string} value\n * @param {number} [expires=99999]\n * @param {string} [path='/']\n * @param {string} [domain]\n */\nexport function setCookie(name: string, value: string, expires: number = 99999, path: string = '/', domain?: string) {\n document.cookie =\n name +\n '=' +\n value.replace(/;/g, '&&&&') +\n (expires ? '; expires=' + getExpires(expires) : '') +\n (path ? '; path=' + path : '') +\n ('; domain=' + (domain ? domain : '.' + location.host.replace(/.*\\.(.*\\..*)$/, '$1')));\n\n function getExpires(hours: number) {\n let date = new Date();\n date.setTime(date.getTime() + hours * 60 * 60 * 1000);\n return date.toUTCString();\n }\n}\n\n/**\n *\n *\n * @export\n * @param {*} binding\n * @returns\n */\nexport function notChanged(binding: any) {\n if (binding.oldValue !== undefined) {\n if (typeof binding.value === 'object') {\n return equals(binding.value, binding.oldValue);\n } else {\n return binding.value === binding.oldValue;\n }\n } else {\n return false;\n }\n}\n\n/**\n * if the binding value is empty\n */\nexport function isEmpty(binding: any) {\n return binding.value === '' || binding.value === undefined || binding.value === null;\n}\n\nexport function setFlag(key: string, value = true) {\n if (typeof _TrackerGlobalData === 'undefined') {\n window._TrackerGlobalData = {};\n }\n _TrackerGlobalData._trackerFlag = _TrackerGlobalData._trackerFlag || {};\n _TrackerGlobalData._trackerFlag[key] = value;\n}\n\nexport function getFlag(key: string) {\n if (typeof _TrackerGlobalData === 'undefined') {\n window._TrackerGlobalData = {};\n }\n _TrackerGlobalData._trackerFlag = _TrackerGlobalData._trackerFlag || {};\n return _TrackerGlobalData._trackerFlag[key] || false;\n}\n\nexport function getUUID() {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n var r = (Math.random() * 16) | 0,\n v = c == 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n}\n\n/**\n *获取dom path\n *\n * @export\n * @param {HTMLElement} dom\n * @returns\n */\nexport function getDomPath(dom: HTMLElement) {\n // let path = [dom.id ? '#' + dom.id : dom.tagName.toLowerCase()];\n let path = [];\n if (dom.id && typeof dom.id === 'string') {\n path.push('#' + dom.id);\n } else if (dom.className && typeof dom.className === 'string') {\n path.push('.' + dom.className.split(' ')[0]);\n } else {\n path.push(dom.tagName.toLowerCase());\n }\n while (\n dom.parentNode &&\n (dom.parentNode as HTMLElement).tagName &&\n (dom.parentNode as HTMLElement).tagName !== 'BODY' &&\n !dom.id\n ) {\n dom = dom.parentNode as HTMLElement;\n if (dom.id && typeof dom.id === 'string') {\n path.unshift('#' + dom.id);\n } else if (dom.className && typeof dom.className === 'string') {\n path.unshift('.' + dom.className.split(' ')[0]);\n } else {\n path.unshift(dom.tagName.toLowerCase());\n }\n }\n return path.join('>');\n}\n\nexport function noop() {}\n\nexport function isString(value: any) {\n return Object.prototype.toString.call(value) === '[object String]';\n}\n\nexport function getLocationHref() {\n if (typeof document === 'undefined' || document.location == null) return '';\n\n return document.location.href;\n}\n\nexport function oneOf(one: any, all: any[]) {\n for (let i in all) {\n if (one === all[i]) {\n return true;\n }\n }\n return false;\n}\n\nexport function getGlobal() {\n return typeof window !== 'undefined' ? window : global;\n}\n\nexport function isArray(o: any) {\n return Object.prototype.toString.call(o) === '[object Array]';\n}\n\nexport function isObject(o: any) {\n return Object.prototype.toString.call(o) === '[object Object]';\n}\n\nexport function hashCode(str: string): string {\n let hash = 0;\n if (!str || str.length === 0) {\n return '';\n }\n for (let i = 0; i < str.length; i++) {\n const char = str.charCodeAt(i);\n hash = (hash << 5) - hash + char;\n hash = hash & hash;\n }\n\n return String(hash).replace('-', '0');\n}\n\nexport function getRealPath(url: string, offlineUrl: string) {\n if (/file:/.test(url) && offlineUrl) {\n url = offlineUrl + url.replace(/^.*(#.*)$/, '$1');\n }\n\n return url\n .replace('https', 'http')\n .replace(/\\?.*$/, '')\n .replace(/\\/\\d+([\\/]*$)/, '{param}$1')\n .replace(/index\\.html/, '')\n .replace(/www\\./, '')\n .trim();\n}\n\nexport const inMin = /miniprogram/i.test(window.navigator.userAgent);\n\nexport const inWechat = !inMin && /micromessenger/i.test(window.navigator.userAgent);\n\n\n\nexport function pause(milliseconds:number) {\n return new Promise(resolve => setTimeout(resolve, milliseconds));\n}","import { getConfig } from 'src/core/config';\nimport { getCookie, getQueryVariable, inMin, setCookie, inWechat, getUUID } from './../utils/util';\n\nfunction getDeviceId() {\n const config = getConfig();\n let deviceId =\n getCookie(config.deviceIdKey) ||\n localStorage.getItem(config.deviceIdKey) ||\n (config.localGenerateDeviceId ? getUUID() : null);\n if (deviceId) {\n saveDeviceId(deviceId);\n }\n return deviceId;\n}\n\nfunction saveDeviceId(deviceId: string) {\n const config = getConfig();\n setCookie(config.deviceIdKey, deviceId);\n localStorage.setItem(config.deviceIdKey, deviceId);\n}\n\nexport interface IClientInfo {\n clientWidth: number;\n clientHeight: number;\n radio: number;\n domain: string;\n appId: string;\n appVersion: string;\n appType: string;\n marketId?: string;\n sessionId: string;\n channel?: string;\n deviceId?: string;\n}\n\nlet clientInfo: IClientInfo = {\n clientWidth: window.screen.height,\n clientHeight: window.screen.width,\n radio: window.devicePixelRatio || 1,\n domain: document.domain || '',\n appId: 'H5',\n appVersion: null,\n appType: 'H5',\n marketId: null,\n sessionId: getUUID(),\n channel: null,\n deviceId: getDeviceId()\n};\n\nconst ua = window.navigator.userAgent;\n//获取客户端deviceId\nif (/DeviceId/i.test(ua)) {\n const deviceIdMatch = ua.match(/DeviceId\\((.*?)\\)/);\n if (deviceIdMatch && deviceIdMatch.length >= 2) {\n clientInfo.deviceId = deviceIdMatch[1];\n }\n}\n\n//获取appID 和app版本\nif (/AppInfo/i.test(ua)) {\n const AppInfoMatch = ua.match(/AppInfo\\((.*?);(.*?)\\)/);\n if (AppInfoMatch && AppInfoMatch.length >= 3) {\n (clientInfo.appId = AppInfoMatch[1]), (clientInfo.appVersion = AppInfoMatch[2]), (clientInfo.appType = 'APP');\n }\n}\n\nexport const setClientInfo = (info: Partial) => {\n let urlInfo: Partial = {};\n\n //小程序参数带入\n let urlInfoStr = getQueryVariable('telescope-info');\n if (urlInfoStr) {\n try {\n urlInfo = JSON.parse(decodeURIComponent(urlInfoStr));\n } catch (error) {}\n }\n\n // 本地 缓存\n let cookieInfoStr = window.localStorage.getItem('TELESCOPE_CACHE_INFO');\n let cookieInfo: Partial & { expired?: number } = {};\n if (cookieInfoStr) {\n try {\n cookieInfo = JSON.parse(cookieInfoStr);\n } catch (error) {}\n }\n\n if (cookieInfo.expired && cookieInfo.expired < Date.now()) {\n // 30分钟过期\n cookieInfo.channel = null;\n cookieInfo.sessionId = getUUID();\n }\n delete cookieInfo.expired;\n\n const channel = getQueryVariable('channel') || urlInfo.channel || cookieInfo.channel || null;\n clientInfo = {\n ...clientInfo,\n ...cookieInfo,\n ...urlInfo,\n channel,\n ...info\n };\n\n if (inMin) {\n clientInfo.appType = 'MINI';\n } else if (inWechat) {\n clientInfo.appId = 'wechat';\n clientInfo.appType = 'WECHAT';\n }\n // 兼容小程序ua不准 没法判断是否是小程序\n if (/_mini_/.test(clientInfo.appId)) {\n clientInfo.appType = 'MINI';\n }\n\n //传入deviceId 则覆盖本地deviceId缓存\n if (clientInfo.deviceId) {\n saveDeviceId(clientInfo.deviceId);\n }\n\n const cacheStr = JSON.stringify({\n appId: clientInfo.appId,\n appVersion: clientInfo.appVersion,\n marketId: clientInfo.marketId,\n channel: clientInfo.channel,\n sessionId: clientInfo.sessionId,\n deviceId: clientInfo.deviceId,\n expired: Date.now() + 30 * 60 * 1000\n });\n\n window.localStorage.setItem('TELESCOPE_CACHE_INFO', cacheStr);\n};\n\nexport const getClientInfo = () => {\n setClientInfo({});\n return { ...clientInfo };\n};\n","import { ACTION_TYPE } from './../constant/index';\nimport { getQueryVariable } from 'src/utils/util';\n\nexport interface IPageInfo {\n pageId?: string;\n url: string;\n title: string;\n host: string;\n path: string;\n hash: string;\n}\n\n// export const getReferrerId = () => {\n// let urlInfoStr = getQueryVariable('telescope-info');\n\n// let urlInfo = {} as {\n// referrerId: string;\n// };\n// if (urlInfoStr) {\n// try {\n// urlInfo = JSON.parse(decodeURIComponent(urlInfoStr));\n// return urlInfo.referrerId;\n// } catch (error) {}\n// }\n\n// try {\n// let referrerId = getQueryVariable('referrer_id');\n// if (referrerId) {\n// return referrerId;\n// } else {\n// const referrerInfo = JSON.parse(localStorage.getItem('referrer_id'));\n// return referrerInfo ? referrerInfo.referrerId : null;\n// }\n// } catch (error) {\n// return null;\n// }\n// };\n\n// export const setReferrerId = (type: 'BEAT' | 'UPDATE') => {\n// try {\n// const pageInfo = getPageInfo();\n// let referrerInfo: {\n// pageId: string;\n// referrerId: string;\n// date: number;\n// } = JSON.parse(localStorage.getItem('referrer_id')) || {\n// pageId: pageInfo.pageId,\n// referrerId: '',\n// date: Date.now()\n// };\n\n// switch (type) {\n// case 'UPDATE': //置空\n// referrerInfo.date = Date.now();\n// referrerInfo.referrerId = referrerInfo.date + 5000 > Date.now() ? referrerInfo.pageId : '';\n// referrerInfo.pageId = '';\n\n// break;\n// case 'BEAT': //\n// referrerInfo.pageId = pageInfo.pageId;\n// referrerInfo.date = Date.now();\n// break;\n// }\n// localStorage.setItem('referrer_id', JSON.stringify(referrerInfo));\n// setPageInfo({});\n// } catch (error) {}\n// };\n\n// export const getSourceEventId = () => {\n// let urlInfoStr = getQueryVariable('telescope-info');\n\n// let urlInfo = {} as {\n// sourceEventId: string;\n// };\n// if (urlInfoStr) {\n// try {\n// urlInfo = JSON.parse(decodeURIComponent(urlInfoStr));\n// return urlInfo.sourceEventId;\n// } catch (error) {}\n// }\n\n// try {\n// const sourceEventInfo = JSON.parse(localStorage.getItem('source_event_id'));\n// if (sourceEventInfo.date + 5000 > Date.now()) {\n// return sourceEventInfo.sourceEventId;\n// }\n// return null;\n// } catch (e) {\n// return null;\n// }\n// };\n\n// export const setSourceEventId = (type: 'RECORD' | 'UPDATE', data?: any) => {\n// let preSourceEventInfo: {\n// date: number;\n// recentId: string;\n// sourceEventId: string;\n// isAutoTrack: boolean;\n// url: string;\n// } = null;\n\n// try {\n// preSourceEventInfo = JSON.parse(localStorage.getItem('source_event_id'));\n\n// switch (type) {\n// case 'UPDATE': //置空\n// preSourceEventInfo = {\n// sourceEventId:\n// preSourceEventInfo && preSourceEventInfo.date + 5000 > Date.now() ? preSourceEventInfo.recentId : '',\n// recentId: (preSourceEventInfo && preSourceEventInfo.recentId) || '',\n// date: Date.now(),\n\n// isAutoTrack: false,\n// url: location.href\n// };\n// localStorage.setItem('source_event_id', JSON.stringify(preSourceEventInfo));\n\n// break;\n// case 'RECORD': //记录\n// if (data && data.actionType === ACTION_TYPE.EVENT && !data.debug) {\n// if (!preSourceEventInfo || preSourceEventInfo.isAutoTrack || preSourceEventInfo.date < Date.now() - 500) {\n// localStorage.setItem(\n// 'source_event_id',\n// JSON.stringify({\n// date: Date.now(),\n// isAutoTrack: data.isAutoTrack,\n// url: location.href,\n// sourceEventId: preSourceEventInfo ? preSourceEventInfo.sourceEventId : '',\n// recentId: data.trackId\n// })\n// );\n// }\n// }\n// break;\n// }\n// setPageInfo({});\n// } catch (error) {}\n// };\n\nlet pageInfo: IPageInfo = {\n pageId: null,\n // referrerId: getReferrerId(),\n // sourceEventId: getSourceEventId(),\n // referrerUrl: document.referrer || '',\n url: location.href,\n host: location.host,\n path: location.pathname,\n hash: location.hash,\n title: document.title || ''\n};\n\nexport const setPageInfo = (info: Partial) => {\n // if (info.sourceEventId) {\n // localStorage.setItem(\n // 'source_event_id',\n // JSON.stringify({\n // date: Date.now(),\n // isAutoTrack: false,\n // url: '',\n // sourceEventId: info.sourceEventId,\n // recentId: info.sourceEventId\n // })\n // );\n // }\n // if (info.referrerId) {\n // localStorage.setItem(\n // 'referrer_id',\n // JSON.stringify({\n // pageId: info.referrerId,\n // referrerId: info.referrerId,\n // date: Date.now()\n // })\n // );\n // }\n pageInfo = {\n ...pageInfo,\n url: location.href,\n host: location.host,\n path: location.pathname,\n hash: location.hash,\n title: document.title || '',\n ...info\n };\n};\n\nexport const getPageInfo = () => {\n setPageInfo({});\n return { ...pageInfo };\n};\n","import Base64 from './base64';\nimport { getConfig } from 'src/core/config';\n\nexport default function http(data: string, url?: string, cb = () => {}) {\n const dataStr = data;\n const config = getConfig();\n\n url = `${url || config.serverUrl}?${\n config.trackKey ? `trackKey=${config.trackKey}&k=${config.trackKey}&` : 'deb=true&'\n }time=${Date.now()}`;\n\n //使用sendBeacon 出现重复提交\n if (\n window.location.protocol === 'https:' &&\n typeof window.navigator.sendBeacon === 'function' &&\n typeof Blob === 'function'\n ) {\n const headers = {\n type: 'text/plain; charset=UTF-8'\n };\n const blob = new Blob([dataStr], headers);\n const success = window.navigator.sendBeacon(url, blob);\n if (success) {\n cb();\n return;\n }\n }\n\n if (dataStr.length > 2000) {\n const xhr = new XMLHttpRequest();\n xhr.withCredentials = true;\n xhr.addEventListener('readystatechange', function () {\n if (this.readyState === 4) {\n cb();\n }\n });\n xhr.open('POST', url, true);\n xhr.setRequestHeader('Content-Type', 'text/plain;charset=UTF-8');\n xhr.withCredentials = true;\n xhr.send(dataStr);\n } else {\n const img: HTMLImageElement = new Image();\n img.onload = () => {\n cb();\n };\n img.src = `${url}&data=${encodeURIComponent(dataStr)}`;\n }\n}\n","export default {\n libVersion: '3.2.1',\n libType: 'js'\n};\n","import { IPageInfo } from './pageInfo';\n\nimport { ACTION_TYPE } from '../constant';\nimport { IConfig } from './config';\n\nimport { ITrackerData } from 'src/types';\nimport { getUUID, hashCode } from 'src/utils/util';\n\ninterface ILogDataDataItem extends ITrackerData, IPageInfo {\n trackTime: number;\n startTime?: number;\n id: string;\n trackId?: string;\n}\nclass DurationTime {\n static instance: DurationTime = null;\n startTime = Date.now();\n endTime = Date.now();\n config: IConfig = null;\n timeMap: { [prop: string]: any } = {};\n\n static getInstance() {\n if (!DurationTime.instance) {\n DurationTime.instance = new DurationTime();\n }\n return DurationTime.instance;\n }\n\n start(info: ILogDataDataItem) {\n if (!info.trackId || this.timeMap[info.trackId]) {\n return;\n }\n this.timeMap[info.trackId + hashCode(JSON.stringify(info.custom))] = {\n startTime: Date.now(),\n ...info\n };\n }\n\n beat(key?: string | ILogDataDataItem) {\n let logs: any[] = [];\n if (key) {\n if (typeof key !== 'string') {\n key = key.trackId + hashCode(JSON.stringify(key.custom));\n }\n if (this.timeMap[key]) {\n logs.push({\n id: this.timeMap[key].id,\n durationTime: Date.now() - this.timeMap[key].startTime\n });\n }\n\n return logs;\n }\n for (let key in this.timeMap) {\n if (!this.timeMap[key]) {\n continue;\n }\n logs.push({\n id: this.timeMap[key].id,\n durationTime: Date.now() - this.timeMap[key].startTime\n });\n }\n return logs;\n }\n\n end(key?: string | ILogDataDataItem) {\n let logs: ILogDataDataItem[] = [];\n if (key) {\n if (typeof key !== 'string') {\n key = key.trackId + hashCode(JSON.stringify(key.custom));\n }\n if (this.timeMap[key]) {\n logs.push(this.generateLog(this.timeMap[key]));\n this.timeMap[key] = null;\n }\n\n return logs;\n }\n\n for (let key in this.timeMap) {\n if (!this.timeMap[key]) {\n continue;\n }\n logs.push(this.generateLog(this.timeMap[key]));\n this.timeMap[key] = null;\n }\n\n return logs;\n }\n\n generateLog(info: ILogDataDataItem) {\n const log = {\n ...info,\n actionType: info.actionType === ACTION_TYPE.PAGE ? ACTION_TYPE.DURATION : ACTION_TYPE.VIEW_DURATION,\n durationTime: Date.now() - info.startTime,\n trackTime: Date.now(),\n masterId: info.id,\n trackId: '',\n pageId: info.actionType === ACTION_TYPE.PAGE ? info.trackId : info.pageId,\n id: getUUID()\n };\n\n return log;\n }\n}\n\nlet instance = DurationTime.getInstance();\nexport default instance;\n","import { getCookie } from '../utils/util';\n\nexport interface IUserInfo {\n uid?: string | number;\n isLogin: boolean;\n}\n\nlet userInfo: IUserInfo = {\n uid: getCookie('user_id') || getCookie('wechat_uid'),\n isLogin: false\n};\n\nexport function setUserInfo(info: Partial) {\n userInfo = {\n ...userInfo,\n ...info\n };\n}\n\nexport function getUserInfo() {\n return userInfo;\n}\n\nexport function login(info?: Partial) {\n let newUserInfo: Partial = { isLogin: true };\n if ((!info || !info.uid)&&!userInfo.uid) {\n newUserInfo.uid = getCookie('user_id') || getCookie('wechat_uid');\n } else {\n newUserInfo = { ...newUserInfo, ...info };\n }\n setUserInfo(newUserInfo);\n}\n\nexport function logout() {\n setUserInfo({ uid: null, isLogin: false });\n}\n","var _curry2 =\n/*#__PURE__*/\nrequire(\"./internal/_curry2\");\n/**\n * Returns a partial copy of an object containing only the keys specified. If\n * the key does not exist, the property is ignored.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category Object\n * @sig [k] -> {k: v} -> {k: v}\n * @param {Array} names an array of String property names to copy onto a new object\n * @param {Object} obj The object to copy from\n * @return {Object} A new object with only properties from `names` on it.\n * @see R.omit, R.props\n * @example\n *\n * R.pick(['a', 'd'], {a: 1, b: 2, c: 3, d: 4}); //=> {a: 1, d: 4}\n * R.pick(['a', 'e', 'f'], {a: 1, b: 2, c: 3, d: 4}); //=> {a: 1}\n */\n\n\nvar pick =\n/*#__PURE__*/\n_curry2(function pick(names, obj) {\n var result = {};\n var idx = 0;\n\n while (idx < names.length) {\n if (names[idx] in obj) {\n result[names[idx]] = obj[names[idx]];\n }\n\n idx += 1;\n }\n\n return result;\n});\n\nmodule.exports = pick;","import { getClientInfo } from './clientInfo';\nimport { ACTION_TYPE, SAFETY_KEY } from './../constant/index';\nimport { getPageInfo, setPageInfo, IPageInfo } from './pageInfo';\nimport http from '../utils/http';\nimport libInfo from './libInfo';\nimport getNetInfo from './netInfo';\nimport durationTime from './durationTime';\n\nimport { getConfig, IConfig } from './config';\nimport { getUUID } from '../utils/util';\nimport { getUserInfo, IUserInfo } from './user';\nimport { SEND_TYPE } from '../constant/index';\nimport { ITrackerData, ICleintInfo, ILibInfo } from '../types';\nimport { isObject } from './../utils/util';\nimport pick from 'ramda/src/pick';\n\nimport { sendInfo } from './exchange';\n\nexport interface ILogDataDataItem extends ITrackerData, IPageInfo {\n trackTime: number;\n startTime?: number;\n id: string;\n trackId?: string;\n}\n\nexport interface ILogData extends ICleintInfo, IUserInfo, ILibInfo {\n customTime: number;\n items: ILogDataDataItem[];\n version: string;\n}\n\nconst allData: ILogDataDataItem[] = [];\nconst allDebugData: ILogDataDataItem[] = [];\nconst allDurationData: ILogDataDataItem[] = [];\nlet timer: any = null;\n// const uuid = getUUID();\n// let index = 0;\n\n/**\n * 同步发送\n * @param data\n */\nexport function send(data: ITrackerData | ILogDataDataItem) {\n const config = getConfig();\n const { sendType } = config;\n\n if (\n data.actionType === 'PAGE' ||\n data.actionType === 'VIEW' ||\n data.actionType === 'DURATION' ||\n data.actionType === 'VIEW_DURATION'\n ) {\n sendDurationLog(data);\n return;\n }\n\n if (sendType === SEND_TYPE.SYNC) {\n sendSync(data);\n } else if (sendType === SEND_TYPE.ASYNC) {\n sendAsync(data);\n }\n}\n\n// 发送曝光&&时长\nexport function sendDurationLog(data?: ITrackerData) {\n const config = getConfig();\n if (data) {\n const [newData] = _generateData(data, config);\n if (!newData) {\n return;\n }\n allDurationData.push(newData);\n }\n if (config.sendType === SEND_TYPE.SYNC || data.actionType === 'DURATION' || data.actionType === 'VIEW_DURATION') {\n sendSync();\n } else if (config.sendType === SEND_TYPE.ASYNC) {\n sendAsync();\n }\n}\n\n// 立即发送时长\nexport function sendQuick(data: ILogDataDataItem[]) {\n sendSync(); //立即发送普通日志\n const config = getConfig();\n sendToServer(data, config.durationServerUrl);\n}\n\n// 发送时长心跳\nexport function sendBeat(data: any[]) {\n sendSync(); //立即发送普通日志\n const config = getConfig();\n if (!data.length) {\n return;\n }\n return http(JSON.stringify(data), config.beatServerUrl);\n}\n\nexport function sendSync(data?: ITrackerData) {\n const config = getConfig();\n if (data) {\n const [newData, debug] = _generateData(data, config);\n if (!newData) {\n return;\n }\n if (debug) {\n allDebugData.push(newData);\n } else {\n allData.push(newData);\n }\n }\n\n clearTimeout(timer);\n sendToServer(allDurationData, config.durationServerUrl);\n sendToServer(allData);\n sendToServer(allDebugData, config.debugServerUrl);\n allDurationData.length = 0;\n allData.length = 0;\n allDebugData.length = 0;\n}\n\n/**\n * 延迟发送 data不存在则马上发送本地allData\n * @param data\n */\nexport function sendAsync(data?: ITrackerData) {\n const config = getConfig();\n if (data) {\n const [newData, debug] = _generateData(data, config);\n if (!newData) {\n return;\n }\n if (debug) {\n allDebugData.push(newData);\n } else {\n allData.push(newData);\n }\n }\n clearTimeout(timer);\n // 无参数或者大于10条发送发送\n if ((!data && allData.length > 0) || allData.length >= 10 || allDebugData.length >= 10) {\n sendSync();\n return;\n }\n timer = setTimeout(() => {\n sendSync();\n }, config.delayTime);\n}\n\n/**\n * 发送到服务器\n * @param data\n * @param isAjax\n */\nfunction sendToServer(data: ILogDataDataItem[], url?: string) {\n if (!data || !data.length) {\n return;\n }\n\n return http(JSON.stringify(_wrapperData(data)), url);\n}\n\n/**\n * 合并其他信息\n * @param data\n */\nfunction _wrapperData(data: ILogDataDataItem[]): ILogData {\n const config = getConfig();\n // index++;\n\n const wrapperData = {\n customTime: Date.now(),\n items: data,\n ...getClientInfo(),\n ...libInfo,\n ...getUserInfo(),\n version: config.version\n };\n\n return wrapperData;\n}\n\n/**\n * 补充埋点信息\n * @param data\n * @param config\n */\nfunction _generateData(data: ITrackerData, config: IConfig): [ILogDataDataItem, boolean] {\n // index++;\n\n if (typeof config.beforeGenerateLog === 'function') {\n data = config.beforeGenerateLog(data);\n if (!data) {\n return [null, !!data.debug];\n }\n }\n\n //序列化自定义\n if (isObject(data.custom)) {\n data.custom = JSON.stringify(data.custom);\n }\n\n if (typeof data.custom === 'string' && data.custom.length > 15000) {\n data.custom = data.custom.substring(0, 15000) + '[超出15000部分被裁剪]';\n }\n\n const newData = pick(SAFETY_KEY, data);\n let pageInfo = getPageInfo();\n const netInfo = getNetInfo();\n\n if (data.actionType === ACTION_TYPE.PAGE) {\n //修改当前pageInfo\n setPageInfo({\n pageId: data.trackId || ''\n });\n // setReferrerId('BEAT');\n\n // setSourceEventId('UPDATE');\n pageInfo = getPageInfo();\n pageInfo.pageId = null;\n }\n\n if (data.actionType === ACTION_TYPE.EVENT) {\n // setSourceEventId('RECORD', data);\n pageInfo = getPageInfo();\n }\n\n const uuid = getUUID();\n const result = {\n ...pageInfo,\n ...newData,\n ...netInfo,\n\n trackTime: Date.now(),\n id: uuid\n };\n if (!data.debug) {\n (window as any)._TELESCOPE_LOG_ID = uuid;\n if (result.actionType === ACTION_TYPE.PAGE) {\n const durationLogs = durationTime.end();\n if (durationLogs && durationLogs.length) {\n sendQuick(durationLogs);\n }\n durationTime.start(result);\n }\n\n if (result.actionType === ACTION_TYPE.VIEW) {\n durationTime.start(result);\n }\n sendInfo();\n\n // console.log(JSON.stringify(result, null, 2));\n }\n\n return [result, !!data.debug];\n}\n","export default function () {\n const connection =\n (window as any).navigator.connection ||\n (window as any).navigator.mozConnection ||\n (window as any).navigator.webkitConnection ||\n {};\n\n if (!connection) {\n return {};\n }\n const type = connection.type || connection.effectiveType;\n if (!type) {\n return {};\n }\n return {\n netType: type\n };\n}\n","import { getClientInfo } from './clientInfo';\nimport { getPageInfo } from './pageInfo';\n\nexport function sendInfo() {\n let clientInfo = getClientInfo();\n\n if (clientInfo.appId === 'H5') {\n return;\n }\n // let pageInfo = getPageInfo();\n // let sourceEventId: string = null;\n\n // try {\n // const sourceEventInfo = JSON.parse(localStorage.getItem('source_event_id'));\n\n // sourceEventId = sourceEventInfo && sourceEventInfo.date + 5000 > Date.now() ? sourceEventInfo.recentId : '';\n // } catch (error) {}\n\n // const ua = window.navigator.userAgent;\n // if (/miniprogram/i.test(ua)) {\n // try {\n // if (window.wx && window.wx.miniProgram) {\n // window.wx.miniProgram.getEnv(function (res: any) {\n // if (res.miniprogram) {\n // window.wx.miniProgram.postMessage({\n // data: {\n // type: 'TELESCOPE_INFO',\n // data: { referrerId: pageInfo.pageId, sourceEventId, channel: clientInfo.channel }\n // }\n // });\n // }\n // });\n // } else {\n // const script = document.createElement('script');\n // script.type = 'text/javascript';\n // script.onload = function () {\n // if (window.wx && window.wx.miniProgram) {\n // window.wx.miniProgram.getEnv(function (res: any) {\n // if (res.miniprogram) {\n // window.wx.miniProgram.postMessage({\n // data: {\n // type: 'TELESCOPE_INFO',\n // data: { referrerId: pageInfo.pageId, sourceEventId, channel: clientInfo.channel }\n // }\n // });\n // }\n // });\n // }\n // };\n // script.src = '//static.91jkys.com/attachment/20210316204652605_db936fce9cf540e89ae70226ea953f44.js';\n // document.body.appendChild(script);\n // }\n // } catch (error) {}\n // }\n\n // if (typeof Sailer !== 'undefined' && /AppInfo|tangyi/.test(ua) && /zhiyun_patient/.test(ua)) {\n // Sailer.nativeCall('sendEventInfo', {\n // referrerId: pageInfo.pageId,\n // channel: clientInfo.channel,\n // sourceEventId\n // });\n // }\n}\n","import vissense from 'vissense';\nimport { VisSenseConfig } from '../types';\nconst VisSense = vissense(window);\nconst VisSenseUtils = VisSense.Utils;\nconst createInnerMonitor = function (outerMonitor: any, callback: Function, config: VisSenseConfig) {\n let timeElapsed = 0;\n let timeStarted: any = null;\n let timeLimit = config.timeLimit;\n let percentageLimit = config.percentageLimit;\n let interval = config.interval;\n\n return VisSense.VisMon.Builder(outerMonitor.visobj())\n .strategy(new VisSense.VisMon.Strategy.PollingStrategy({ interval: interval }))\n .on('update', function (monitor: any) {\n let percentage = monitor.state().percentage;\n if (percentage < percentageLimit) {\n timeStarted = null;\n } else {\n let now = VisSenseUtils.now();\n timeStarted = timeStarted || now;\n timeElapsed = now - timeStarted;\n }\n\n if (timeElapsed >= timeLimit) {\n monitor.stop();\n outerMonitor.stop();\n callback(monitor);\n }\n })\n .on('stop', function () {\n timeStarted = null;\n })\n .build();\n};\n\nconst onPercentageTimeTestPassed = function (visobj: any, callback: Function, config: VisSenseConfig) {\n const _config = VisSenseUtils.defaults(config, {\n percentageLimit: 1,\n timeLimit: 1000,\n interval: 100,\n strategy: undefined\n });\n\n // monitor is considered hidden if it is 1% below the percentage limit\n let hiddenLimit = Math.max(_config.percentageLimit - 0.001, 0);\n\n let innerMonitor: any = null;\n\n let outerMonitor = VisSense.VisMon.Builder(\n new VisSense(visobj.element(), {\n hidden: hiddenLimit,\n referenceWindow: visobj.referenceWindow()\n })\n )\n .set('strategy', _config.strategy)\n .on('visible', function (monitor: any) {\n if (innerMonitor === null) {\n innerMonitor = createInnerMonitor(monitor, callback, _config);\n }\n innerMonitor.start();\n })\n .on('hidden', function () {\n if (innerMonitor !== null) {\n innerMonitor.stop();\n }\n })\n .on('stop', function () {\n if (innerMonitor !== null) {\n innerMonitor.stop();\n }\n })\n .build();\n\n outerMonitor.start();\n\n return function () {\n outerMonitor.stop();\n innerMonitor = null;\n };\n};\n\nVisSense.fn.onPercentageTimeTestPassed = function (callback: Function, config: VisSenseConfig) {\n onPercentageTimeTestPassed(this, callback, config);\n};\n\nexport default VisSense;\n","/*! { \"name\": \"vissense\", \"version\": \"0.10.0\", \"homepage\": \"https://vissense.github.io/vissense\",\"copyright\": \"(c) 2016 tbk\" } */\n!function(root, name, factory) {\n \"use strict\";\n var withWindow = function(win) {\n var product = factory(win, win.document);\n return product.noConflict = function() {\n return product;\n }, product;\n };\n if (\"function\" == typeof define && define.amd) define([], function() {\n return withWindow;\n }); else if (\"object\" == typeof exports) module.exports = function(win) {\n return withWindow(win);\n }; else {\n var _oldValue = root[name], _newValue = factory(root, root.document);\n root[name] = _newValue, root[name].noConflict = function() {\n return root[name] = _oldValue, _newValue;\n };\n }\n}(this, \"VisSense\", function(window, document, undefined) {\n \"use strict\";\n function async(callback, delay) {\n return function() {\n var args = arguments;\n return defer(function() {\n callback.apply(undefined, args);\n }, delay || 0);\n };\n }\n function debounce(callback, delay) {\n var cancel = noop;\n return function() {\n var self = this, args = arguments;\n cancel(), cancel = defer(function() {\n callback.apply(self, args);\n }, delay);\n };\n }\n function defaults(dest, source) {\n var sourceIsObject = isObject(source), destIsObject = isObject(dest);\n return sourceIsObject || destIsObject ? sourceIsObject && destIsObject ? (forEach(Object.keys(source), function(property) {\n dest[property] === undefined && (dest[property] = source[property]);\n }), dest) : sourceIsObject ? source : dest : source;\n }\n function defer(callback, delay) {\n var timer = setTimeout(function() {\n callback();\n }, delay || 0);\n return function() {\n clearTimeout(timer);\n };\n }\n function fireIf(when, callback) {\n return function() {\n return (isFunction(when) ? when() : when) ? callback() : undefined;\n };\n }\n function extend(dest, source, callback) {\n for (var index = -1, props = Object.keys(source), length = props.length, ask = isFunction(callback); ++index < length; ) {\n var key = props[index];\n dest[key] = ask ? callback(dest[key], source[key], key, dest, source) : source[key];\n }\n return dest;\n }\n function forEach(array, callback, thisArg) {\n for (var i = 0, n = array.length; n > i; i++) {\n var result = callback.call(thisArg, array[i], i, array);\n if (result !== undefined) return result;\n }\n }\n function identity(value) {\n return value;\n }\n function isDefined(value) {\n return value !== undefined;\n }\n function isArray(value) {\n return value && \"object\" == typeof value && \"number\" == typeof value.length && \"[object Array]\" === Object.prototype.toString.call(value) || !1;\n }\n function isElement(value) {\n return value && 1 === value.nodeType || !1;\n }\n function isFunction(value) {\n return \"function\" == typeof value || !1;\n }\n function isObject(value) {\n var type = typeof value;\n return \"function\" === type || value && \"object\" === type || !1;\n }\n function noop() {}\n function now() {\n return new Date().getTime();\n }\n function once(callback) {\n var cache, called = !1;\n return function() {\n return called || (cache = callback.apply(undefined, arguments), called = !0), cache;\n };\n }\n function throttle(callback, wait, thisArg) {\n var cancel = noop, last = !1;\n return function() {\n var time = now(), args = arguments, func = function() {\n last = time, callback.apply(thisArg, args);\n };\n last && last + wait > time ? (cancel(), cancel = defer(func, wait)) : (last = time, \n defer(func, 0));\n };\n }\n function viewport(referenceWindow) {\n var win = referenceWindow || window;\n return {\n height: win.innerHeight,\n width: win.innerWidth\n };\n }\n function computedStyle(element, referenceWindow) {\n return (referenceWindow || window).getComputedStyle(element, null);\n }\n function styleProperty(style, property) {\n return style.getPropertyValue(property);\n }\n function isDisplayed(element, style) {\n style || (style = computedStyle(element));\n var display = styleProperty(style, \"display\");\n if (\"none\" === display) return !1;\n var parent = element.parentNode;\n return isElement(parent) ? isDisplayed(parent) : !0;\n }\n function isVisibleByStyling(element, referenceWindow) {\n if (element === (referenceWindow || window).document) return !0;\n if (!element || !element.parentNode) return !1;\n var style = computedStyle(element, referenceWindow), visibility = styleProperty(style, \"visibility\");\n return \"hidden\" === visibility || \"collapse\" === visibility ? !1 : isDisplayed(element, style);\n }\n function isInViewport(rect, viewport) {\n return !rect || rect.width <= 0 || rect.height <= 0 ? !1 : rect.bottom > 0 && rect.right > 0 && rect.top < viewport.height && rect.left < viewport.width;\n }\n function percentage(element, referenceWindow) {\n var rect = element.getBoundingClientRect(), view = viewport(referenceWindow);\n if (!isInViewport(rect, view) || !isVisibleByStyling(element)) return 0;\n var vh = 0, vw = 0;\n return rect.top >= 0 ? vh = Math.min(rect.height, view.height - rect.top) : rect.bottom > 0 && (vh = Math.min(view.height, rect.bottom)), \n rect.left >= 0 ? vw = Math.min(rect.width, view.width - rect.left) : rect.right > 0 && (vw = Math.min(view.width, rect.right)), \n vh * vw / (rect.height * rect.width);\n }\n function isPageVisible(referenceWindow) {\n return !createVisibilityApi(referenceWindow || window).isHidden();\n }\n function VisSense(element, config) {\n if (!(this instanceof VisSense)) return new VisSense(element, config);\n if (!isElement(element)) throw new Error(\"not an element node\");\n this._element = element, this._config = defaults(config, {\n fullyvisible: 1,\n hidden: 0,\n referenceWindow: window,\n percentageHook: percentage,\n precision: 3,\n visibilityHooks: []\n });\n var roundFactor = this._config.precision <= 0 ? 1 : Math.pow(10, this._config.precision || 3);\n this._round = function(val) {\n return Math.round(val * roundFactor) / roundFactor;\n };\n var visibilityApi = createVisibilityApi(this._config.referenceWindow);\n this._config.visibilityHooks.push(function() {\n return !visibilityApi.isHidden();\n });\n }\n function nextState(visobj, currentState) {\n var newState = visobj.state(), percentage = newState.percentage;\n return currentState && percentage === currentState.percentage && currentState.percentage === currentState.previous.percentage ? currentState : newState.hidden ? VisSense.VisState.hidden(percentage, currentState) : newState.fullyvisible ? VisSense.VisState.fullyvisible(percentage, currentState) : VisSense.VisState.visible(percentage, currentState);\n }\n function VisMon(visobj, config) {\n var _config = defaults(config, {\n strategy: [ new VisMon.Strategy.PollingStrategy(), new VisMon.Strategy.EventStrategy() ],\n async: !1\n });\n this._visobj = visobj, this._state = {}, this._started = !1;\n var anyTopicName = \"*#\" + now();\n this._pubsub = new PubSub({\n async: _config.async,\n anyTopicName: anyTopicName\n }), this._events = [ anyTopicName, \"start\", \"stop\", \"update\", \"hidden\", \"visible\", \"fullyvisible\", \"percentagechange\", \"visibilitychange\" ], \n this._strategy = new VisMon.Strategy.CompositeStrategy(_config.strategy), this._strategy.init(this), \n this._pubsub.on(\"update\", function(monitor) {\n var newValue = monitor._state.percentage, oldValue = monitor._state.previous.percentage;\n newValue !== oldValue && monitor._pubsub.publish(\"percentagechange\", [ monitor, newValue, oldValue ]);\n }), this._pubsub.on(\"update\", function(monitor) {\n monitor._state.code !== monitor._state.previous.code && monitor._pubsub.publish(\"visibilitychange\", [ monitor ]);\n }), this._pubsub.on(\"visibilitychange\", function(monitor) {\n monitor._state.visible && !monitor._state.previous.visible && monitor._pubsub.publish(\"visible\", [ monitor ]);\n }), this._pubsub.on(\"visibilitychange\", function(monitor) {\n monitor._state.fullyvisible && monitor._pubsub.publish(\"fullyvisible\", [ monitor ]);\n }), this._pubsub.on(\"visibilitychange\", function(monitor) {\n monitor._state.hidden && monitor._pubsub.publish(\"hidden\", [ monitor ]);\n }), forEach(this._events, function(event) {\n isFunction(_config[event]) && this.on(event, _config[event]);\n }, this);\n }\n var createVisibilityApi = function(referenceWindow) {\n return function(document, undefined) {\n var entry = function(propertyName, eventName) {\n return {\n property: propertyName,\n event: eventName\n };\n }, event = \"visibilitychange\", dict = [ entry(\"webkitHidden\", \"webkit\" + event), entry(\"msHidden\", \"ms\" + event), entry(\"mozHidden\", \"moz\" + event), entry(\"hidden\", event) ], api = forEach(dict, function(entry) {\n return document[entry.property] !== undefined ? {\n isHidden: function() {\n return !!document[entry.property] || !1;\n },\n onVisibilityChange: function(callback) {\n return document.addEventListener(entry.event, callback, !1), function() {\n document.removeEventListener(entry.event, callback, !1);\n };\n }\n } : void 0;\n });\n return api || {\n isHidden: function() {\n return !1;\n },\n onVisibilityChange: function() {\n return noop;\n }\n };\n }((referenceWindow || window).document);\n }, PubSub = function(undefined) {\n function PubSub(config) {\n this._cache = {}, this._onAnyCache = [], this._config = defaults(config, {\n async: !1,\n anyTopicName: \"*\"\n });\n }\n var syncFireListeners = function(consumers, args) {\n forEach(consumers, function(consumer) {\n consumer(args);\n });\n };\n return PubSub.prototype.on = function(topic, callback) {\n if (!isFunction(callback)) return noop;\n var applyCallback = function(args) {\n return callback.apply(undefined, args || []);\n }, listener = this._config.async ? async(applyCallback) : applyCallback, unregister = function(listener, array, topic) {\n return function() {\n var index = array.indexOf(listener);\n return index > -1 ? (array.splice(index, 1), !0) : !1;\n };\n };\n return topic === this._config.anyTopicName ? (this._onAnyCache.push(listener), unregister(listener, this._onAnyCache, \"*\")) : (this._cache[topic] || (this._cache[topic] = []), \n this._cache[topic].push(listener), unregister(listener, this._cache[topic], topic));\n }, PubSub.prototype.publish = function(topic, args) {\n var listeners = (this._cache[topic] || []).concat(topic === this._config.anyTopicName ? [] : this._onAnyCache), enableAsync = !!this._config.async, syncOrAsyncPublish = enableAsync ? async(syncFireListeners) : function(listeners, args) {\n return syncFireListeners(listeners, args), noop;\n };\n return syncOrAsyncPublish(listeners, args || []);\n }, PubSub;\n }();\n VisSense.prototype.state = function() {\n var hiddenByHook = forEach(this._config.visibilityHooks, function(hook) {\n return hook(this._element) ? void 0 : VisSense.VisState.hidden(0);\n }, this);\n return hiddenByHook || function(visobj, element, config) {\n var perc = visobj._round(config.percentageHook(element, config.referenceWindow));\n return perc <= config.hidden ? VisSense.VisState.hidden(perc) : perc >= config.fullyvisible ? VisSense.VisState.fullyvisible(perc) : VisSense.VisState.visible(perc);\n }(this, this._element, this._config);\n }, VisSense.prototype.percentage = function() {\n return this.state().percentage;\n }, VisSense.prototype.element = function() {\n return this._element;\n }, VisSense.prototype.referenceWindow = function() {\n return this._config.referenceWindow;\n }, VisSense.prototype.isFullyVisible = function() {\n return this.state().fullyvisible;\n }, VisSense.prototype.isVisible = function() {\n return this.state().visible;\n }, VisSense.prototype.isHidden = function() {\n return this.state().hidden;\n }, VisSense.fn = VisSense.prototype, VisSense.of = function(element, config) {\n return new VisSense(element, config);\n };\n var STATES = {\n HIDDEN: [ 0, \"hidden\" ],\n VISIBLE: [ 1, \"visible\" ],\n FULLY_VISIBLE: [ 2, \"fullyvisible\" ]\n };\n return VisSense.VisState = function() {\n function newVisState(state, percentage, previous) {\n return previous && delete previous.previous, {\n code: state[0],\n state: state[1],\n percentage: percentage,\n previous: previous || {},\n fullyvisible: state[0] === STATES.FULLY_VISIBLE[0],\n visible: state[0] === STATES.VISIBLE[0] || state[0] === STATES.FULLY_VISIBLE[0],\n hidden: state[0] === STATES.HIDDEN[0]\n };\n }\n return {\n hidden: function(percentage, previous) {\n return newVisState(STATES.HIDDEN, percentage, previous);\n },\n visible: function(percentage, previous) {\n return newVisState(STATES.VISIBLE, percentage, previous);\n },\n fullyvisible: function(percentage, previous) {\n return newVisState(STATES.FULLY_VISIBLE, percentage, previous);\n }\n };\n }(), VisMon.prototype.visobj = function() {\n return this._visobj;\n }, VisMon.prototype.publish = function(eventName, args) {\n var isInternalEvent = this._events.indexOf(eventName) >= 0;\n if (isInternalEvent) throw new Error('Cannot publish internal event \"' + eventName + '\" from external scope.');\n return this._pubsub.publish(eventName, args);\n }, VisMon.prototype.state = function() {\n return this._state;\n }, VisMon.prototype.start = function(config) {\n if (this._started) return this;\n var _config = defaults(config, {\n async: !1\n });\n return this._cancelAsyncStart && this._cancelAsyncStart(), _config.async ? this.startAsync() : (this._started = !0, \n this.update(), this._pubsub.publish(\"start\", [ this ]), this._strategy.start(this), \n this);\n }, VisMon.prototype.startAsync = function(config) {\n this._cancelAsyncStart && this._cancelAsyncStart();\n var me = this, cancelAsyncStart = defer(function() {\n me.start(extend(defaults(config, {}), {\n async: !1\n }));\n });\n return this._cancelAsyncStart = function() {\n cancelAsyncStart(), me._cancelAsyncStart = null;\n }, this;\n }, VisMon.prototype.stop = function() {\n this._cancelAsyncStart && this._cancelAsyncStart(), this._started && (this._strategy.stop(this), \n this._pubsub.publish(\"stop\", [ this ])), this._started = !1;\n }, VisMon.prototype.update = function() {\n this._started && (this._state = nextState(this._visobj, this._state), this._pubsub.publish(\"update\", [ this ]));\n }, VisMon.prototype.on = function(topic, callback) {\n return this._pubsub.on(topic, callback);\n }, VisMon.Builder = function() {\n var combineStrategies = function(config, strategies) {\n var combinedStrategies = null, forceDisableStrategies = config.strategy === !1, enableStrategies = !forceDisableStrategies && (config.strategy || strategies.length > 0);\n if (enableStrategies) {\n var configStrategyIsDefined = !!config.strategy, configStrategyIsArray = isArray(config.strategy), configStrategyAsArray = configStrategyIsDefined ? configStrategyIsArray ? config.strategy : [ config.strategy ] : [];\n combinedStrategies = configStrategyAsArray.concat(strategies);\n } else combinedStrategies = forceDisableStrategies ? [] : config.strategy;\n return combinedStrategies;\n };\n return function(visobj) {\n var config = {}, strategies = [], events = [], productBuilt = !1, product = null;\n return {\n set: function(name, value) {\n return config[name] = value, this;\n },\n strategy: function(strategy) {\n return strategies.push(strategy), this;\n },\n on: function(event, handler) {\n return events.push([ event, handler ]), this;\n },\n build: function(consumer) {\n var manufacture = function() {\n var combinedStrategies = combineStrategies(config, strategies);\n config.strategy = combinedStrategies;\n var monitor = visobj.monitor(config);\n return forEach(events, function(event) {\n monitor.on(event[0], event[1]);\n }), productBuilt = !0, product = monitor;\n }, monitor = productBuilt ? product : manufacture();\n return isFunction(consumer) ? consumer(monitor) : monitor;\n }\n };\n };\n }(), VisMon.Strategy = function() {}, VisMon.Strategy.prototype.init = noop, VisMon.Strategy.prototype.start = noop, \n VisMon.Strategy.prototype.stop = noop, VisMon.Strategy.CompositeStrategy = function(strategies) {\n this._strategies = isArray(strategies) ? strategies : [ strategies ];\n }, VisMon.Strategy.CompositeStrategy.prototype = Object.create(VisMon.Strategy.prototype), \n VisMon.Strategy.CompositeStrategy.prototype.init = function(monitor) {\n forEach(this._strategies, function(strategy) {\n isFunction(strategy.init) && strategy.init(monitor);\n });\n }, VisMon.Strategy.CompositeStrategy.prototype.start = function(monitor) {\n forEach(this._strategies, function(strategy) {\n isFunction(strategy.start) && strategy.start(monitor);\n });\n }, VisMon.Strategy.CompositeStrategy.prototype.stop = function(monitor) {\n forEach(this._strategies, function(strategy) {\n isFunction(strategy.stop) && strategy.stop(monitor);\n });\n }, VisMon.Strategy.PollingStrategy = function(config) {\n this._config = defaults(config, {\n interval: 1e3\n }), this._started = !1;\n }, VisMon.Strategy.PollingStrategy.prototype = Object.create(VisMon.Strategy.prototype), \n VisMon.Strategy.PollingStrategy.prototype.start = function(monitor) {\n return this._started || (this._clearInterval = function(interval) {\n var intervalId = setInterval(function() {\n monitor.update();\n }, interval);\n return function() {\n clearInterval(intervalId);\n };\n }(this._config.interval), this._started = !0), this._started;\n }, VisMon.Strategy.PollingStrategy.prototype.stop = function() {\n return this._started ? (this._clearInterval(), this._started = !1, !0) : !1;\n }, VisMon.Strategy.EventStrategy = function(config) {\n this._config = defaults(config, {\n throttle: 50\n }), this._config.debounce > 0 && (this._config.throttle = +this._config.debounce), \n this._started = !1;\n }, VisMon.Strategy.EventStrategy.prototype = Object.create(VisMon.Strategy.prototype), \n VisMon.Strategy.EventStrategy.prototype.start = function(monitor) {\n return this._started || (this._removeEventListeners = function(update) {\n var referenceWindow = monitor.visobj().referenceWindow(), visibilityApi = createVisibilityApi(referenceWindow), removeOnVisibilityChangeEvent = visibilityApi.onVisibilityChange(update);\n return referenceWindow.addEventListener(\"scroll\", update, !1), referenceWindow.addEventListener(\"resize\", update, !1), \n referenceWindow.addEventListener(\"touchmove\", update, !1), function() {\n referenceWindow.removeEventListener(\"touchmove\", update, !1), referenceWindow.removeEventListener(\"resize\", update, !1), \n referenceWindow.removeEventListener(\"scroll\", update, !1), removeOnVisibilityChangeEvent();\n };\n }(throttle(function() {\n monitor.update();\n }, this._config.throttle)), this._started = !0), this._started;\n }, VisMon.Strategy.EventStrategy.prototype.stop = function() {\n return this._started ? (this._removeEventListeners(), this._started = !1, !0) : !1;\n }, VisSense.VisMon = VisMon, VisSense.PubSub = PubSub, VisSense.fn.monitor = function(config) {\n return new VisMon(this, config);\n }, VisSense.Utils = {\n async: async,\n debounce: debounce,\n defaults: defaults,\n defer: defer,\n extend: extend,\n forEach: forEach,\n fireIf: fireIf,\n identity: identity,\n isArray: isArray,\n isDefined: isDefined,\n isElement: isElement,\n isFunction: isFunction,\n isObject: isObject,\n isPageVisible: isPageVisible,\n isVisibleByStyling: isVisibleByStyling,\n noop: noop,\n now: now,\n once: once,\n throttle: throttle,\n percentage: percentage,\n VisibilityApi: createVisibilityApi(),\n createVisibilityApi: createVisibilityApi,\n _viewport: viewport,\n _isInViewport: isInViewport,\n _isDisplayed: isDisplayed,\n _computedStyle: computedStyle,\n _styleProperty: styleProperty\n }, VisSense;\n});","import { send, sendAsync, sendQuick } from './send';\nimport { ACTION_TYPE } from '../constant';\nimport { getDomPath } from '../utils/util';\nimport { ITrackerData, VisSenseConfig } from '../types';\n\nimport durationTime from './durationTime';\nimport { getConfig } from './config';\n\nimport VisSense from './viewTracker';\nimport { setPageInfo } from './pageInfo';\n\n/**\n *埋点入口类\n *\n * @class ActionTracker\n */\nclass ActionTracker {\n static instance: ActionTracker = null;\n static getInstance() {\n if (!ActionTracker.instance) {\n ActionTracker.instance = new ActionTracker();\n }\n return ActionTracker.instance;\n }\n constructor() {\n this.trackEvent = this.trackEvent.bind(this);\n this.trackPage = this.trackPage.bind(this);\n this.trackViewStart = this.trackViewStart.bind(this);\n this.trackView = this.trackView.bind(this);\n this.trackViewEnd = this.trackViewEnd.bind(this);\n this.trackLog = this.trackLog.bind(this);\n }\n\n /**\n * 埋点页面,\n * @memberof ActionTracker\n */\n trackPage(info: ITrackerData = {}) {\n let data: ITrackerData = {\n actionType: ACTION_TYPE.PAGE,\n ...info\n };\n data.pageId = data.trackId;\n\n setPageInfo({ pageId: data.pageId });\n send(data);\n }\n\n /**\n *\n * 事件埋点\n */\n trackEvent(info: ITrackerData = {}) {\n let data: ITrackerData = {\n actionType: ACTION_TYPE.EVENT,\n eventName: '点击',\n ...info\n };\n send(data);\n }\n\n /**\n *\n * 事件埋点\n */\n trackAutoEvent(info: ITrackerData = {}) {\n let data: ITrackerData = {\n actionType: ACTION_TYPE.AUTO_EVENT,\n eventName: '无痕点击',\n ...info\n };\n send(data);\n }\n\n /**\n *\n * 事件埋点\n */\n trackAutoPage(info: ITrackerData = {}) {\n let data: ITrackerData = {\n actionType: ACTION_TYPE.AUTO_PAGE,\n eventName: '无痕曝光',\n ...info\n };\n send(data);\n }\n\n /**\n * 视窗埋点 暂时不启用\n * @param dom\n * @param info\n * @param visSenseConfig\n */\n trackView(dom: HTMLElement, info: ITrackerData, visSenseConfig: VisSenseConfig = {}) {\n if (dom) {\n let data: ITrackerData = {\n actionType: ACTION_TYPE.VIEW,\n domId: dom.id,\n domClass: dom.className,\n domTag: dom.tagName,\n domContent: dom.textContent.substring(0, 20).trim(),\n domPath: getDomPath(dom),\n ...info\n };\n\n var visobj = VisSense(dom);\n visobj.onPercentageTimeTestPassed(\n function () {\n send(data);\n },\n {\n percentageLimit: visSenseConfig.percentageLimit || 1,\n timeLimit: visSenseConfig.timeLimit || 0,\n interval: 200\n }\n );\n }\n }\n\n trackViewStart(info: ITrackerData) {\n send({ ...info, actionType: ACTION_TYPE.VIEW });\n }\n\n trackViewEnd(info: ITrackerData) {\n const logs = durationTime.end(info as any);\n sendQuick(logs);\n }\n\n /**\n *通用埋点入口 根据埋点类型调用\n *\n */\n track(info: ITrackerData) {\n switch (info.actionType) {\n case ACTION_TYPE.EVENT:\n this.trackEvent(info);\n break;\n case ACTION_TYPE.PAGE:\n this.trackPage(info);\n break;\n default:\n break;\n }\n send(info);\n }\n\n /**\n * a标签埋点 做300毫秒延迟跳转 确保埋点成功 (暂时注销)\n * @param linkDom\n * @param info\n */\n trackLink(linkDom: HTMLLinkElement, info: ITrackerData = {}) {\n const config = getConfig();\n var url = linkDom.getAttribute('href');\n if (config.delayLink && url && /\\//.test(url)) {\n setTimeout(() => {\n if (linkDom.getAttribute('target') === '_blank') {\n window.open(url);\n } else {\n window.location.href = url;\n }\n }, config.delayLinkTime);\n }\n\n this.trackDom(linkDom, info);\n sendAsync();\n }\n\n /**\n *埋点dom 做1秒防抖\n *\n * @param {(HTMLLinkElement | HTMLInputElement | HTMLLinkElement)} dom\n * @param {ITrackerData} [info={}]\n * @returns\n * @memberof ActionTracker\n */\n trackDom(dom: HTMLLinkElement | HTMLInputElement | HTMLLinkElement, info: ITrackerData = {}) {\n //防止频繁触发\n const _dom: any = dom;\n if (_dom.IS_TRACKED) {\n clearTimeout(_dom.DELAY_TRACK_TIME);\n _dom.DELAY_TRACK_TIME = setTimeout(() => {\n _dom.IS_TRACKED = false;\n }, 1000);\n return;\n }\n _dom.IS_TRACKED = true;\n _dom.DELAY_TRACK_TIME = setTimeout(() => {\n _dom.IS_TRACKED = false;\n }, 1000);\n\n let domPath = getDomPath(dom);\n let trackInfo = {\n trackId: '',\n domPath,\n domContent: dom.textContent.substring(0, 20).trim(),\n domHref: (dom as HTMLLinkElement).href || (dom as unknown as HTMLImageElement).src || null\n };\n\n let track = dom.getAttribute('data-track');\n\n if (track && track.search(/^\\{[\\S\\s]*\\}$/) >= 0) {\n trackInfo = { ...trackInfo, ...JSON.parse(track) };\n } else {\n trackInfo.trackId = track || '';\n }\n if (info) {\n trackInfo = { ...trackInfo, ...info };\n }\n this.trackEvent(trackInfo);\n }\n\n /**\n * 前端日志收集\n * @memberof ActionTracker\n */\n trackLog(info: ITrackerData = {}) {\n let data: ITrackerData = {\n actionType: ACTION_TYPE.EVENT,\n eventName: '前端日志',\n debug: true,\n ...info\n };\n\n send(data);\n }\n}\n\nlet instance = ActionTracker.getInstance();\n\nexport default instance;\n","var _curry1 =\n/*#__PURE__*/\nrequire(\"./_curry1\");\n\nvar _curry2 =\n/*#__PURE__*/\nrequire(\"./_curry2\");\n\nvar _isPlaceholder =\n/*#__PURE__*/\nrequire(\"./_isPlaceholder\");\n/**\n * Optimized internal three-arity curry function.\n *\n * @private\n * @category Function\n * @param {Function} fn The function to curry.\n * @return {Function} The curried function.\n */\n\n\nfunction _curry3(fn) {\n return function f3(a, b, c) {\n switch (arguments.length) {\n case 0:\n return f3;\n\n case 1:\n return _isPlaceholder(a) ? f3 : _curry2(function (_b, _c) {\n return fn(a, _b, _c);\n });\n\n case 2:\n return _isPlaceholder(a) && _isPlaceholder(b) ? f3 : _isPlaceholder(a) ? _curry2(function (_a, _c) {\n return fn(_a, b, _c);\n }) : _isPlaceholder(b) ? _curry2(function (_b, _c) {\n return fn(a, _b, _c);\n }) : _curry1(function (_c) {\n return fn(a, b, _c);\n });\n\n default:\n return _isPlaceholder(a) && _isPlaceholder(b) && _isPlaceholder(c) ? f3 : _isPlaceholder(a) && _isPlaceholder(b) ? _curry2(function (_a, _b) {\n return fn(_a, _b, c);\n }) : _isPlaceholder(a) && _isPlaceholder(c) ? _curry2(function (_a, _c) {\n return fn(_a, b, _c);\n }) : _isPlaceholder(b) && _isPlaceholder(c) ? _curry2(function (_b, _c) {\n return fn(a, _b, _c);\n }) : _isPlaceholder(a) ? _curry1(function (_a) {\n return fn(_a, b, c);\n }) : _isPlaceholder(b) ? _curry1(function (_b) {\n return fn(a, _b, c);\n }) : _isPlaceholder(c) ? _curry1(function (_c) {\n return fn(a, b, _c);\n }) : fn(a, b, c);\n }\n };\n}\n\nmodule.exports = _curry3;","var _curry1 =\n/*#__PURE__*/\nrequire(\"./internal/_curry1\");\n/**\n * Returns a function that always returns the given value. Note that for\n * non-primitives the value returned is a reference to the original value.\n *\n * This function is known as `const`, `constant`, or `K` (for K combinator) in\n * other languages and libraries.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category Function\n * @sig a -> (* -> a)\n * @param {*} val The value to wrap in a function\n * @return {Function} A Function :: * -> val.\n * @example\n *\n * const t = R.always('Tee');\n * t(); //=> 'Tee'\n */\n\n\nvar always =\n/*#__PURE__*/\n_curry1(function always(val) {\n return function () {\n return val;\n };\n});\n\nmodule.exports = always;","var _curry3 =\n/*#__PURE__*/\nrequire(\"./internal/_curry3\"); // `Identity` is a functor that holds a single value, where `map` simply\n// transforms the held value with the provided function.\n\n\nvar Identity = function (x) {\n return {\n value: x,\n map: function (f) {\n return Identity(f(x));\n }\n };\n};\n/**\n * Returns the result of \"setting\" the portion of the given data structure\n * focused by the given lens to the result of applying the given function to\n * the focused value.\n *\n * @func\n * @memberOf R\n * @since v0.16.0\n * @category Object\n * @typedefn Lens s a = Functor f => (a -> f a) -> s -> f s\n * @sig Lens s a -> (a -> a) -> s -> s\n * @param {Lens} lens\n * @param {*} v\n * @param {*} x\n * @return {*}\n * @see R.prop, R.lensIndex, R.lensProp\n * @example\n *\n * const headLens = R.lensIndex(0);\n *\n * R.over(headLens, R.toUpper, ['foo', 'bar', 'baz']); //=> ['FOO', 'bar', 'baz']\n */\n\n\nvar over =\n/*#__PURE__*/\n_curry3(function over(lens, f, x) {\n // The value returned by the getter function is first transformed with `f`,\n // then set as the value of an `Identity`. This is then mapped over with the\n // setter function of the lens.\n return lens(function (y) {\n return Identity(f(y));\n })(x).value;\n});\n\nmodule.exports = over;","var _curry3 =\n/*#__PURE__*/\nrequire(\"./internal/_curry3\");\n\nvar always =\n/*#__PURE__*/\nrequire(\"./always\");\n\nvar over =\n/*#__PURE__*/\nrequire(\"./over\");\n/**\n * Returns the result of \"setting\" the portion of the given data structure\n * focused by the given lens to the given value.\n *\n * @func\n * @memberOf R\n * @since v0.16.0\n * @category Object\n * @typedefn Lens s a = Functor f => (a -> f a) -> s -> f s\n * @sig Lens s a -> a -> s -> s\n * @param {Lens} lens\n * @param {*} v\n * @param {*} x\n * @return {*}\n * @see R.prop, R.lensIndex, R.lensProp\n * @example\n *\n * const xLens = R.lensProp('x');\n *\n * R.set(xLens, 4, {x: 1, y: 2}); //=> {x: 4, y: 2}\n * R.set(xLens, 8, {x: 1, y: 2}); //=> {x: 8, y: 2}\n */\n\n\nvar set =\n/*#__PURE__*/\n_curry3(function set(lens, v, x) {\n return over(lens, always(v), x);\n});\n\nmodule.exports = set;","var _curry3 =\n/*#__PURE__*/\nrequire(\"./internal/_curry3\");\n/**\n * Makes a shallow clone of an object, setting or overriding the specified\n * property with the given value. Note that this copies and flattens prototype\n * properties onto the new object as well. All non-primitive properties are\n * copied by reference.\n *\n * @func\n * @memberOf R\n * @since v0.8.0\n * @category Object\n * @sig String -> a -> {k: v} -> {k: v}\n * @param {String} prop The property name to set\n * @param {*} val The new value\n * @param {Object} obj The object to clone\n * @return {Object} A new object equivalent to the original except for the changed property.\n * @see R.dissoc, R.pick\n * @example\n *\n * R.assoc('c', 3, {a: 1, b: 2}); //=> {a: 1, b: 2, c: 3}\n */\n\n\nvar assoc =\n/*#__PURE__*/\n_curry3(function assoc(prop, val, obj) {\n var result = {};\n\n for (var p in obj) {\n result[p] = obj[p];\n }\n\n result[prop] = val;\n return result;\n});\n\nmodule.exports = assoc;","/**\n * Tests whether or not an object is an array.\n *\n * @private\n * @param {*} val The object to test.\n * @return {Boolean} `true` if `val` is an array, `false` otherwise.\n * @example\n *\n * _isArray([]); //=> true\n * _isArray(null); //=> false\n * _isArray({}); //=> false\n */\nmodule.exports = Array.isArray || function _isArray(val) {\n return val != null && val.length >= 0 && Object.prototype.toString.call(val) === '[object Array]';\n};","function _isTransformer(obj) {\n return obj != null && typeof obj['@@transducer/step'] === 'function';\n}\n\nmodule.exports = _isTransformer;","var _isArray =\n/*#__PURE__*/\nrequire(\"./_isArray\");\n\nvar _isTransformer =\n/*#__PURE__*/\nrequire(\"./_isTransformer\");\n/**\n * Returns a function that dispatches with different strategies based on the\n * object in list position (last argument). If it is an array, executes [fn].\n * Otherwise, if it has a function with one of the given method names, it will\n * execute that function (functor case). Otherwise, if it is a transformer,\n * uses transducer [xf] to return a new transformer (transducer case).\n * Otherwise, it will default to executing [fn].\n *\n * @private\n * @param {Array} methodNames properties to check for a custom implementation\n * @param {Function} xf transducer to initialize if object is transformer\n * @param {Function} fn default ramda implementation\n * @return {Function} A function that dispatches on object in list position\n */\n\n\nfunction _dispatchable(methodNames, xf, fn) {\n return function () {\n if (arguments.length === 0) {\n return fn();\n }\n\n var args = Array.prototype.slice.call(arguments, 0);\n var obj = args.pop();\n\n if (!_isArray(obj)) {\n var idx = 0;\n\n while (idx < methodNames.length) {\n if (typeof obj[methodNames[idx]] === 'function') {\n return obj[methodNames[idx]].apply(obj, args);\n }\n\n idx += 1;\n }\n\n if (_isTransformer(obj)) {\n var transducer = xf.apply(null, args);\n return transducer(obj);\n }\n }\n\n return fn.apply(this, arguments);\n };\n}\n\nmodule.exports = _dispatchable;","function _map(fn, functor) {\n var idx = 0;\n var len = functor.length;\n var result = Array(len);\n\n while (idx < len) {\n result[idx] = fn(functor[idx]);\n idx += 1;\n }\n\n return result;\n}\n\nmodule.exports = _map;","function _isString(x) {\n return Object.prototype.toString.call(x) === '[object String]';\n}\n\nmodule.exports = _isString;","var _curry1 =\n/*#__PURE__*/\nrequire(\"./_curry1\");\n\nvar _isArray =\n/*#__PURE__*/\nrequire(\"./_isArray\");\n\nvar _isString =\n/*#__PURE__*/\nrequire(\"./_isString\");\n/**\n * Tests whether or not an object is similar to an array.\n *\n * @private\n * @category Type\n * @category List\n * @sig * -> Boolean\n * @param {*} x The object to test.\n * @return {Boolean} `true` if `x` has a numeric length property and extreme indices defined; `false` otherwise.\n * @example\n *\n * _isArrayLike([]); //=> true\n * _isArrayLike(true); //=> false\n * _isArrayLike({}); //=> false\n * _isArrayLike({length: 10}); //=> false\n * _isArrayLike({0: 'zero', 9: 'nine', length: 10}); //=> true\n */\n\n\nvar _isArrayLike =\n/*#__PURE__*/\n_curry1(function isArrayLike(x) {\n if (_isArray(x)) {\n return true;\n }\n\n if (!x) {\n return false;\n }\n\n if (typeof x !== 'object') {\n return false;\n }\n\n if (_isString(x)) {\n return false;\n }\n\n if (x.nodeType === 1) {\n return !!x.length;\n }\n\n if (x.length === 0) {\n return true;\n }\n\n if (x.length > 0) {\n return x.hasOwnProperty(0) && x.hasOwnProperty(x.length - 1);\n }\n\n return false;\n});\n\nmodule.exports = _isArrayLike;","var XWrap =\n/*#__PURE__*/\nfunction () {\n function XWrap(fn) {\n this.f = fn;\n }\n\n XWrap.prototype['@@transducer/init'] = function () {\n throw new Error('init not implemented on XWrap');\n };\n\n XWrap.prototype['@@transducer/result'] = function (acc) {\n return acc;\n };\n\n XWrap.prototype['@@transducer/step'] = function (acc, x) {\n return this.f(acc, x);\n };\n\n return XWrap;\n}();\n\nfunction _xwrap(fn) {\n return new XWrap(fn);\n}\n\nmodule.exports = _xwrap;","function _arity(n, fn) {\n /* eslint-disable no-unused-vars */\n switch (n) {\n case 0:\n return function () {\n return fn.apply(this, arguments);\n };\n\n case 1:\n return function (a0) {\n return fn.apply(this, arguments);\n };\n\n case 2:\n return function (a0, a1) {\n return fn.apply(this, arguments);\n };\n\n case 3:\n return function (a0, a1, a2) {\n return fn.apply(this, arguments);\n };\n\n case 4:\n return function (a0, a1, a2, a3) {\n return fn.apply(this, arguments);\n };\n\n case 5:\n return function (a0, a1, a2, a3, a4) {\n return fn.apply(this, arguments);\n };\n\n case 6:\n return function (a0, a1, a2, a3, a4, a5) {\n return fn.apply(this, arguments);\n };\n\n case 7:\n return function (a0, a1, a2, a3, a4, a5, a6) {\n return fn.apply(this, arguments);\n };\n\n case 8:\n return function (a0, a1, a2, a3, a4, a5, a6, a7) {\n return fn.apply(this, arguments);\n };\n\n case 9:\n return function (a0, a1, a2, a3, a4, a5, a6, a7, a8) {\n return fn.apply(this, arguments);\n };\n\n case 10:\n return function (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) {\n return fn.apply(this, arguments);\n };\n\n default:\n throw new Error('First argument to _arity must be a non-negative integer no greater than ten');\n }\n}\n\nmodule.exports = _arity;","var _arity =\n/*#__PURE__*/\nrequire(\"./internal/_arity\");\n\nvar _curry2 =\n/*#__PURE__*/\nrequire(\"./internal/_curry2\");\n/**\n * Creates a function that is bound to a context.\n * Note: `R.bind` does not provide the additional argument-binding capabilities of\n * [Function.prototype.bind](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind).\n *\n * @func\n * @memberOf R\n * @since v0.6.0\n * @category Function\n * @category Object\n * @sig (* -> *) -> {*} -> (* -> *)\n * @param {Function} fn The function to bind to context\n * @param {Object} thisObj The context to bind `fn` to\n * @return {Function} A function that will execute in the context of `thisObj`.\n * @see R.partial\n * @example\n *\n * const log = R.bind(console.log, console);\n * R.pipe(R.assoc('a', 2), R.tap(log), R.assoc('a', 3))({a: 1}); //=> {a: 3}\n * // logs {a: 2}\n * @symb R.bind(f, o)(a, b) = f.call(o, a, b)\n */\n\n\nvar bind =\n/*#__PURE__*/\n_curry2(function bind(fn, thisObj) {\n return _arity(fn.length, function () {\n return fn.apply(thisObj, arguments);\n });\n});\n\nmodule.exports = bind;","var _isArrayLike =\n/*#__PURE__*/\nrequire(\"./_isArrayLike\");\n\nvar _xwrap =\n/*#__PURE__*/\nrequire(\"./_xwrap\");\n\nvar bind =\n/*#__PURE__*/\nrequire(\"../bind\");\n\nfunction _arrayReduce(xf, acc, list) {\n var idx = 0;\n var len = list.length;\n\n while (idx < len) {\n acc = xf['@@transducer/step'](acc, list[idx]);\n\n if (acc && acc['@@transducer/reduced']) {\n acc = acc['@@transducer/value'];\n break;\n }\n\n idx += 1;\n }\n\n return xf['@@transducer/result'](acc);\n}\n\nfunction _iterableReduce(xf, acc, iter) {\n var step = iter.next();\n\n while (!step.done) {\n acc = xf['@@transducer/step'](acc, step.value);\n\n if (acc && acc['@@transducer/reduced']) {\n acc = acc['@@transducer/value'];\n break;\n }\n\n step = iter.next();\n }\n\n return xf['@@transducer/result'](acc);\n}\n\nfunction _methodReduce(xf, acc, obj, methodName) {\n return xf['@@transducer/result'](obj[methodName](bind(xf['@@transducer/step'], xf), acc));\n}\n\nvar symIterator = typeof Symbol !== 'undefined' ? Symbol.iterator : '@@iterator';\n\nfunction _reduce(fn, acc, list) {\n if (typeof fn === 'function') {\n fn = _xwrap(fn);\n }\n\n if (_isArrayLike(list)) {\n return _arrayReduce(fn, acc, list);\n }\n\n if (typeof list['fantasy-land/reduce'] === 'function') {\n return _methodReduce(fn, acc, list, 'fantasy-land/reduce');\n }\n\n if (list[symIterator] != null) {\n return _iterableReduce(fn, acc, list[symIterator]());\n }\n\n if (typeof list.next === 'function') {\n return _iterableReduce(fn, acc, list);\n }\n\n if (typeof list.reduce === 'function') {\n return _methodReduce(fn, acc, list, 'reduce');\n }\n\n throw new TypeError('reduce: list must be array or iterable');\n}\n\nmodule.exports = _reduce;","module.exports = {\n init: function () {\n return this.xf['@@transducer/init']();\n },\n result: function (result) {\n return this.xf['@@transducer/result'](result);\n }\n};","var _curry2 =\n/*#__PURE__*/\nrequire(\"./_curry2\");\n\nvar _xfBase =\n/*#__PURE__*/\nrequire(\"./_xfBase\");\n\nvar XMap =\n/*#__PURE__*/\nfunction () {\n function XMap(f, xf) {\n this.xf = xf;\n this.f = f;\n }\n\n XMap.prototype['@@transducer/init'] = _xfBase.init;\n XMap.prototype['@@transducer/result'] = _xfBase.result;\n\n XMap.prototype['@@transducer/step'] = function (result, input) {\n return this.xf['@@transducer/step'](result, this.f(input));\n };\n\n return XMap;\n}();\n\nvar _xmap =\n/*#__PURE__*/\n_curry2(function _xmap(f, xf) {\n return new XMap(f, xf);\n});\n\nmodule.exports = _xmap;","var _arity =\n/*#__PURE__*/\nrequire(\"./_arity\");\n\nvar _isPlaceholder =\n/*#__PURE__*/\nrequire(\"./_isPlaceholder\");\n/**\n * Internal curryN function.\n *\n * @private\n * @category Function\n * @param {Number} length The arity of the curried function.\n * @param {Array} received An array of arguments received thus far.\n * @param {Function} fn The function to curry.\n * @return {Function} The curried function.\n */\n\n\nfunction _curryN(length, received, fn) {\n return function () {\n var combined = [];\n var argsIdx = 0;\n var left = length;\n var combinedIdx = 0;\n\n while (combinedIdx < received.length || argsIdx < arguments.length) {\n var result;\n\n if (combinedIdx < received.length && (!_isPlaceholder(received[combinedIdx]) || argsIdx >= arguments.length)) {\n result = received[combinedIdx];\n } else {\n result = arguments[argsIdx];\n argsIdx += 1;\n }\n\n combined[combinedIdx] = result;\n\n if (!_isPlaceholder(result)) {\n left -= 1;\n }\n\n combinedIdx += 1;\n }\n\n return left <= 0 ? fn.apply(this, combined) : _arity(left, _curryN(length, combined, fn));\n };\n}\n\nmodule.exports = _curryN;","var _arity =\n/*#__PURE__*/\nrequire(\"./internal/_arity\");\n\nvar _curry1 =\n/*#__PURE__*/\nrequire(\"./internal/_curry1\");\n\nvar _curry2 =\n/*#__PURE__*/\nrequire(\"./internal/_curry2\");\n\nvar _curryN =\n/*#__PURE__*/\nrequire(\"./internal/_curryN\");\n/**\n * Returns a curried equivalent of the provided function, with the specified\n * arity. The curried function has two unusual capabilities. First, its\n * arguments needn't be provided one at a time. If `g` is `R.curryN(3, f)`, the\n * following are equivalent:\n *\n * - `g(1)(2)(3)`\n * - `g(1)(2, 3)`\n * - `g(1, 2)(3)`\n * - `g(1, 2, 3)`\n *\n * Secondly, the special placeholder value [`R.__`](#__) may be used to specify\n * \"gaps\", allowing partial application of any combination of arguments,\n * regardless of their positions. If `g` is as above and `_` is [`R.__`](#__),\n * the following are equivalent:\n *\n * - `g(1, 2, 3)`\n * - `g(_, 2, 3)(1)`\n * - `g(_, _, 3)(1)(2)`\n * - `g(_, _, 3)(1, 2)`\n * - `g(_, 2)(1)(3)`\n * - `g(_, 2)(1, 3)`\n * - `g(_, 2)(_, 3)(1)`\n *\n * @func\n * @memberOf R\n * @since v0.5.0\n * @category Function\n * @sig Number -> (* -> a) -> (* -> a)\n * @param {Number} length The arity for the returned function.\n * @param {Function} fn The function to curry.\n * @return {Function} A new, curried function.\n * @see R.curry\n * @example\n *\n * const sumArgs = (...args) => R.sum(args);\n *\n * const curriedAddFourNumbers = R.curryN(4, sumArgs);\n * const f = curriedAddFourNumbers(1, 2);\n * const g = f(3);\n * g(4); //=> 10\n */\n\n\nvar curryN =\n/*#__PURE__*/\n_curry2(function curryN(length, fn) {\n if (length === 1) {\n return _curry1(fn);\n }\n\n return _arity(length, _curryN(length, [], fn));\n});\n\nmodule.exports = curryN;","var _curry2 =\n/*#__PURE__*/\nrequire(\"./internal/_curry2\");\n\nvar _dispatchable =\n/*#__PURE__*/\nrequire(\"./internal/_dispatchable\");\n\nvar _map =\n/*#__PURE__*/\nrequire(\"./internal/_map\");\n\nvar _reduce =\n/*#__PURE__*/\nrequire(\"./internal/_reduce\");\n\nvar _xmap =\n/*#__PURE__*/\nrequire(\"./internal/_xmap\");\n\nvar curryN =\n/*#__PURE__*/\nrequire(\"./curryN\");\n\nvar keys =\n/*#__PURE__*/\nrequire(\"./keys\");\n/**\n * Takes a function and\n * a [functor](https://github.com/fantasyland/fantasy-land#functor),\n * applies the function to each of the functor's values, and returns\n * a functor of the same shape.\n *\n * Ramda provides suitable `map` implementations for `Array` and `Object`,\n * so this function may be applied to `[1, 2, 3]` or `{x: 1, y: 2, z: 3}`.\n *\n * Dispatches to the `map` method of the second argument, if present.\n *\n * Acts as a transducer if a transformer is given in list position.\n *\n * Also treats functions as functors and will compose them together.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category List\n * @sig Functor f => (a -> b) -> f a -> f b\n * @param {Function} fn The function to be called on every element of the input `list`.\n * @param {Array} list The list to be iterated over.\n * @return {Array} The new list.\n * @see R.transduce, R.addIndex\n * @example\n *\n * const double = x => x * 2;\n *\n * R.map(double, [1, 2, 3]); //=> [2, 4, 6]\n *\n * R.map(double, {x: 1, y: 2, z: 3}); //=> {x: 2, y: 4, z: 6}\n * @symb R.map(f, [a, b]) = [f(a), f(b)]\n * @symb R.map(f, { x: a, y: b }) = { x: f(a), y: f(b) }\n * @symb R.map(f, functor_o) = functor_o.map(f)\n */\n\n\nvar map =\n/*#__PURE__*/\n_curry2(\n/*#__PURE__*/\n_dispatchable(['fantasy-land/map', 'map'], _xmap, function map(fn, functor) {\n switch (Object.prototype.toString.call(functor)) {\n case '[object Function]':\n return curryN(functor.length, function () {\n return fn.call(this, functor.apply(this, arguments));\n });\n\n case '[object Object]':\n return _reduce(function (acc, key) {\n acc[key] = fn(functor[key]);\n return acc;\n }, {}, keys(functor));\n\n default:\n return _map(fn, functor);\n }\n}));\n\nmodule.exports = map;","var _curry2 =\n/*#__PURE__*/\nrequire(\"./internal/_curry2\");\n\nvar map =\n/*#__PURE__*/\nrequire(\"./map\");\n/**\n * Returns a lens for the given getter and setter functions. The getter \"gets\"\n * the value of the focus; the setter \"sets\" the value of the focus. The setter\n * should not mutate the data structure.\n *\n * @func\n * @memberOf R\n * @since v0.8.0\n * @category Object\n * @typedefn Lens s a = Functor f => (a -> f a) -> s -> f s\n * @sig (s -> a) -> ((a, s) -> s) -> Lens s a\n * @param {Function} getter\n * @param {Function} setter\n * @return {Lens}\n * @see R.view, R.set, R.over, R.lensIndex, R.lensProp\n * @example\n *\n * const xLens = R.lens(R.prop('x'), R.assoc('x'));\n *\n * R.view(xLens, {x: 1, y: 2}); //=> 1\n * R.set(xLens, 4, {x: 1, y: 2}); //=> {x: 4, y: 2}\n * R.over(xLens, R.negate, {x: 1, y: 2}); //=> {x: -1, y: 2}\n */\n\n\nvar lens =\n/*#__PURE__*/\n_curry2(function lens(getter, setter) {\n return function (toFunctorFn) {\n return function (target) {\n return map(function (focus) {\n return setter(focus, target);\n }, toFunctorFn(getter(target)));\n };\n };\n});\n\nmodule.exports = lens;","/**\n * Determine if the passed argument is an integer.\n *\n * @private\n * @param {*} n\n * @category Type\n * @return {Boolean}\n */\nmodule.exports = Number.isInteger || function _isInteger(n) {\n return n << 0 === n;\n};","var _curry2 =\n/*#__PURE__*/\nrequire(\"./internal/_curry2\");\n\nvar _isString =\n/*#__PURE__*/\nrequire(\"./internal/_isString\");\n/**\n * Returns the nth element of the given list or string. If n is negative the\n * element at index length + n is returned.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category List\n * @sig Number -> [a] -> a | Undefined\n * @sig Number -> String -> String\n * @param {Number} offset\n * @param {*} list\n * @return {*}\n * @example\n *\n * const list = ['foo', 'bar', 'baz', 'quux'];\n * R.nth(1, list); //=> 'bar'\n * R.nth(-1, list); //=> 'quux'\n * R.nth(-99, list); //=> undefined\n *\n * R.nth(2, 'abc'); //=> 'c'\n * R.nth(3, 'abc'); //=> ''\n * @symb R.nth(-1, [a, b, c]) = c\n * @symb R.nth(0, [a, b, c]) = a\n * @symb R.nth(1, [a, b, c]) = b\n */\n\n\nvar nth =\n/*#__PURE__*/\n_curry2(function nth(offset, list) {\n var idx = offset < 0 ? list.length + offset : offset;\n return _isString(list) ? list.charAt(idx) : list[idx];\n});\n\nmodule.exports = nth;","var _curry2 =\n/*#__PURE__*/\nrequire(\"./internal/_curry2\");\n\nvar _isInteger =\n/*#__PURE__*/\nrequire(\"./internal/_isInteger\");\n\nvar nth =\n/*#__PURE__*/\nrequire(\"./nth\");\n/**\n * Retrieves the values at given paths of an object.\n *\n * @func\n * @memberOf R\n * @since v0.27.0\n * @category Object\n * @typedefn Idx = [String | Int]\n * @sig [Idx] -> {a} -> [a | Undefined]\n * @param {Array} pathsArray The array of paths to be fetched.\n * @param {Object} obj The object to retrieve the nested properties from.\n * @return {Array} A list consisting of values at paths specified by \"pathsArray\".\n * @see R.path\n * @example\n *\n * R.paths([['a', 'b'], ['p', 0, 'q']], {a: {b: 2}, p: [{q: 3}]}); //=> [2, 3]\n * R.paths([['a', 'b'], ['p', 'r']], {a: {b: 2}, p: [{q: 3}]}); //=> [2, undefined]\n */\n\n\nvar paths =\n/*#__PURE__*/\n_curry2(function paths(pathsArray, obj) {\n return pathsArray.map(function (paths) {\n var val = obj;\n var idx = 0;\n var p;\n\n while (idx < paths.length) {\n if (val == null) {\n return;\n }\n\n p = paths[idx];\n val = _isInteger(p) ? nth(p, val) : val[p];\n idx += 1;\n }\n\n return val;\n });\n});\n\nmodule.exports = paths;","var _curry2 =\n/*#__PURE__*/\nrequire(\"./internal/_curry2\");\n\nvar paths =\n/*#__PURE__*/\nrequire(\"./paths\");\n/**\n * Retrieve the value at a given path.\n *\n * @func\n * @memberOf R\n * @since v0.2.0\n * @category Object\n * @typedefn Idx = String | Int\n * @sig [Idx] -> {a} -> a | Undefined\n * @param {Array} path The path to use.\n * @param {Object} obj The object to retrieve the nested property from.\n * @return {*} The data at `path`.\n * @see R.prop, R.nth\n * @example\n *\n * R.path(['a', 'b'], {a: {b: 2}}); //=> 2\n * R.path(['a', 'b'], {c: {b: 2}}); //=> undefined\n * R.path(['a', 'b', 0], {a: {b: [1, 2, 3]}}); //=> 1\n * R.path(['a', 'b', -2], {a: {b: [1, 2, 3]}}); //=> 2\n */\n\n\nvar path =\n/*#__PURE__*/\n_curry2(function path(pathAr, obj) {\n return paths([pathAr], obj)[0];\n});\n\nmodule.exports = path;","var _curry2 =\n/*#__PURE__*/\nrequire(\"./internal/_curry2\");\n\nvar path =\n/*#__PURE__*/\nrequire(\"./path\");\n/**\n * Returns a function that when supplied an object returns the indicated\n * property of that object, if it exists.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category Object\n * @typedefn Idx = String | Int\n * @sig Idx -> {s: a} -> a | Undefined\n * @param {String|Number} p The property name or array index\n * @param {Object} obj The object to query\n * @return {*} The value at `obj.p`.\n * @see R.path, R.nth\n * @example\n *\n * R.prop('x', {x: 100}); //=> 100\n * R.prop('x', {}); //=> undefined\n * R.prop(0, [100]); //=> 100\n * R.compose(R.inc, R.prop('x'))({ x: 3 }) //=> 4\n */\n\n\nvar prop =\n/*#__PURE__*/\n_curry2(function prop(p, obj) {\n return path([p], obj);\n});\n\nmodule.exports = prop;","var _curry1 =\n/*#__PURE__*/\nrequire(\"./internal/_curry1\");\n\nvar assoc =\n/*#__PURE__*/\nrequire(\"./assoc\");\n\nvar lens =\n/*#__PURE__*/\nrequire(\"./lens\");\n\nvar prop =\n/*#__PURE__*/\nrequire(\"./prop\");\n/**\n * Returns a lens whose focus is the specified property.\n *\n * @func\n * @memberOf R\n * @since v0.14.0\n * @category Object\n * @typedefn Lens s a = Functor f => (a -> f a) -> s -> f s\n * @sig String -> Lens s a\n * @param {String} k\n * @return {Lens}\n * @see R.view, R.set, R.over\n * @example\n *\n * const xLens = R.lensProp('x');\n *\n * R.view(xLens, {x: 1, y: 2}); //=> 1\n * R.set(xLens, 4, {x: 1, y: 2}); //=> {x: 4, y: 2}\n * R.over(xLens, R.negate, {x: 1, y: 2}); //=> {x: -1, y: 2}\n */\n\n\nvar lensProp =\n/*#__PURE__*/\n_curry1(function lensProp(k) {\n return lens(prop(k), assoc(k));\n});\n\nmodule.exports = lensProp;","import { isThenable } from '../utils/util';\n\nimport actionTracker from '../core/actionTracker';\nimport curryN from 'ramda/src/curryN';\nimport { ITrackerData } from 'src/types';\n\nconst before = curryN(\n 2,\n (trackFn: Function | string | Object, fn: Function) =>\n function (...args: any) {\n if (typeof trackFn === 'function') {\n try {\n let result = trackFn.apply(this, args);\n if (typeof result === 'object') {\n actionTracker.track(result);\n }\n } catch (e) {\n console.error(e);\n }\n } else if (typeof trackFn === 'object') {\n actionTracker.track(trackFn as ITrackerData);\n } else if (typeof trackFn === 'string') {\n const data = {\n trackId: trackFn\n };\n actionTracker.track(data as ITrackerData);\n }\n const evalF = function () {\n setTimeout(() => {\n fn.apply(this, args);\n }, 300);\n };\n return evalF.apply(this);\n }\n);\n\nconst after = curryN(\n 2,\n (trackFn: Function | string | Object, fn: Function) =>\n function (...args: any) {\n const r: Promise = fn.apply(this, args);\n\n const evalF = () => {\n if (typeof trackFn === 'function') {\n try {\n let result = trackFn.apply(this, args);\n if (typeof result === 'object') {\n actionTracker.track(result);\n }\n } catch (e) {\n console.error(e);\n }\n } else if (typeof trackFn === 'object') {\n actionTracker.track(trackFn as ITrackerData);\n } else if (typeof trackFn === 'string') {\n const data = {\n trackId: trackFn\n };\n actionTracker.track(data as ITrackerData);\n }\n };\n\n if (isThenable(r)) {\n return r.then((rr) => {\n evalF();\n return rr;\n });\n }\n\n evalF();\n return r;\n }\n);\n\nexport { before, after };\n","import actionTracker from '../core/actionTracker';\nimport { notChanged, isEmpty } from '../utils/util';\nimport durationTime from '../core/durationTime';\nconst findIndex = function (arr: any[], callback: (item: any, index: number) => {}) {\n for (var i = 0, len = arr.length; i < len; i++) {\n if (callback(arr[i], i)) {\n return i;\n }\n }\n return -1;\n};\n\nconst generate = function (type: string) {\n let watch: any[] = [];\n\n const track = {\n bind(el: HTMLElement, binding: any, vnode: any) {\n let index = findIndex(watch, (element) => element === el);\n let isWatched = index !== -1;\n if (el.style.display === 'none') {\n if (!isWatched) watch.push(el);\n return;\n } else {\n if (isWatched) watch.splice(index, 1);\n }\n\n if (!isWatched && (notChanged(binding) || isEmpty(binding))) return;\n\n let info: any = {};\n\n if (typeof binding.value === 'object') {\n info = binding.value;\n //if (value.pageURL) args.push(value.pageURL)\n } else if (typeof binding.value === 'string' && binding.value) {\n info.trackId = binding.value;\n }\n\n if (type === 'PAGE') {\n actionTracker.trackPage(info);\n } else {\n actionTracker.trackView(el, info);\n }\n },\n unbind(el: HTMLElement, binding: any) {\n let index = findIndex(watch, (element) => element === el);\n if (index !== -1) watch.splice(index, 1);\n if (type !== 'PAGE') {\n let info: any = {};\n\n if (typeof binding.value === 'object') {\n info = binding.value;\n //if (value.pageURL) args.push(value.pageURL)\n } else if (typeof binding.value === 'string' && binding.value) {\n info.trackId = binding.value;\n }\n if (info.trackId) {\n durationTime.end(info);\n }\n }\n },\n update(el: HTMLElement, binding: any, vnode: any) {}\n };\n\n track.update = track.bind;\n return track;\n};\n\nexport default generate;\n","import generate from './generate';\n\nexport default generate('VIEW');\n","import { ITrackerData } from 'src/types';\nimport actionTracker from '../core/actionTracker';\nimport { notChanged, isEmpty } from '../utils/util';\n\nexport default function (el: HTMLElement, binding: any) {\n if (notChanged(binding) || isEmpty(binding)) {\n return;\n }\n\n let info: ITrackerData = {};\n if (typeof binding.value === 'object' && binding.value) {\n info = binding.value as ITrackerData;\n } else if (typeof binding.value === 'string') {\n info.trackId = binding.value;\n } else if (typeof binding.value === 'number') {\n info.trackId = binding.value + '';\n }\n el._trackerInfo = info;\n el._isWatchTrack = true; //去除自动点击埋点\n\n let events = Object.keys(binding.modifiers).filter((modifier) => {\n return binding.modifiers[modifier];\n });\n if (!events.length) events.push('click');\n\n events.forEach((event: string) => {\n el.removeEventListener(event, handleEvent, true);\n el.addEventListener(event, handleEvent, true);\n });\n}\n\nfunction handleEvent(e: Event) {\n this._trackerInfo.eventName = e.type.toUpperCase();\n if (this.tagName === 'A' && this.href) {\n actionTracker.trackLink(this, this._trackerInfo as ITrackerData);\n } else {\n actionTracker.trackDom(this, this._trackerInfo as ITrackerData);\n }\n}\n","import generate from './generate';\n\nexport default generate('PAGE');\n","/**\n * EvEmitter v2.1.1\n * Lil' event emitter\n * MIT License\n */\n\n( function( global, factory ) {\n // universal module definition\n if ( typeof module == 'object' && module.exports ) {\n // CommonJS - Browserify, Webpack\n module.exports = factory();\n } else {\n // Browser globals\n global.EvEmitter = factory();\n }\n\n}( typeof window != 'undefined' ? window : this, function() {\n\nfunction EvEmitter() {}\n\nlet proto = EvEmitter.prototype;\n\nproto.on = function( eventName, listener ) {\n if ( !eventName || !listener ) return this;\n\n // set events hash\n let events = this._events = this._events || {};\n // set listeners array\n let listeners = events[ eventName ] = events[ eventName ] || [];\n // only add once\n if ( !listeners.includes( listener ) ) {\n listeners.push( listener );\n }\n\n return this;\n};\n\nproto.once = function( eventName, listener ) {\n if ( !eventName || !listener ) return this;\n\n // add event\n this.on( eventName, listener );\n // set once flag\n // set onceEvents hash\n let onceEvents = this._onceEvents = this._onceEvents || {};\n // set onceListeners object\n let onceListeners = onceEvents[ eventName ] = onceEvents[ eventName ] || {};\n // set flag\n onceListeners[ listener ] = true;\n\n return this;\n};\n\nproto.off = function( eventName, listener ) {\n let listeners = this._events && this._events[ eventName ];\n if ( !listeners || !listeners.length ) return this;\n\n let index = listeners.indexOf( listener );\n if ( index != -1 ) {\n listeners.splice( index, 1 );\n }\n\n return this;\n};\n\nproto.emitEvent = function( eventName, args ) {\n let listeners = this._events && this._events[ eventName ];\n if ( !listeners || !listeners.length ) return this;\n\n // copy over to avoid interference if .off() in listener\n listeners = listeners.slice( 0 );\n args = args || [];\n // once stuff\n let onceListeners = this._onceEvents && this._onceEvents[ eventName ];\n\n for ( let listener of listeners ) {\n let isOnce = onceListeners && onceListeners[ listener ];\n if ( isOnce ) {\n // remove listener\n // remove before trigger to prevent recursion\n this.off( eventName, listener );\n // unset once flag\n delete onceListeners[ listener ];\n }\n // trigger listener\n listener.apply( this, args );\n }\n\n return this;\n};\n\nproto.allOff = function() {\n delete this._events;\n delete this._onceEvents;\n return this;\n};\n\nreturn EvEmitter;\n\n} ) );\n","/*!\n * imagesLoaded v5.0.0\n * JavaScript is all like \"You images are done yet or what?\"\n * MIT License\n */\n\n(function (window, factory) {\n // universal module definition\n if (typeof module == \"object\" && module.exports) {\n // CommonJS\n module.exports = factory(window, require(\"ev-emitter\"));\n } else {\n // browser global\n window.imagesLoaded = factory(window, window.EvEmitter);\n }\n})(\n typeof window !== \"undefined\" ? window : this,\n function factory(window, EvEmitter) {\n let $ = window.jQuery;\n let console = window.console;\n\n // -------------------------- helpers -------------------------- //\n\n // turn element or nodeList into an array\n function makeArray(obj) {\n // use object if already an array\n if (Array.isArray(obj)) return obj;\n\n let isArrayLike = typeof obj == \"object\" && typeof obj.length == \"number\";\n // convert nodeList to array\n if (isArrayLike) return [...obj];\n\n // array of single index\n return [obj];\n }\n\n // -------------------------- imagesLoaded -------------------------- //\n\n /**\n * @param {[Array, Element, NodeList, String]} elem\n * @param {[Object, Function]} options - if function, use as callback\n * @param {Function} onAlways - callback function\n * @returns {ImagesLoaded}\n */\n function ImagesLoaded(elem, options, onAlways) {\n // coerce ImagesLoaded() without new, to be new ImagesLoaded()\n if (!(this instanceof ImagesLoaded)) {\n return new ImagesLoaded(elem, options, onAlways);\n }\n // use elem as selector string\n let queryElem = elem;\n if (typeof elem == \"string\") {\n queryElem = document.querySelectorAll(elem);\n }\n // bail if bad element\n if (!queryElem) {\n console.error(`Bad element for imagesLoaded ${queryElem || elem}`);\n return;\n }\n\n this.elements = makeArray(queryElem);\n this.options = {};\n // shift arguments if no options set\n if (typeof options == \"function\") {\n onAlways = options;\n } else {\n Object.assign(this.options, options);\n }\n\n if (onAlways) this.on(\"always\", onAlways);\n\n this.getImages();\n // add jQuery Deferred object\n if ($) this.jqDeferred = new $.Deferred();\n\n // HACK check async to allow time to bind listeners\n setTimeout(this.check.bind(this));\n }\n\n ImagesLoaded.prototype = Object.create(EvEmitter.prototype);\n\n ImagesLoaded.prototype.getImages = function () {\n this.images = [];\n\n // filter & find items if we have an item selector\n this.elements.forEach(this.addElementImages, this);\n };\n\n const elementNodeTypes = [1, 9, 11];\n\n /**\n * @param {Node} elem\n */\n ImagesLoaded.prototype.addElementImages = function (elem) {\n // filter siblings\n if (elem.nodeName === \"IMG\") {\n this.addImage(elem);\n }\n // get background image on element\n if (this.options.background === true) {\n this.addElementBackgroundImages(elem);\n }\n\n // find children\n // no non-element nodes, #143\n let { nodeType } = elem;\n if (!nodeType || !elementNodeTypes.includes(nodeType)) return;\n\n let childImgs = elem.querySelectorAll(\"img\");\n // concat childElems to filterFound array\n for (let img of childImgs) {\n this.addImage(img);\n }\n\n // get child background images\n if (typeof this.options.background == \"string\") {\n let children = elem.querySelectorAll(this.options.background);\n for (let child of children) {\n this.addElementBackgroundImages(child);\n }\n }\n };\n\n const reURL = /url\\((['\"])?(.*?)\\1\\)/gi;\n\n ImagesLoaded.prototype.addElementBackgroundImages = function (elem) {\n let style = getComputedStyle(elem);\n // Firefox returns null if in a hidden iframe https://bugzil.la/548397\n if (!style) return;\n\n // get url inside url(\"...\")\n let matches = reURL.exec(style.backgroundImage);\n while (matches !== null) {\n let url = matches && matches[2];\n if (url) {\n this.addBackground(url, elem);\n }\n matches = reURL.exec(style.backgroundImage);\n }\n };\n\n /**\n * @param {Image} img\n */\n ImagesLoaded.prototype.addImage = function (img) {\n let loadingImage = new LoadingImage(img);\n this.images.push(loadingImage);\n };\n\n ImagesLoaded.prototype.addBackground = function (url, elem) {\n let background = new Background(url, elem);\n this.images.push(background);\n };\n\n ImagesLoaded.prototype.check = function () {\n this.progressedCount = 0;\n this.hasAnyBroken = false;\n // complete if no images\n if (!this.images.length) {\n this.complete();\n return;\n }\n\n /* eslint-disable-next-line func-style */\n let onProgress = (image, elem, message) => {\n // HACK - Chrome triggers event before object properties have changed. #83\n setTimeout(() => {\n this.progress(image, elem, message);\n });\n };\n\n this.images.forEach(function (loadingImage) {\n loadingImage.once(\"progress\", onProgress);\n loadingImage.check();\n });\n };\n\n ImagesLoaded.prototype.progress = function (image, elem, message) {\n this.progressedCount++;\n this.hasAnyBroken = this.hasAnyBroken || !image.isLoaded;\n // progress event\n this.emitEvent(\"progress\", [this, image, elem]);\n if (this.jqDeferred && this.jqDeferred.notify) {\n this.jqDeferred.notify(this, image);\n }\n // check if completed\n if (this.progressedCount === this.images.length) {\n this.complete();\n }\n\n if (this.options.debug && console) {\n console.log(`progress: ${message}`, image, elem);\n }\n };\n\n ImagesLoaded.prototype.complete = function () {\n let eventName = this.hasAnyBroken ? \"fail\" : \"done\";\n this.isComplete = true;\n this.emitEvent(eventName, [this]);\n this.emitEvent(\"always\", [this]);\n if (this.jqDeferred) {\n let jqMethod = this.hasAnyBroken ? \"reject\" : \"resolve\";\n this.jqDeferred[jqMethod](this);\n }\n };\n\n // -------------------------- -------------------------- //\n\n function LoadingImage(img) {\n this.img = img;\n }\n\n LoadingImage.prototype = Object.create(EvEmitter.prototype);\n\n LoadingImage.prototype.check = function () {\n // If complete is true and browser supports natural sizes,\n // try to check for image status manually.\n let isComplete = this.getIsImageComplete();\n if (isComplete) {\n // report based on naturalWidth\n this.confirm(this.img.naturalWidth !== 0, \"naturalWidth\");\n return;\n }\n\n // If none of the checks above matched, simulate loading on detached element.\n this.proxyImage = new Image();\n // add crossOrigin attribute. #204\n if (this.img.crossOrigin) {\n this.proxyImage.crossOrigin = this.img.crossOrigin;\n }\n this.proxyImage.addEventListener(\"load\", this);\n this.proxyImage.addEventListener(\"error\", this);\n // bind to image as well for Firefox. #191\n this.img.addEventListener(\"load\", this);\n this.img.addEventListener(\"error\", this);\n this.proxyImage.src = this.img.currentSrc || this.img.src;\n };\n\n LoadingImage.prototype.getIsImageComplete = function () {\n // check for non-zero, non-undefined naturalWidth\n // fixes Safari+InfiniteScroll+Masonry bug infinite-scroll#671\n return this.img.complete && this.img.naturalWidth;\n };\n\n LoadingImage.prototype.confirm = function (isLoaded, message) {\n this.isLoaded = isLoaded;\n let { parentNode } = this.img;\n // emit progress with parent or self \n let elem =\n parentNode && parentNode.nodeName && parentNode.nodeName === \"PICTURE\"\n ? parentNode\n : this.img;\n this.emitEvent(\"progress\", [this, elem, message]);\n };\n\n // ----- events ----- //\n\n // trigger specified handler for event type\n LoadingImage.prototype.handleEvent = function (event) {\n let method = \"on\" + event.type;\n if (this[method]) {\n this[method](event);\n }\n };\n\n LoadingImage.prototype.onload = function () {\n this.confirm(true, \"onload\");\n this.unbindEvents();\n };\n\n LoadingImage.prototype.onerror = function () {\n this.confirm(false, \"onerror\");\n this.unbindEvents();\n };\n\n LoadingImage.prototype.unbindEvents = function () {\n this.proxyImage.removeEventListener(\"load\", this);\n this.proxyImage.removeEventListener(\"error\", this);\n this.img.removeEventListener(\"load\", this);\n this.img.removeEventListener(\"error\", this);\n };\n\n // -------------------------- Background -------------------------- //\n\n function Background(url, element) {\n this.url = url;\n this.element = element;\n this.img = new Image();\n }\n\n // inherit LoadingImage prototype\n Background.prototype = Object.create(LoadingImage.prototype);\n\n Background.prototype.check = function () {\n this.img.addEventListener(\"load\", this);\n this.img.addEventListener(\"error\", this);\n this.img.src = this.url;\n // check if image is already complete\n let isComplete = this.getIsImageComplete();\n if (isComplete) {\n this.confirm(this.img.naturalWidth !== 0, \"naturalWidth\");\n this.unbindEvents();\n }\n };\n\n Background.prototype.unbindEvents = function () {\n this.img.removeEventListener(\"load\", this);\n this.img.removeEventListener(\"error\", this);\n };\n\n Background.prototype.confirm = function (isLoaded, message) {\n this.isLoaded = isLoaded;\n this.emitEvent(\"progress\", [this, this.element, message]);\n };\n\n // -------------------------- jQuery -------------------------- //\n\n ImagesLoaded.makeJQueryPlugin = function (jQuery) {\n jQuery = jQuery || window.jQuery;\n if (!jQuery) return;\n\n // set local variable\n $ = jQuery;\n // $().imagesLoaded()\n $.fn.imagesLoaded = function (options, onAlways) {\n let instance = new ImagesLoaded(this, options, onAlways);\n return instance.jqDeferred.promise($(this));\n };\n };\n // try making plugin\n ImagesLoaded.makeJQueryPlugin();\n\n // -------------------------- -------------------------- //\n\n return ImagesLoaded;\n }\n);\n","import imagesLoaded from '@zyf2e/imagesloaded';\nimport actionTracker from './actionTracker';\n\n/**\n *\n * @returns 获取页面性能指标\n */\nconst getPageNav = () => {\n try {\n const pageNav = performance.getEntriesByType('navigation')[0].toJSON();\n return {\n //阶段指标\n unload: Math.round(pageNav.unloadEventEnd - pageNav.unloadEventStart), //前一个页面卸载耗时\n redirect: Math.round(pageNav.redirectEnd - pageNav.redirectStart), //重定向耗时\n appCache: Math.round(pageNav.domainLookupStart - pageNav.fetchStart), //缓存耗时\n dns: Math.round(pageNav.domainLookupEnd - pageNav.domainLookupStart), //DNS 解析耗时\n tcp: Math.round(pageNav.connectEnd - pageNav.connectStart), //TCP 连接耗时\n ssl: Math.round(pageNav.connectEnd - pageNav.secureConnectionStart), //SSL 安全连接耗时\n ttfb: Math.round(pageNav.responseStart - pageNav.requestStart), //Time to First Byte(TTFB),网络请求耗时\n response: Math.round(pageNav.responseEnd - pageNav.responseStart), //数据传输耗时\n dom: Math.round(pageNav.domInteractive - pageNav.responseEnd), //可交互 DOM 解析耗时\n dom2: Math.round(pageNav.domContentLoadedEventStart - pageNav.domInteractive), //剩余 DOM 解析耗时\n DCL: Math.round(pageNav.domContentLoadedEventEnd - pageNav.domContentLoadedEventStart), //DOMContentLoaded 事件耗时\n resources: Math.round(pageNav.loadEventStart - pageNav.domContentLoadedEventEnd), //资源加载耗时\n onLoad: Math.round(pageNav.loadEventEnd - pageNav.loadEventStart), //onLoad事件耗时\n\n //关键指标\n firstbyte: Math.round(pageNav.responseStart - pageNav.domainLookupStart), //首包时间\n fpt: Math.round(pageNav.responseEnd - pageNav.fetchStart), //首次渲染时间\n tti: Math.round(pageNav.domInteractive - pageNav.fetchStart), //完成 DOM 构建\n ready: Math.round(pageNav.domContentLoadedEventEnd - pageNav.fetchStart), //DOM Ready\n load: Math.round(pageNav.loadEventStart - pageNav.fetchStart), //页面完全加载时间\n act: 0,\n cct: 0,\n apiNum: 0,\n ast: 0,\n att: 0\n };\n } catch (error) {\n return null;\n }\n};\n\nconst getResource = () => {\n try {\n const sources = performance\n .getEntriesByType('resource')\n .filter((item) => (item.duration > 200 || item['initiatorType'] === 'xmlhttprequest') && !/log/.test(item.name))\n .reduce((total, item) => {\n total[item.name.replace(/^.*?\\.(com|cn|vip|net)/, '').replace(/\\?.*$/, '')] = Math.round(item.duration);\n return total;\n }, {});\n\n return sources;\n } catch (error) {\n return null;\n }\n};\n\nexport const initPerformance = () => {\n //劫持xhr\n // injectedXHR();\n\n // 接口完成请求 和 window.onload 执行顺序不确定\n let isListening = false;\n let isLoaded = false;\n let isSend = false;\n\n let isFirstApi = true;\n\n const openApiList = [] as string[];\n const successApiList = [] as string[];\n let url = window.location.href;\n\n let timer: number = null;\n\n function removeListerner() {\n window.removeEventListener('xhrOpen', onOpen);\n window.removeEventListener('xhrFinish', onSuccess);\n }\n\n function onOpen(e: any) {\n isListening = true;\n if (isFirstApi) {\n isFirstApi = false;\n try {\n performance.mark('ending_ast');\n } catch (error) {}\n }\n openApiList.push(e.detail.url);\n if (openApiList.length > 100) {\n removeListerner();\n }\n }\n function onSuccess(e: any) {\n successApiList.push(\n e.detail.url.replace(/^.*?\\.(com|cn|vip|net)/, '').replace(/\\?.*$/, '') + ':' + e.detail.duration\n );\n\n // 100ms 无进行中的请求 则初始化接口全部完成\n clearTimeout(timer);\n timer = setTimeout(() => {\n if (successApiList.length === openApiList.length) {\n try {\n removeListerner();\n performance.mark('ending_act');\n imagesLoaded(window.document.body, { background: '.bg' }, function (a) {\n performance.mark('ending_cct');\n isListening = false;\n // window load 在前面\n if (isLoaded && !isSend) {\n isSend = true;\n finishListening();\n }\n });\n } catch (error) {}\n }\n }, 100);\n }\n window.addEventListener('xhrOpen', onOpen);\n window.addEventListener('xhrFinish', onSuccess);\n\n function onLoad() {\n try {\n url = window.location.href;\n\n imagesLoaded(window.document.body, { background: '.bg' }, function () {\n performance.mark('ending_cct');\n\n isLoaded = true;\n //延迟1000ms 后判断是否有请求监听 无则上报\n setTimeout(() => {\n if (!isListening && !isSend) {\n isSend = true;\n removeListerner();\n finishListening();\n }\n }, 1000);\n });\n } catch (e) {}\n }\n\n if (document.readyState === 'complete') {\n onLoad();\n } else {\n window.addEventListener('load', onLoad);\n }\n\n function finishListening() {\n //监听期间页面如果发送跳转 则弃用性能数据\n if (url !== window.location.href) {\n return;\n }\n\n //hash路由不同path就是不同项目 history路由则不通域名不通项目\n const key = /^#\\//.test(window.location.hash) ? 'isFirstLoad__' + window.location.pathname : 'isFirstLoad';\n const cache = window.localStorage.getItem(key);\n\n //是否第一次访问\n const isFirstLoad = !cache;\n\n const cacheTime = cache ? Date.now() - Number(cache) : null;\n\n window.localStorage.setItem(key, String(Date.now()));\n\n const data = getPageNav();\n if (!data) {\n return;\n }\n\n try {\n const cctMeasure = performance.measure('multiply_measure', 'fetchStart', 'ending_cct');\n //@ts-ignore\n if (!!cctMeasure) {\n //@ts-ignore\n data.cct = Math.round(cctMeasure.duration);\n }\n } catch (error) {}\n\n try {\n const actMeasure = performance.measure('multiply_measure', 'fetchStart', 'ending_act');\n //@ts-ignore\n if (!!actMeasure) {\n //@ts-ignore\n data.act = Math.round(actMeasure.duration);\n }\n } catch (error) {}\n\n try {\n const astMeasure = performance.measure('multiply_measure', 'fetchStart', 'ending_ast');\n //@ts-ignore\n if (!!astMeasure) {\n //@ts-ignore\n data.ast = Math.round(astMeasure.duration);\n }\n } catch (error) {}\n\n //无效数据\n if (data.load <= 0 || data.cct <= 0) {\n return;\n }\n\n if (data.ast === 0) {\n data.ast = data.cct;\n }\n\n if (data.act === 0) {\n data.act = data.cct;\n }\n\n data.att = data.act - data.ast;\n data.apiNum = successApiList.length;\n //资源加载日志\n const sources = getResource();\n\n function sendLog() {\n //性能指标日志\n actionTracker.trackLog({\n trackId: isFirstLoad ? 'performance-index-first-log' : 'performance-index-log',\n custom: data,\n durationTime: cacheTime,\n supportedAbi: JSON.stringify(successApiList)\n });\n\n if (sources && Object.keys(sources).length > 0) {\n actionTracker.trackLog({\n trackId: isFirstLoad ? 'performance-resource-first-log' : 'performance-resource-log',\n custom: sources,\n durationTime: cacheTime,\n supportedAbi: JSON.stringify(successApiList)\n });\n }\n }\n if (typeof (window as any).requestIdleCallback === 'function') {\n (window as any).requestIdleCallback(sendLog);\n } else {\n sendLog();\n }\n }\n};\n","import { getConfig } from './config';\nimport { getDomPath, pause } from 'src/utils/util';\nimport actionTracker from './actionTracker';\n\nlet curAutoPageId='';\n\nexport function getPageCode(url: string) {\n let path='';\n let hash=''\n //去除离线H5的本地路径\n if (/file:/.test(url)) {\n const pathMatch=url.match(/(app_flutter|Documents)([^?#].*)/)\n if(pathMatch&&pathMatch[2]){\n path=pathMatch[2]; //todo 抹平path\n }\n const hashMatch=url.match(/#([^?#]*)/)\n if(hashMatch&&pathMatch[1]){\n hash=pathMatch[1];\n }\n }else{\n path=window.location.pathname;\n hash=window.location.hash.replace(/\\?.*$/,'');\n }\n //去除路径参数\n if(hash&&typeof hash==='string'){\n hash= hash.replace(/([^/]*\\/)\\w*\\d+[a-zA-Z]+\\d+.*$/,'$1param').replace(/\\d/g,'').replace('#','').replace(/^\\/|\\/$/g,'').toLowerCase().trim();\n }\n if(path&&typeof path==='string'){\n path= path.replace(/([^/]*\\/)\\w*\\d+[a-zA-Z]+\\d+.*$/,'$1param').replace(/\\d/g,'').replace('index.html','').replace(/^\\/|\\/$/g,'').toLowerCase().trim();\n }\n \n return [path,hash].filter(item=>!!item).join('_').replace(/[/.]/g,'-')\n}\n\nfunction getDomInfo(element:HTMLElement){\n const { autoTrackPrefix } = getConfig();\n let originElement=element;\n const domPath=getDomPath(element);\n const prefix=curAutoPageId?curAutoPageId.replace('autopage-','autoevent-'): `${autoTrackPrefix}-autoevent-${getPageCode(window.location.href)}`;\n \n while (element && element.tagName && element.tagName.toUpperCase() !== 'HTML' && typeof element.textContent==='string') {\n\n const text=element.textContent.substring(0, 10).trim();\n if(text){\n return {\n domPath,\n isAutoTrack: true,\n autoTrackId:curAutoPageId,\n trackId:`${prefix}_${getDomPath(element).replace(/>[^>]*[-_]/g,'_').replace(/>/g,'_').replace(/[#.]/g,'')}`,\n eventName:`点击${element.tagName}-${text}(无痕)`\n }\n }\n\n element = element.parentNode as HTMLElement & HTMLLinkElement;\n }\n \n \n return {\n domPath,\n isAutoTrack: true,\n autoTrackId:curAutoPageId,\n trackId:prefix+\"_\"+domPath.replace(/>[^>]*[-_]/g,'_').replace(/[#.]/g,''),\n eventName:`点击${originElement.tagName}(无痕)`\n }\n}\n\nfunction getPageInfo(){\n const { autoTrackPrefix } = getConfig();\n let trackId = `${autoTrackPrefix}-autopage-${getPageCode(window.location.href)}`;\n return {\n trackId,\n eventName: `页面曝光-${window.document.title}(无痕)`,\n isAutoTrack: true\n }\n}\n\nexport async function watchRouteChange() {\n const { autoTrackPage } = getConfig();\n if (!autoTrackPage) {\n return;\n }\n let info = getPageInfo();\n if(curAutoPageId===info.trackId){// 延迟300ms或再次获取路由信息\n await pause(300);\n info = getPageInfo();\n }\n curAutoPageId=info.trackId;\n actionTracker.trackAutoPage(info);\n}\n\nfunction triggerTrack(dom: HTMLElement) {\n actionTracker.trackAutoEvent(getDomInfo(dom));\n}\n\nexport function watchClick() {\n type NewMouseEvent = MouseEvent & {\n path: HTMLLinkElement[] & HTMLInputElement[];\n };\n\n document.addEventListener(\n 'click',\n (e: NewMouseEvent) => {\n let element = e.target as HTMLElement & HTMLLinkElement;\n const { autoTrackClick } = getConfig();\n\n let hasTrack = false;\n while (element && element.tagName && element.tagName.toUpperCase() !== 'HTML' && element.getAttribute) {\n // const href = element.getAttribute('href');\n // 阻止a标签跳转\n // if (href && element.tagName === 'A' && /\\//.test(href) && config.delayLink) {\n // if (e.preventDefault) {\n // e.preventDefault();\n // } else {\n // window.event.returnValue = true;\n // }\n // }\n\n //是否有埋点属性或者交互标签\n\n if (element.getAttribute('data-track')) {\n actionTracker.trackDom(element);\n hasTrack = true;\n } else if (element._isWatchTrack) {\n hasTrack = true;\n } else if (\n autoTrackClick &&\n (element.tagName === 'A' ||\n element.tagName === 'BUTTON' ||\n element.tagName === 'INPUT' ||\n element.tagName === 'IMG' ||\n element.getAttribute('role'))\n ) {\n\n triggerTrack(element);\n hasTrack = true;\n break;\n }\n\n element = element.parentNode as HTMLElement & HTMLLinkElement;\n }\n //如果没有触发任何无痕/有痕埋点 则把当前点击dom进行无痕\n if (!hasTrack && e.target && autoTrackClick) {\n let dom = e.target as HTMLElement & HTMLLinkElement;\n triggerTrack(dom);\n }\n },\n false\n );\n}\n","import { send } from './send';\nimport { ITrackerData } from 'src/types';\nimport { getFlag, hashCode, setFlag } from 'src/utils/util';\n\nimport { ACTION_TYPE } from 'src/constant';\n\nfunction generateErrorName(type: string, ...args: string[]) {\n const url = window.location.href.replace(/(\\?|#).*$/, '');\n const name = type + hashCode(url + args.join('_'));\n return name;\n}\n\nexport function initTrycatch() {\n if (getFlag('initTrycath')) return;\n setFlag('initTrycath');\n\n window.addEventListener(\n 'xhrError',\n (error: any) => {\n try {\n if (error.detail.status == 401) {\n return;\n }\n const responseText = error.detail.responseText?error.detail.responseText.substring(0, 100).trim():'';\n let body=error.detail.body?error.detail.body.substring(0, 500):'';\n if(body&&/password/.test(body)){\n body=body.replace(/(password.{3})[^\"]*/,'$1***隐藏上报****');\n }\n const info = {\n trackId: 'trycatch-xhrError',\n eventName: generateErrorName('xhrError', error.detail.url.replace(/\\?.*$/, ''), error.detail.status),\n custom: {\n url: error.detail.url,\n status: error.detail.status,\n method: error.detail.method,\n duration: error.detail.duration,\n responseText: responseText,\n body: body\n }\n };\n generateLog(info);\n } catch (error) {}\n },\n false\n );\n\n window.addEventListener(\n 'error',\n (error) => {\n try {\n let target: any = error.target || error.srcElement;\n let isElementTarget = target instanceof HTMLElement;\n if (isElementTarget) {\n const filename = target.src || target.href;\n const info = {\n trackId: 'trycatch-sourceError',\n eventName: generateErrorName('sourceError', window.location.href.replace(/(\\?|#).*$/, '')),\n custom: {\n message: '资源加载失败:' + target.outerHTML,\n filename\n }\n };\n generateLog(info);\n } else {\n const info = {\n trackId: 'trycatch-jsError',\n eventName: generateErrorName('jsError', error.message),\n custom: {\n lineno: error.lineno,\n colno: error.colno,\n stack: error.error?.stack,\n message: error.message,\n filename: error.filename\n }\n };\n generateLog(info);\n }\n } catch (error) {}\n },\n true\n );\n\n window.addEventListener('unhandledrejection', (error) => {\n try {\n const info = {\n trackId: 'trycatch-unhandledrejection',\n eventName: generateErrorName('unhandledrejection', error.reason?.message),\n custom: {\n stack: error.reason?.stack,\n message: error.reason?.message\n }\n };\n generateLog(info);\n } catch (error) {}\n });\n}\n\nfunction generateLog(info: ITrackerData) {\n //同一错 10s限制上报1次\n let lastEventTime = window.localStorage.getItem('EVENT_TIME' + info.eventName);\n if (lastEventTime && Date.now() - Number(lastEventTime) < 1000 * 10) {\n return;\n }\n window.localStorage.setItem('EVENT_TIME' + info.eventName, String(Date.now()));\n send({ ...info, actionType: ACTION_TYPE.EVENT });\n}\n","import { getPageInfo, setPageInfo } from './pageInfo';\n\nimport actionTracker from './actionTracker';\nimport durationTime from './durationTime';\nimport { getConfig, setConfig, IConfig } from './config';\nimport { sendBeat, sendQuick } from './send';\nimport hijackHistoryEvent from '../utils/hijackHistoryEvent';\nimport { getFlag, setFlag } from '../utils/util';\nimport { setClientInfo } from './clientInfo';\nimport injectedXHR from '..//utils/injectedXHR';\n\nimport { login } from './user';\nimport { initPerformance } from './performance';\nimport { watchClick, watchRouteChange } from './autoTrack';\nimport { initTrycatch } from './trycatch';\n\nfunction immediatelyInjecte() {\n if (getFlag('injected')) return;\n setFlag('injected');\n // 立即执行 防止页面重定向 参数丢失\n setClientInfo({});\n //劫持xhr\n injectedXHR();\n\n //注入history事件\n hijackHistoryEvent();\n\n // 立即监听\n initTrycatch();\n\n //性能监控\n initPerformance();\n}\nimmediatelyInjecte();\n\nconst install = function (conf?: Partial) {\n if (getFlag('install')) return;\n setFlag('install');\n if (conf) {\n setConfig(conf);\n }\n\n const config = getConfig();\n if (!config.version && (window as any).version && typeof (window as any).version === 'string') {\n setConfig({ version: (window as any).version });\n }\n\n //自动埋页面;\n routeChange();\n\n watchClick();\n function routeChange() {\n login(); //每次路由编号就获取用户信息 兼容中途登录\n\n watchRouteChange();\n\n const config = getConfig();\n if (config.routeChangeAfter) {\n config.routeChangeAfter();\n }\n }\n\n // 单页面应用routerchange\n if (typeof window.onpopstate === 'undefined') {\n window.addEventListener('hashchange', routeChange);\n }\n window.addEventListener('historyPushState', routeChange);\n window.addEventListener('historyPopstate', routeChange);\n\n window.addEventListener('visibilitychange', () => {\n var isHidden = document.hidden;\n var pageInfo = getPageInfo();\n if (isHidden) {\n const logs = durationTime.end();\n sendQuick(logs);\n } else {\n actionTracker.trackPage({ trackId: pageInfo.pageId });\n }\n });\n\n // onbeforeunload 和 onunload 都触发发送\n\n const onLeave = (() => {\n let sended = false;\n return () => {\n if (sended) {\n return;\n }\n const logs = durationTime.end();\n sendQuick(logs);\n sended = true;\n };\n })();\n\n const beatFn = () => {\n // setReferrerId('BEAT');\n const config = getConfig();\n if (config.sendBeat) {\n const logs = durationTime.beat();\n sendBeat(logs); //todo\n }\n setTimeout(beatFn, 3000);\n };\n setTimeout(beatFn, 3000);\n\n window.addEventListener('beforeunload', onLeave);\n window.addEventListener('unload', onLeave);\n};\n\n//自动install\nconst ua = window.navigator.userAgent;\nif (/AppInfo|tangyi/.test(ua)) {\n let isReady = false; // 处理sailerready 执行两次问题\n const appInit = () => {\n Sailer.ready(() => {\n if (isReady) {\n return;\n }\n isReady = true;\n // 获取userId\n const { uid } = Sailer.getUserInfo();\n if (uid > 0) {\n login({ uid });\n }\n\n install();\n\n Sailer.nativeCall('getEventInfo', (res: any) => {\n if (!res || !res.data) {\n return;\n }\n const eventInfo = res.data;\n if (eventInfo && eventInfo.items && eventInfo.items.length) {\n setClientInfo({\n channel: eventInfo.items[0].channel,\n deviceId: eventInfo.deviceId,\n appId: eventInfo.appId,\n appVersion: eventInfo.version,\n sessionId: eventInfo.items[0].sessionId\n });\n }\n });\n });\n };\n\n if (typeof Sailer !== 'undefined') {\n appInit();\n } else {\n //兼容sdk引入顺序错误\n setTimeout(() => {\n if (typeof Sailer !== 'undefined') {\n appInit();\n } else {\n install();\n }\n }, 0);\n }\n} else {\n window.addEventListener('DOMContentLoaded', () => {\n const config = getConfig();\n if (config.autoInstall) {\n install();\n }\n });\n}\n\nexport default install;\n","import { setFlag, getFlag } from './util';\n\nexport default function () {\n if (getFlag('XHRInjected')) return;\n setFlag('XHRInjected', true);\n function xhrEventTrigger(event: string, data: any) {\n const xhrEvent = new CustomEvent(event, { detail: data });\n window.dispatchEvent(xhrEvent);\n }\n const oldOpen = XMLHttpRequest.prototype.open;\n const oldSend = XMLHttpRequest.prototype.send;\n XMLHttpRequest.prototype.open = function () {\n this.url = arguments[1];\n this.startTime = Date.now();\n this.method = arguments[0];\n oldOpen.apply(this, arguments);\n };\n\n XMLHttpRequest.prototype.send = function () {\n if (!/gif/.test(this.url)) {\n xhrEventTrigger.apply(this, ['xhrOpen', { url: this.url, startTime: this.startTime }]);\n const requestBody = typeof arguments[0]==='string'?arguments[0]:null;\n this.addEventListener('readystatechange', function () {\n if (this.readyState === 4) {\n const duration = Date.now() - this.startTime;\n xhrEventTrigger.apply(this, ['xhrFinish', { url: this.url, duration }]);\n\n if (this.status >= 400 || (/apigw/.test(this.url) && /\"ok\"\\:\\s?false/.test(this.responseText))) {\n xhrEventTrigger.apply(this, [\n 'xhrError',\n {\n url: this.url,\n duration,\n startTime: this.startTime,\n responseText: this.responseText,\n status: this.status,\n method: this.method,\n body:requestBody\n }\n ]);\n }\n }\n });\n\n // 添加超时和异常处理\n this.addEventListener('timeout', function () {\n const duration = Date.now() - this.startTime;\n\n xhrEventTrigger.call(this, 'xhrError', {\n url: this.url,\n duration,\n startTime: this.startTime,\n status: 'timeout',\n method: this.method,\n body: requestBody\n });\n });\n\n this.addEventListener('error', function () {\n const duration = Date.now() - this.startTime;\n\n xhrEventTrigger.call(this, 'xhrError', {\n url: this.url,\n duration,\n startTime: this.startTime,\n status: 'network error',\n method: this.method,\n body: requestBody\n });\n });\n \n }\n oldSend.apply(this, arguments);\n };\n (XMLHttpRequest as any).prototype.oldOpen = oldOpen;\n (XMLHttpRequest as any).prototype.oldSend = oldSend;\n}\n","import { getLocationHref, setFlag, getFlag } from './util';\n\nexport default function () {\n if (getFlag('historyInjected')) return;\n setFlag('historyInjected', true);\n function historyEventTrigger(event: string, data: any) {\n const fetchEvent = new CustomEvent(event, { detail: data });\n window.dispatchEvent(fetchEvent);\n }\n\n function spellUrl(oldURL: string, newURL: string) {\n if (/:\\/\\//.test(newURL)) {\n return newURL;\n }\n let host = oldURL.match(/^.*:\\/\\/[^/]+/)[0];\n return host + (/^\\//.test(newURL) ? '' : '/') + newURL;\n }\n\n let globalData = {\n url: getLocationHref()\n };\n\n const oldOnpopstate = window.onpopstate;\n window.onpopstate = function () {\n let data = {\n newURL: window.location.href,\n oldURL: globalData.url\n };\n globalData.url = window.location.href;\n historyEventTrigger.apply(this, ['historyPopstate', data]);\n if (oldOnpopstate) {\n return oldOnpopstate.apply(this, arguments);\n }\n };\n\n const oldPushState = window.history.pushState;\n oldPushState &&\n (window.history.pushState = function (state: any, title: string, url: string) {\n let data = {\n newURL: spellUrl(globalData.url, url),\n oldURL: globalData.url\n };\n globalData = {\n url: data.newURL\n };\n historyEventTrigger.apply(this, ['historyPushState', data]);\n if (oldPushState) {\n return oldPushState.apply(this, arguments);\n }\n });\n}\n","import { getClientInfo } from './core/clientInfo';\nimport tracker from './decoratiors/tracker';\nimport actionTracker from './core/actionTracker';\n\nimport { getConfig, setConfig } from './core/config';\nimport { sendAsync, send, sendSync } from './core/send';\nimport { after, before } from './decoratiors/tools';\nimport vTrackView from './directives/trackView';\nimport vTrackEvent from './directives/trackEvent';\nimport vTrackPage from './directives/trackPage';\nimport install from './core/bindEvent';\nimport { login, logout } from './core/user';\n\nconst trackDom = actionTracker.trackDom;\nconst trackPage = actionTracker.trackPage;\nconst trackEvent = actionTracker.trackEvent;\nconst trackLog = actionTracker.trackLog;\nconst trackViewStart = actionTracker.trackViewStart;\nconst trackViewEnd = actionTracker.trackViewEnd;\nconst trackView = actionTracker.trackView;\nconst trackLink = actionTracker.trackLink;\nconst track = actionTracker.track;\n\nexport {\n getClientInfo,\n //装饰器\n before,\n after,\n tracker,\n //指令\n vTrackView,\n vTrackEvent,\n vTrackPage,\n //\n install,\n //tracker\n actionTracker,\n trackDom,\n trackPage,\n trackEvent,\n trackLog,\n trackViewStart,\n trackView,\n trackViewEnd,\n trackLink,\n track,\n\n //config\n setConfig,\n getConfig,\n //send\n sendAsync,\n send,\n sendSync,\n //user\n login,\n logout\n};\n","if (typeof XMLHttpRequest === 'undefined') {\n throw new Error('tracker requires ie10+');\n}\n\ntry {\n process.env.NODE_ENV;\n} catch (e) {\n const g: any = typeof window !== 'undefined' ? window : global;\n if (typeof g.process === 'undefined') g.process = {};\n g.process.env = {};\n}\n\nif (typeof _TrackerGlobalData === 'undefined') {\n window._TrackerGlobalData = {};\n}\n\nexport * from './internal';\n","import actionTracker from '../core/actionTracker';\n\nimport set from 'ramda/src/set';\nimport lensProp from 'ramda/src/lensProp';\nconst tracker = (partical: any) => {\n if (typeof partical === 'function') {\n return (target: Function | Object | string, key: string, descriptor: PropertyDescriptor) => {\n const value = function (...args: any) {\n const fn = partical.call(this, descriptor.value, this);\n if (typeof fn === 'function') {\n //参数为高阶函数\n return fn.apply(this, args);\n } else {\n //普通函数\n if (typeof fn === 'object') {\n const data = { ...fn };\n actionTracker.trackEvent(data);\n }\n return descriptor.value.apply(this, arguments);\n }\n };\n // if (descriptor.initializer) {\n // return propSet('initializer', function() {\n // const value = descriptor.initializer.apply(this);\n // return function (...args) {\n // return partical.call(this, value, this).apply(this, args);\n // }\n // }, descriptor);\n // }\n\n return set(lensProp('value'), value, descriptor);\n };\n } else if (typeof partical === 'object') {\n return (target: any, key: string, descriptor: PropertyDescriptor) => {\n var oldValue = descriptor.value;\n descriptor.value = function () {\n const data = {\n ...partical\n };\n actionTracker.trackEvent(data);\n return oldValue.apply(this, arguments);\n };\n return descriptor;\n };\n } else {\n //参数为string 作为tarckId\n return (target: any, key: string, descriptor: PropertyDescriptor) => {\n var oldValue = descriptor.value;\n descriptor.value = function () {\n const data = {\n trackId: partical\n };\n actionTracker.trackEvent(data);\n return oldValue.apply(this, arguments);\n };\n return descriptor;\n };\n }\n};\n\nexport default tracker;\n"],"names":["__assign","Object","assign","t","s","i","n","arguments","length","p","prototype","hasOwnProperty","call","apply","this","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","__generator","body","f","y","g","_","label","sent","trys","ops","verb","throw","return","Symbol","iterator","v","op","TypeError","pop","push","SuppressedError","SERVER_URL","window","location","protocol","DEBUG_SERVER_URL","BEAT_SERVER_URL","DURATION_SERVER_URL","SEND_TYPE","ACTION_TYPE","SAFETY_KEY","ua","navigator","userAgent","host","defaultUrl","test","serverUrl","debugServerUrl","beatServerUrl","durationServerUrl","config","trackKey","version","offlineUrl","sendType","delayTime","autoTrackPage","autoTrackClick","autoInstall","delayLink","delayLinkTime","deviceIdKey","beforeGenerateLog","autoTrackPrefix","localGenerateDeviceId","routeChangeAfter","sendBeat","scriptDom","document","querySelector","getAttribute","replace","substring","getConfig","setConfig","data","a","fn","f1","_isPlaceholder","f2","b","_curry1","_b","_a","iter","list","pred","x","idx","len","match","String","prop","obj","is","toString","_has","hasEnumBug","propertyIsEnumerable","nonEnumerableProps","hasArgsEnumBug","contains","item","keys","nIdx","ks","checkArgsLength","_isArguments","val","undefined","slice","_uniqContentEquals","aIterator","bIterator","stackA","stackB","_arrayFromIterator","eq","_equals","_includesWith","aItem","_objectIs","typeA","type","equals","constructor","_functionName","valueOf","name","message","source","global","ignoreCase","multiline","sticky","unicode","size","entries","concat","values","keysA","extendedStackA","extendedStackB","key","isThenable","getQueryVariable","variable","query","href","vars","split","pair","getCookie","cookies","cookie","arr","trim","unescape","notChanged","binding","oldValue","isEmpty","setFlag","_TrackerGlobalData","_trackerFlag","getFlag","getUUID","c","r","Math","random","getDomPath","dom","path","id","className","tagName","toLowerCase","parentNode","unshift","join","hashCode","str","hash","charCodeAt","inMin","inWechat","saveDeviceId","deviceId","expires","domain","hours","date","Date","setTime","getTime","toUTCString","setCookie","localStorage","setItem","clientInfo","clientWidth","screen","height","clientHeight","width","radio","devicePixelRatio","appId","appVersion","appType","marketId","sessionId","channel","getItem","getDeviceId","deviceIdMatch","AppInfoMatch","setClientInfo","info","urlInfo","urlInfoStr","JSON","parse","decodeURIComponent","error","cookieInfoStr","cookieInfo","expired","now","cacheStr","stringify","getClientInfo","pageInfo","pageId","url","pathname","title","setPageInfo","getPageInfo","http","cb","dataStr","sendBeacon","Blob","blob","xhr","XMLHttpRequest","withCredentials","addEventListener","readyState","open","setRequestHeader","send","img","Image","onload","src","encodeURIComponent","libVersion","libType","instance","DurationTime","trackId","timeMap","custom","startTime","logs","durationTime","key_1","generateLog","key_2","actionType","trackTime","masterId","getInstance","userInfo","uid","isLogin","setUserInfo","login","newUserInfo","names","allData","allDebugData","allDurationData","timer","sendSync","sendAsync","newData","sendDurationLog","sendQuick","sendToServer","debug","clearTimeout","setTimeout","customTime","items","libInfo","_wrapperData","_generateData","o","pick","netInfo","connection","mozConnection","webkitConnection","effectiveType","netType","getNetInfo","uuid","_TELESCOPE_LOG_ID","durationLogs","end","start","VisSense","withWindow","win","product","async","callback","delay","args","defer","defaults","dest","sourceIsObject","isObject","destIsObject","forEach","property","extend","index","props","ask","isFunction","array","isArray","isElement","nodeType","noop","throttle","wait","cancel","last","time","func","viewport","referenceWindow","innerHeight","innerWidth","computedStyle","element","getComputedStyle","styleProperty","style","getPropertyValue","isDisplayed","parent","isVisibleByStyling","visibility","isInViewport","rect","bottom","right","top","left","percentage","getBoundingClientRect","view","vh","vw","min","Error","_element","_config","fullyvisible","hidden","percentageHook","precision","visibilityHooks","roundFactor","pow","_round","round","visibilityApi","createVisibilityApi","isHidden","VisMon","visobj","strategy","Strategy","PollingStrategy","EventStrategy","_visobj","_state","_started","anyTopicName","_pubsub","PubSub","_events","_strategy","CompositeStrategy","init","on","monitor","newValue","previous","publish","code","visible","event","entry","propertyName","eventName","onVisibilityChange","removeEventListener","_cache","_onAnyCache","syncFireListeners","consumers","consumer","topic","applyCallback","listener","unregister","indexOf","splice","listeners","state","hook","VisState","perc","isFullyVisible","isVisible","of","STATES","newVisState","_cancelAsyncStart","startAsync","update","me","cancelAsyncStart","stop","currentState","newState","nextState","Builder","strategies","events","productBuilt","set","handler","build","combinedStrategies","forceDisableStrategies","configStrategyIsDefined","configStrategyIsArray","combineStrategies","manufacture","_strategies","create","interval","_clearInterval","intervalId","setInterval","clearInterval","debounce","_removeEventListeners","removeOnVisibilityChangeEvent","Utils","self","fireIf","when","identity","isDefined","isPageVisible","once","cache","called","VisibilityApi","_viewport","_isInViewport","_isDisplayed","_computedStyle","_styleProperty","factory","noConflict","module","vissense","VisSenseUtils","onPercentageTimeTestPassed","percentageLimit","timeLimit","hiddenLimit","max","innerMonitor","outerMonitor","timeElapsed","timeStarted","createInnerMonitor","trackEvent","bind","trackPage","trackViewStart","trackView","trackViewEnd","trackLog","ActionTracker","visSenseConfig","data_1","domId","domClass","domTag","domContent","textContent","domPath","linkDom","trackDom","_dom","IS_TRACKED","DELAY_TRACK_TIME","trackInfo","domHref","track","search","f3","_curry2","_c","Identity","map","lens","over","always","Array","methodNames","xf","_isArray","_isTransformer","transducer","functor","_isString","XWrap","acc","a0","a1","a2","a3","a4","a5","a6","a7","a8","a9","thisObj","_arity","_iterableReduce","_methodReduce","methodName","symIterator","_xwrap","_isArrayLike","_arrayReduce","reduce","XMap","_xfBase","input","_curryN","received","combined","argsIdx","combinedIdx","_xmap","curryN","_reduce","_map","getter","setter","toFunctorFn","target","focus","Number","isInteger","offset","charAt","pathsArray","paths","_isInteger","nth","pathAr","k","assoc","before","trackFn","_i","actionTracker","console","evalF","_this","after","rr","findIndex","generate","watch","el","vnode","isWatched","display","unbind","handleEvent","_trackerInfo","toUpperCase","trackLink","exports","EvEmitter","proto","includes","onceEvents","_onceEvents","off","emitEvent","onceListeners","allOff","require$$0","imagesLoaded","$","jQuery","ImagesLoaded","elem","options","onAlways","queryElem","querySelectorAll","elements","getImages","jqDeferred","Deferred","check","images","addElementImages","elementNodeTypes","nodeName","addImage","background","addElementBackgroundImages","childImgs","children","child","reURL","LoadingImage","Background","matches","exec","backgroundImage","addBackground","loadingImage","progressedCount","hasAnyBroken","complete","onProgress","image","progress","isLoaded","notify","log","isComplete","jqMethod","getIsImageComplete","confirm","naturalWidth","proxyImage","crossOrigin","currentSrc","method","unbindEvents","onerror","makeJQueryPlugin","promise","initPerformance","isListening","isSend","isFirstApi","openApiList","successApiList","removeListerner","onOpen","onSuccess","performance","mark","detail","duration","finishListening","onLoad","isFirstLoad","cacheTime","pageNav","getEntriesByType","toJSON","unload","unloadEventEnd","unloadEventStart","redirect","redirectEnd","redirectStart","appCache","domainLookupStart","fetchStart","dns","domainLookupEnd","tcp","connectEnd","connectStart","ssl","secureConnectionStart","ttfb","responseStart","requestStart","response","responseEnd","domInteractive","dom2","domContentLoadedEventStart","DCL","domContentLoadedEventEnd","resources","loadEventStart","loadEventEnd","firstbyte","fpt","tti","ready","load","act","cct","apiNum","ast","att","getPageNav","cctMeasure","measure","actMeasure","astMeasure","sources","filter","total","getResource","requestIdleCallback","sendLog","supportedAbi","curAutoPageId","getPageCode","pathMatch","isAutoTrack","triggerTrack","trackAutoEvent","originElement","prefix","text","autoTrackId","getDomInfo","generateErrorName","lastEventTime","oldOpen","oldSend","xhrEventTrigger","requestBody_1","status","responseText","xhrEvent","CustomEvent","dispatchEvent","injectedXHR","globalData","oldOnpopstate","onpopstate","newURL","oldURL","historyEventTrigger","oldPushState","history","pushState","spellUrl","fetchEvent","hijackHistoryEvent","srcElement","HTMLElement","filename","outerHTML","lineno","colno","stack","reason","install","conf","routeChange","hasTrack","_isWatchTrack","sended","onLeave","beatFn","beat","milliseconds","trackAutoPage","watchRouteChange","isReady_1","appInit_1","Sailer","nativeCall","res","eventInfo","partical","descriptor","lensProp","modifiers","modifier"],"mappings":"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"}