anys-web 7.0.1 → 8.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","mappings":"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","sources":["webpack://anys/webpack/bootstrap","webpack://anys/webpack/runtime/define property getters","webpack://anys/webpack/runtime/hasOwnProperty shorthand","webpack://anys/webpack/runtime/make namespace object","webpack://anys/../../node_modules/ts-fns/es/is.js","webpack://anys/../../node_modules/ts-fns/es/string.js","webpack://anys/../../node_modules/ts-fns/es/object.js","webpack://anys/../anys/src/index.js","webpack://anys/../../node_modules/ts-fns/es/class.js","webpack://anys/../@shared/src/plugin.js","webpack://anys/../anys-web-plugin-identify/src/index.js","webpack://anys/../@shared/src/dom-path.js","webpack://anys/../anys-web-plugin-monitor-input-event/src/index.js","webpack://anys/../anys-web-plugin-monitor-mouse-event/src/index.js","webpack://anys/../anys-web-plugin-monitor-window-activity/src/index.js","webpack://anys/../anys-web-plugin-monitor-url/src/index.js","webpack://anys/../anys-web-plugin-monitor-touch-event/src/index.js","webpack://anys/../@shared/src/async-queue.js","webpack://anys/../anys-web-plugin-store-offline/node_modules/indb/es/index.js","webpack://anys/../anys-web-plugin-store-offline/src/index.js","webpack://anys/../anys-web-plugin-monitor-dom-mutation/src/index.js","webpack://anys/../anys-web-plugin-monitor-window-size/src/index.js","webpack://anys/../anys-web-plugin-monitor-scroll-event/src/index.js","webpack://anys/./src/offline-tracer-plugin.js","webpack://anys/../@shared/src/url.js","webpack://anys/../@shared/src/ajax.js","webpack://anys/./src/index.js"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import { unionArray } from './array.js'\n\n/**\n * @param {any} value\n * @returns {boolean}\n */\nexport function isUndefined(value) {\n return typeof value === 'undefined'\n}\n\n/**\n * @param {any} value\n * @returns {boolean}\n */\nexport function isNull(value) {\n return value === null\n}\n\n/**\n * @param {any} value\n * @returns {boolean}\n */\nexport function isNullish(value) {\n return isUndefined(value) || isNull(value)\n}\n\n/**\n * @param {any} value\n * @returns {boolean}\n */\nexport function isNone(value) {\n return isNullish(value) || isNaN(value)\n}\n\n/**\n * @param {any} value\n * @returns {boolean}\n */\nexport function isArray(value) {\n return Array.isArray(value)\n}\n\n/**\n * @param {any} value\n * @returns {boolean}\n */\nexport function isObject(value) {\n return value && typeof value === 'object' && value.constructor === Object\n}\n\n/**\n * @param {any} value\n * @returns {boolean}\n */\nexport function isDate(value) {\n return isInstanceOf(value, Date)\n}\n\n/**\n * @param {any} value\n * @returns {boolean}\n */\nexport function isString(value) {\n return typeof value === 'string'\n}\n\n/**\n * @param {any} value\n * @returns {boolean}\n */\nexport function isNumber(value) {\n return typeof value === 'number' && !isNaN(value)\n}\n\n/**\n * @param {any} value\n * @returns {boolean}\n */\nexport function isNaN(value) {\n return typeof value === 'number' && Number.isNaN(value)\n}\n\n/**\n * @param {any} value\n * @returns {boolean}\n */\nexport function isSymbol(value) {\n return typeof value === 'symbol'\n}\n\n/**\n * @param {any} value\n * @returns {boolean}\n */\nexport function isFinite(value) {\n return typeof value === 'number' && Number.isFinite(value)\n}\n\n/**\n * @param {any} value\n * @returns {boolean}\n */\nexport function isInfinite(value) {\n return typeof value === 'number' && !Number.isNaN(value) && !Number.isFinite(value)\n}\n\n/**\n * @param {any} value\n * @returns {boolean}\n */\nexport function isBoolean(value) {\n return value === true || value === false\n}\n\n/**\n * @param {any} value\n * @returns {boolean}\n */\nexport function isNumeric(value) {\n return isString(value) && /^\\-{0,1}[0-9]+\\.{0,1}([0-9]+){0,1}$/.test(value)\n}\n\n/**\n * @param {any} value\n * @returns {boolean}\n */\nexport function isBlob(value) {\n return isInstanceOf(value, Blob)\n || (\n value\n && typeof value.size === 'number'\n && typeof value.type === 'string'\n )\n}\n\n/**\n * @param {any} value\n * @returns {boolean}\n */\nexport function isFile(value) {\n return isInstanceOf(value, File)\n || (\n isBlob(value)\n && (typeof value.lastModifiedDate === 'object' || typeof value.lastModified === 'number')\n && typeof value.name === 'string'\n )\n}\n\n/**\n * @param {any} value\n * @returns {boolean}\n */\nexport function isFormData(value) {\n return isInstanceOf(value, FormData)\n}\n\n/**\n * @param {any} value\n * @returns {boolean}\n */\nexport function isEmpty(value) {\n if (isNone(value) || value === '' || isNaN(value)) {\n return true\n }\n else if (isArray(value)) {\n return value.length === 0\n }\n else if (isObject(value)) {\n return Object.getOwnPropertyNames(value).length === 0\n }\n else {\n return false\n }\n}\n\n/**\n * @param {any} value\n * @param {boolean} [isStrict] where Constructor is to return false\n * @returns {boolean}\n */\nexport function isFunction(value, isStrict) {\n if (typeof value !== 'function') {\n return false\n }\n return isStrict ? !isConstructor(value, 2) : true\n}\n\n/**\n * judge whether a value is a Constructor\n * @param {any} f\n * @param {number} [strict] strict level\n * - 4: should must be one of native code, native class\n * - 3: can be babel transformed class\n * - 2: can be some function whose prototype has more than one properties\n * - 1: can be some function which has this inside\n * - 0: can be some function which has prototype\n * @returns {boolean}\n */\nexport function isConstructor(f, strict) {\n if (typeof f !== 'function') {\n return false\n }\n\n if (f === Symbol) {\n return false\n }\n\n // bond function && arrow function\n if (!f.prototype) {\n return false\n }\n\n const entire = f + ''\n const fnBody = entire.slice(entire.indexOf(\"{\") + 1, entire.lastIndexOf(\"}\")).trim()\n\n // native class definition\n const isNativeClass = entire.indexOf('class ') === 0\n // std lib: String, Number...\n const isNativeSTD = fnBody === `[native code]`\n\n const level4 = isNativeClass || isNativeSTD\n if (strict >= 4) {\n return level4\n }\n\n const topCtx = fnBody.replace(/function.*?\\{.*?\\}/gm, '')\n .replace(/return/gm, '')\n .replace(/\\n+/gm, ';')\n .replace(/\\s+/gm, '')\n .replace(/;;/gm, ';')\n // babel transformed class, begin with '_classCallCheck(this,', may by minified by compile tool\n const isBabelTransformedClass = /^_classCallCheck\\(this,/.test(topCtx)\n // @babel/plugin-transform-runtime '(0, _classCallCheck2[\"default\"])(this,'\n const isBabelRuntimeTransformedClass = /^\\(.*?_classCallCheck.*?\\)\\(this,/.test(topCtx)\n // webpack minified\n const isBabelTransformedMinifiedClass = /^[0-9a-zA-Z_;!?:]*?\\(this,/.test(topCtx)\n\n const level3 = level4 || isBabelTransformedClass || isBabelRuntimeTransformedClass || isBabelTransformedMinifiedClass\n if (strict == 3) {\n return level3\n }\n\n // there are some properties on f.prototype\n const protos = Object.getOwnPropertyDescriptors(f.prototype)\n const keys = Object.keys(protos).filter(item => item !== 'constructor')\n const hasProtos = !!keys.length\n\n const level2 = level3 || hasProtos\n if (strict == 2) {\n return level2\n }\n\n // function() { this.name = 'xx' }\n const hasThisInside = topCtx.indexOf('this.') === 0 || topCtx.indexOf(';this.') > -1 || topCtx.indexOf('=this;') > -1\n\n const level1 = level2 || hasThisInside\n if (strict == 1) {\n return level1\n }\n\n return true\n}\n\n/**\n * @param {any} value\n * @returns {boolean}\n */\nexport function isTruthy(value) {\n return !!value\n}\n\n/**\n * @param {any} value\n * @returns {boolean}\n */\nexport function isFalsy(value) {\n return !value\n}\n\n/**\n * @param {any} value\n * @returns {boolean}\n */\nexport function isEqual(val1, val2) {\n const equal = (obj1, obj2) => {\n const keys1 = Object.getOwnPropertyNames(obj1)\n const keys2 = Object.getOwnPropertyNames(obj2)\n const keys = unionArray(keys1, keys2)\n\n for (let i = 0, len = keys.length; i < len; i ++) {\n const key = keys[i]\n\n if (!inArray(key, keys1)) {\n return false\n }\n if (!inArray(key, keys2)) {\n return false\n }\n\n const value1 = obj1[key]\n const value2 = obj2[key]\n if (!isEqual(value1, value2)) {\n return false\n }\n }\n\n return true\n }\n\n if (isObject(val1) && isObject(val2)) {\n return equal(val1, val2)\n }\n else if (isArray(val1) && isArray(val2)) {\n return equal(val1, val2)\n }\n else {\n return val1 === val2\n }\n}\n\n/**\n * @param {any} a\n * @param {any} b\n * @returns {boolean}\n */\nexport function isLt(a, b) {\n return a < b\n}\n\n/**\n * @param {any} a\n * @param {any} b\n * @returns {boolean}\n */\nexport function isLte(a, b) {\n return a <= b\n}\n\n/**\n * @param {any} a\n * @param {any} b\n * @returns {boolean}\n */\nexport function isGt(a, b) {\n return a > b\n}\n\n/**\n * @param {any} a\n * @param {any} b\n * @returns {boolean}\n */\nexport function isGte(a, b) {\n return a >= b\n}\n\n/**\n * @param {any} value\n * @returns {boolean}\n */\nexport function isPromise(value) {\n return isInstanceOf(value, Promise)\n || (\n value\n && (typeof value === 'object' || typeof value === 'function')\n && typeof value.then === 'function'\n )\n}\n\n/**\n * @param {any} value\n * @param {any} Constructor\n * @param {boolean} [isStrict]\n * @returns {boolean}\n */\nexport function isInstanceOf(value, Constructor, isStrict) {\n if (!value || typeof value !== 'object') {\n return false\n }\n if (isStrict) {\n return value.constructor === Constructor\n }\n else {\n return value instanceof Constructor\n }\n}\n\n/**\n * @param {any} SubConstructor\n * @param {any} Constructor\n * @param {boolean} [isStrict]\n * @returns {boolean}\n */\nexport function isInheritedOf(SubConstructor, Constructor, isStrict) {\n if (typeof SubConstructor !== 'function') {\n return false\n }\n\n const ins = SubConstructor.prototype\n if (!ins) {\n return false\n }\n\n return isInstanceOf(ins, Constructor, isStrict)\n}\n\n/**\n * check wether a property is the given object's own property,\n * it will check:\n * - only string properties (except symbol properties, different from hasOwnKey),\n * - only enumerable properties;\n * @param {string} key\n * @param {object} obj\n * @param {boolean} [own] use hasOwnKey to check\n * @returns {boolean}\n */\nexport function inObject(key, obj, own) {\n if (!obj || typeof obj !== 'object') {\n return false\n }\n\n if (own) {\n return hasOwnKey(obj, key)\n }\n\n return typeof key !== 'symbol' && Object.prototype.propertyIsEnumerable.call(obj, key)\n}\n\n/**\n * check wether a property is the given object's own property,\n * as default, it will check:\n * - both string and symbol properties (different from inObject),\n * - both enumerable and non-enumerable properties;\n * @param {object|array} obj\n * @param {string} key\n * @param {boolean} [enumerable]\n * @returns {boolean}\n */\n export function hasOwnKey(obj, key) {\n if (!obj || typeof obj !== 'object') {\n return false\n }\n\n return Object.prototype.hasOwnProperty.call(obj, key)\n}\n\n/**\n * @param {any} item\n * @param {array} arr\n * @returns {boolean}\n */\nexport function inArray(item, arr) {\n return isArray(arr) && arr.includes(item)\n}\n\n/**\n * @param {object} objA\n * @param {object} objB\n * @param {number} deepth how many deepth to check\n */\nexport function isShallowEqual(objA, objB, deepth){\n if(objA === objB) {\n return true\n }\n\n // not object. number, string, boolean, null\n if(!(typeof objA === 'object' && objA !== null) || !(typeof objB === 'object' && objB !== null)) {\n return false\n }\n\n // object vs. array\n if ([objA, objB].filter(item => isArray(item)).length === 1) {\n return false\n }\n\n const keysA = Object.keys(objA).sort()\n const keysB = Object.keys(objB).sort()\n\n if (keysA.length !== keysB.length) {\n return false\n }\n\n for (let i = 0; i < keysA.length; i ++) {\n const keyA = keysA[i]\n const keyB = keysB[i]\n\n if (keyA !== keyB) {\n return false\n }\n\n const key = keyA\n\n if (objA[key] !== objB[key]) {\n if (deepth && typeof objA[key] === 'object' && typeof objB[key] === 'object') {\n if (!isShallowEqual(objA[key], objB[key], deepth - 1)) {\n return false\n }\n }\n else {\n return false\n }\n }\n }\n\n return true\n}\n\nexport function isOneInArray(items, arr) {\n return arr.some(one => items.includes(one))\n}\n\nexport function isAllInArray(items, arr) {\n return !arr.some(one => !items.includes(one))\n}\n","import { createArray } from './array.js'\n\n// the order could never be changed, becuase we use it for number convertion\nexport function getAllChars() {\n return '0123456789abcdefghigklmnopqrstuvwxyzABCDEFGHIGKLMNOPQRSTUVWXYZ'\n}\n\n/**\n * @param {string} input\n * @param {string} separator\n * @param {array} segments\n * @param {boolean} alignright\n * @returns {string}\n */\nexport function formatString(input, separator, segments, alignright) {\n if (typeof input !== 'string' || !input) {\n return ''\n }\n if (typeof separator !== 'string' || !separator) {\n return input\n }\n if (!segments) {\n return input\n }\n\n let letters = input.split('')\n\n if (alignright) {\n letters.reverse()\n }\n\n let points = Array.isArray(segments) ? [].concat(segments) : [segments]\n let result = []\n let count = points[0]\n\n for (let i = 0, len = letters.length; i < len; i ++) {\n if (typeof segments === 'number') {\n if (i > 0 && i % count === 0) {\n result.push(separator)\n }\n }\n else if (Array.isArray(segments) && points.length) {\n if (i > 0 && i % count === 0) {\n result.push(separator)\n points.shift()\n count += points.length ? points[0] : 0\n }\n }\n\n let char = letters[i]\n result.push(char)\n }\n\n if (alignright) {\n result.reverse()\n }\n\n let output = result.join('')\n return output\n}\n\n/**\n * @param {string} str\n * @param {number} len\n * @param {boolean} pad\n * @returns {string}\n */\nexport function padLeft(str, len, pad) {\n if (str.length >= len) {\n return str\n }\n\n let diff = len - str.length\n let letters = createArray(pad, diff)\n\n return letters.join('') + str\n}\n\n/**\n * @param {string} str\n * @param {number} len\n * @param {boolean} pad\n * @returns {string}\n */\nexport function padRight(str, len, pad) {\n if (str.length >= len) {\n return str\n }\n\n let diff = len - str.length\n let letters = createArray(pad, diff)\n\n return str + letters.join('')\n}\n\n/**\n * @param {string} str\n * @returns {string}\n */\nexport function getStringHash(str) {\n let hash = 5381\n let i = str.length\n\n while(i) {\n hash = (hash * 33) ^ str.charCodeAt(--i)\n }\n\n return hash >>> 0\n}\n\n/**\n * @param {number} len\n * @returns {string}\n */\nexport function createRandomString(len = 16) {\n const CHARS = getAllChars()\n let text = ''\n for (let i = 0; i < len; i++) {\n text += CHARS.charAt(Math.floor(Math.random() * CHARS.length))\n }\n return text\n}\n\n// https://github.com/gillesruppert/node-interpolate/blob/master/lib/interpolate.js\n/**\n * @param {string} template\n * @param {object} data\n * @param {object} [opts]\n * @returns {string}\n */\nexport function interpolate(template, data, opts) {\n let regex,\n lDel,\n rDel,\n delLen,\n lDelLen,\n delimiter,\n // For escaping strings to go in regex\n regexEscape = /([$\\^\\\\\\/()|?+*\\[\\]{}.\\-])/g;\n\n opts = opts || {};\n\n delimiter = opts.delimiter || '{}';\n delLen = delimiter.length;\n lDelLen = Math.ceil(delLen / 2);\n // escape delimiters for regex\n lDel = delimiter.substr(0, lDelLen).replace(regexEscape, \"\\\\$1\");\n rDel = delimiter.substr(lDelLen, delLen).replace(regexEscape, \"\\\\$1\") || lDel;\n\n // construct the new regex\n regex = new RegExp(lDel + \"[^\" + lDel + rDel + \"]+\" + rDel, \"g\");\n\n return template.replace(regex, function (placeholder) {\n let key = placeholder.slice(lDelLen, -lDelLen),\n keyParts = key.split(\".\"),\n val,\n i = 0,\n len = keyParts.length;\n\n if (key in data) {\n // need to be backwards compatible with \"flattened\" data.\n val = data[key];\n }\n else {\n // look up the chain\n val = data;\n for (; i < len; i++) {\n if (keyParts[i] in val) {\n val = val[ keyParts[i] ];\n } else {\n return placeholder;\n }\n }\n }\n return val;\n });\n}\n","import { getStringHash } from './string.js'\nimport { isArray, isObject, isFile, isDate, isFunction, inArray, isSymbol, inObject, isUndefined, hasOwnKey } from './is.js'\nimport { decideby } from './syntax.js'\n\n/**\n * @param {any} obj\n */\nexport function clone(obj) {\n const parents = []\n const clone = function(origin) {\n if (!isObject(origin) && !isArray(origin)) {\n return origin\n }\n\n const result = isArray(origin) ? [] : {}\n const keys = Object.keys(origin)\n\n parents.push({ origin, result })\n\n for (let i = 0, len = keys.length; i < len; i ++) {\n const key = keys[i]\n const value = origin[key]\n const referer = parents.find(item => item.origin === value)\n\n if (referer) {\n result[key] = referer.result\n }\n else {\n result[key] = clone(value)\n }\n }\n\n return result\n }\n\n const result = clone(obj)\n return result\n}\n\n/**\n * Deep extend an object\n * @param {object} obj1\n * @param {object} obj2\n * @param {0|1|2} [mixArr] 0: extend array as object, 1: push into array, 2: replace all items\n * @returns {object}\n */\nexport function extend(obj1, obj2, mixArr = 0) {\n const exists = []\n const extend = (obj1, obj2) => {\n each(obj2, (value, key) => {\n const originalValue = obj1[key]\n\n // check whether extended\n const exist = exists.find(item => item.e === value)\n if (exist) {\n if (originalValue === exist.o) {\n return\n }\n if (!originalValue || typeof originalValue !== 'object') {\n obj1[key] = exist.o\n return\n }\n }\n\n if (isObject(originalValue)) {\n if (isObject(value) || isArray(value)) {\n extend(originalValue, value, mixArr)\n }\n else {\n obj1[key] = value\n }\n }\n else if (isArray(originalValue)) {\n if (isObject(value)) {\n if (mixArr === 0 || mixArr === 1) {\n extend(originalValue, value, mixArr)\n }\n else if (mixArr === 2) {\n originalValue.length = 0\n extend(originalValue, value, mixArr)\n }\n else {\n obj1[key] = value\n }\n }\n else if (isArray(value)) {\n if (mixArr === 0) {\n extend(originalValue, value, mixArr)\n }\n else if (mixArr === 1) {\n originalValue.push(...value)\n }\n else if (mixArr === 2) {\n originalValue.length = 0\n originalValue.push(...value)\n }\n else {\n obj1[key] = value\n }\n }\n else {\n obj1[key] = value\n }\n }\n else {\n obj1[key] = value\n }\n })\n\n // record this pair\n exists.push({\n o: obj1, // original\n e: obj2, // extend by this\n })\n\n return obj1\n }\n return extend(obj1, obj2)\n}\n\n/**\n * @param {object} obj1\n * @param {object} obj2\n * @param {boolean} [concatArray]\n * @returns {object}\n */\nexport function merge(obj1, obj2, concatArray = true) {\n obj1 = clone(obj1)\n\n if (!isArray(obj2) && !isObject(obj2)) {\n return isArray(obj1) && isObject(obj1) ? obj1 : null\n }\n\n obj2 = clone(obj2)\n\n if (!isArray(obj1) && !isObject(obj1)) {\n return isArray(obj2) && isObject(obj2) ? obj2 : null\n }\n\n const exists = []\n const merge = (obj1, obj2) => {\n if (isArray(obj1)) {\n if (isArray(obj2) && concatArray) {\n return [...obj1, ...obj2]\n }\n }\n\n const result = obj1\n const keys = Object.keys(obj2)\n keys.forEach((key) => {\n const oldValue = obj1[key]\n const newValue = obj2[key]\n\n if (isObject(newValue) || isArray(newValue)) {\n const index = exists.indexOf(newValue)\n if (index === -1) {\n exists.push(newValue)\n }\n else if (!isArray(oldValue) && !isObject(oldValue)) {\n result[key] = newValue\n return\n }\n }\n\n if (isObject(newValue) || isArray(newValue)) {\n if (isObject(oldValue) || isArray(oldValue)) {\n result[key] = merge(oldValue, newValue)\n }\n else {\n result[key] = newValue\n }\n }\n else {\n result[key] = newValue\n }\n })\n return result\n }\n\n return merge(obj1, obj2)\n}\n\n/**\n * @param {object} obj\n * @returns {string}\n */\nexport function stringify(obj) {\n const exists = [obj]\n const used = []\n const stringifyObjectByKeys = (obj) => {\n if (isArray(obj)) {\n let items = obj.map((item) => {\n if (item && typeof item === 'object') {\n return stringifyObjectByKeys(item)\n }\n else {\n return JSON.stringify(item)\n }\n })\n let str = '[' + items.join(',') + ']'\n return str\n }\n\n let str = '{'\n let keys = Object.keys(obj)\n let total = keys.length\n keys.sort()\n keys.forEach((key, i) => {\n let value = obj[key]\n str += key + ':'\n\n if (value && typeof value === 'object') {\n let index = exists.indexOf(value)\n if (index > -1) {\n str += '#' + index\n used.push(index)\n }\n else {\n exists.push(value)\n const num = exists.length - 1\n str += '#' + num + stringifyObjectByKeys(value)\n }\n }\n else {\n str += JSON.stringify(value)\n }\n\n if (i < total - 1) {\n str += ','\n }\n })\n str += '}'\n return str\n }\n let str = stringifyObjectByKeys(obj)\n\n exists.forEach((item, i) => {\n if (!used.includes(i)) {\n str = str.replace(new RegExp(`:#${i}`, 'g'), ':')\n }\n })\n\n if (used.includes(0)) {\n str = '#0' + str\n }\n\n return str\n}\n\n/**\n * @param {object} obj\n * @returns {string}\n */\nexport function getObjectHash(obj) {\n if (typeof obj !== 'object') {\n return\n }\n\n let str = stringify(obj)\n let hash = getStringHash(str)\n return hash\n}\n\n/**\n * @param {object} obj\n * @param {string} key\n * @param {object|function} value\n * @returns {object}\n */\nexport function define(obj, key, value) {\n if (isFunction(value)) {\n return Object.defineProperty(obj, key, { get: value })\n }\n else if (isObject(value)) {\n if (hasOwnKey(value, 'enumerable') || hasOwnKey(value, 'configurable')) {\n return Object.defineProperty(obj, key, value)\n }\n else if ((isFunction(value.set) && isFunction(value.get))) {\n return Object.defineProperty(obj, key, value)\n }\n else if (hasOwnKey(value, 'value')) {\n return Object.defineProperty(obj, key, value)\n }\n else {\n return Object.defineProperty(obj, key, { value })\n }\n }\n else {\n return Object.defineProperty(obj, key, { value })\n }\n}\n\n/**\n * @param {object|array} obj\n * @param {function} [determine]\n * @returns {object}\n */\nexport function flat(obj, determine) {\n const flat = (input, path = '', result = {}) => {\n if (isArray(input)) {\n input.forEach((item, i) => flat(item, `${path}[${i}]`, result))\n return result\n }\n else if (input && typeof input === 'object' && !isFile(input) && !isDate(input)) {\n if (isFunction(determine) && !determine(input)) {\n result[path] = input\n return result\n }\n\n each(input, (value, key) => {\n flat(value, !path ? key : `${path}[${key}]`, result)\n })\n return result\n }\n else {\n result[path] = input\n return result\n }\n }\n return flat(obj)\n}\n\n/**\n * @param {object|array} obj\n * @param {function} fn\n * @param {boolean} descriptor\n * @returns {object|array}\n */\nexport function each(obj, fn, descriptor) {\n const withDescriptor = () => {\n const descriptors = Object.getOwnPropertyDescriptors(obj)\n const keys = Object.keys(descriptors)\n keys.forEach((key) => {\n const descriptor = descriptors[key]\n const { get, set, enumerable, configurable, writable } = descriptor\n if (enumerable || (get || set) || (configurable && writable)) {\n fn(descriptor, key, obj)\n }\n })\n }\n\n const withIterator = () => {\n if (isArray(obj)) {\n obj.forEach(fn)\n }\n else {\n const keys = Object.keys(obj)\n keys.forEach((key) => {\n const value = obj[key]\n fn(value, key, obj)\n })\n }\n }\n\n return descriptor ? withDescriptor() : withIterator()\n}\n\n/**\n * @param {object|array} obj\n * @param {function} fn\n * @returns {object}\n */\nexport function map(obj, fn) {\n if (isArray(obj)) {\n return obj.map(fn)\n }\n else {\n const result = {}\n each(obj, (value, key) => {\n result[key] = fn(value, key, obj)\n })\n return result\n }\n}\n\n/**\n * @param {object|array} obj\n * @param {function} fn\n * @returns {object}\n */\nexport function filter(obj, fn) {\n if (isArray(obj)) {\n return obj.filter(fn)\n }\n else {\n const result = {}\n each(obj, (value, key) => {\n const bool = fn(value, key, obj)\n if (!bool) {\n return\n }\n result[key] = value\n })\n return result\n }\n}\n\n/**\n * @param {object|array} obj\n * @param {function} fn\n */\nexport function iterate(obj, fn) {\n if (isArray(obj)) {\n for (let i = 0, len = obj.length; i < len; i ++) {\n const item = obj[i]\n const res = fn(item, i, obj)\n if (!isUndefined(res)) {\n return res\n }\n }\n }\n else {\n const keys = Object.keys(obj)\n for (let i = 0, len = keys.length; i < len; i ++) {\n const key = keys[i]\n const value = obj[key]\n const res = fn(value, key, obj)\n if (!isUndefined(res)) {\n return res\n }\n }\n }\n}\n\n/**\n * @param {object|array} obj\n * @param {function} fn\n */\nexport function find(obj, fn) {\n return iterate(obj, (value, key) => {\n const res = fn(value, key, obj)\n if (res) {\n return value\n }\n })\n}\n\n/**\n * @param {object} obj\n * @param {array} keys\n * @returns {object}\n */\nexport function extract(obj, keys) {\n const results = {}\n keys.forEach((key) => {\n if (hasOwnKey(obj, key)) {\n results[key] = obj[key]\n }\n })\n return results\n}\n\n/**\n * deep freeze\n * @param {object} o\n * @returns {object}\n */\nexport function freeze(o) {\n\tif (!Object.freeze) {\n\t\treturn o\n\t}\n\n\tObject.freeze(o)\n\n\tObject.getOwnPropertyNames(o).forEach((prop) => {\n\t\tconst v = o[prop]\n\t\tif (\n\t\t\tObject.prototype.hasOwnProperty.call(o, prop)\n\t\t\t&& v !== null\n\t\t\t&& (typeof v === 'object' || typeof v === 'function')\n\t\t\t&& !Object.isFrozen(v)\n\t\t) {\n\t\t\tfreeze(v)\n\t\t}\n\t})\n\n\treturn o\n}\n\n/**\n * create a reactive object.\n * it will change your original data\n * @param {object|array} origin\n * @param {object} options\n * @param {function} options.get to modify output value of each node, receive (keyPath, reactiveValue), reactiveValue is a reactive object/array as if, keyPath is an array which catains keys in path\n * @param {function} options.set to modify input value of each node, receive (keyPath, nextValue), nextValue is the given passed value, the return value will be transformed to be reactive object/array as if\n * @param {function} options.dispatch to notify change with keyPath, receive (keypath, next, prev), it will be called after value is set into\n * @param {function} options.writable whether be able to change value, return false to disable writable, default is true\n * @param {function} options.disable return true to disable create nest reactive on this node\n * @returns {object|array}\n * @example\n * const some = {\n * body: {\n * hand: true,\n * foot: true,\n * },\n * }\n * const a = createReactive(some, {\n * get(keyPath, value) {\n * if (keyPath.join('.') === 'body.hand') {\n * return value.toString()\n * }\n * else {\n * return value\n * }\n * },\n * set(keyPath, value) {},\n * dispatch({\n * keyPath,\n * value, // receive value\n * input, // getter output\n * next, // created reactive\n * prev, // current reactive\n * }, force) {},\n * })\n *\n * a !== some // reactive object !== object\n * a.body !== some.body // reactive object !== object\n * a.body.hand !== some.body.hand // true !== 'true'\n * a.body.foot == some.body.foot // true == true\n *\n * a.body.hand = false // now a.body.hand is 'false', a string\n * some.body.hand === false // original data changed\n */\nexport function createReactive(origin, options = {}) {\n const { get, set, del, dispatch, writable, disable, receive } = options\n\n const create = (origin, parents = []) => {\n if (!isObject(origin) && !isArray(origin)) {\n return origin\n }\n\n if (isFunction(disable) && disable(parents, origin)) {\n return origin\n }\n\n let output = null\n if (isObject(origin)) {\n output = createObject(origin, parents)\n }\n else {\n output = createArray(origin, parents)\n }\n\n return output\n }\n\n const createObject = (origin, parents = []) => {\n const media = {}\n const reactive = {}\n\n const setValue = (key, value, trigger) => {\n const keyPath = [...parents, key]\n\n if (Object.isFrozen(origin)) {\n const active = create(value, keyPath)\n return active\n }\n\n const prev = origin[key]\n const invalid = media[key]\n const input = isFunction(set) ? set(keyPath, value) : value\n\n let active\n let next\n if (inObject(key, media) && (\n value === prev\n || value === invalid\n || input === prev\n || input === invalid\n )) {\n // origin property is changed any where else\n if ((typeof prev !== 'object' || prev === null) && prev !== invalid) {\n next = prev\n active = prev\n }\n else if (invalid && typeof invalid === 'object' && invalid.$$_ORIGIN !== prev) {\n next = prev\n active = create(prev, keyPath)\n }\n else {\n next = prev\n active = invalid\n }\n }\n else {\n next = input\n active = create(next, keyPath)\n }\n\n origin[key] = next\n media[key] = active\n\n if (trigger && isFunction(dispatch)) {\n dispatch({\n keyPath,\n value,\n next, active,\n prev, invalid,\n })\n }\n\n return active\n }\n\n const delValue = (key, trigger) => {\n const keyPath = [...parents, key]\n const prev = origin[key]\n const invalid = media[key]\n\n if (isFunction(del)) {\n del(keyPath)\n }\n\n delete reactive[key]\n delete media[key]\n delete origin[key]\n\n if (trigger && isFunction(dispatch)) {\n const none = void 0\n dispatch({\n keyPath,\n value: none,\n next: none,\n active: none,\n prev, invalid,\n }, isUndefined(prev))\n }\n }\n\n const put = (key, value, trigger) => {\n const keyPath = [...parents, key]\n\n Object.defineProperty(reactive, key, {\n get: () => {\n const active = media[key]\n const output = isFunction(get) ? get(keyPath, active) : active\n return output\n },\n set: (value) => {\n if (isFunction(receive)) {\n receive(keyPath, value)\n }\n\n if (Object.isFrozen(origin)) {\n return media[key]\n }\n\n if (isFunction(writable) && !writable(keyPath, value)) {\n return media[key]\n }\n\n const descriptor = Object.getOwnPropertyDescriptor(media, key)\n if (descriptor) {\n if (!('value' in descriptor)) {\n if ('set' in descriptor) {\n origin[key] = value\n }\n return value\n }\n if (!descriptor.writable) {\n return descriptor.value\n }\n }\n\n const active = setValue(key, value, true)\n return active\n },\n enumerable: true,\n configurable: true,\n })\n\n // initialize the current value at the first time\n const active = setValue(key, value, trigger)\n return active\n }\n\n each(origin, (descriptor, key) => {\n if ('value' in descriptor) {\n const value = descriptor.value\n put(key, value)\n }\n else {\n Object.defineProperty(media, key, descriptor)\n }\n }, true)\n\n Object.defineProperties(reactive, {\n $get: {\n value: key => reactive[key],\n },\n $set: {\n value: (key, value) => {\n const keyPath = [...parents, key]\n\n if (isFunction(receive)) {\n receive(keyPath, value)\n }\n\n if (Object.isFrozen(origin)) {\n return media[key]\n }\n\n if (isFunction(writable) && !writable(keyPath)) {\n return media[key]\n }\n\n const descriptor = Object.getOwnPropertyDescriptor(media, key)\n if (descriptor) {\n if (!('value' in descriptor)) {\n if ('set' in descriptor) {\n origin[key] = value\n }\n return value\n }\n if (!descriptor.writable) {\n return descriptor.value\n }\n }\n\n const active = inObject(key, reactive) ? setValue(key, value, true) : put(key, value, true)\n return active\n },\n },\n $del: {\n value: (key) => {\n const keyPath = [...parents, key]\n\n if (isFunction(receive)) {\n receive(keyPath)\n }\n\n if (Object.isFrozen(origin)) {\n return false\n }\n\n if (isFunction(writable) && !writable(keyPath)) {\n return false\n }\n\n const descriptor = Object.getOwnPropertyDescriptor(media, key)\n if (!descriptor) {\n return false\n }\n if (!descriptor.configurable) {\n return false\n }\n\n delValue(key, true)\n return true\n },\n },\n $$_ORIGIN: {\n get: () => origin,\n },\n })\n\n return reactive\n }\n\n const createArray = (origin, parents = []) => {\n const media = []\n const reactive = []\n\n const setValue = (i, value, trigger) => {\n const keyPath = [...parents, i]\n\n if (Object.isFrozen(origin)) {\n const active = create(value, keyPath)\n return active\n }\n\n const prev = origin[i]\n const invalid = media[i]\n const input = isFunction(set) ? set(keyPath, value) : value\n\n let active\n let next\n if (inObject(i, media) && (\n value === prev\n || value === invalid\n || input === prev\n || input === invalid\n )) {\n // origin property is changed any where else\n if ((typeof prev !== 'object' || prev === null) && prev !== invalid) {\n next = prev\n active = prev\n }\n else if (invalid && typeof invalid === 'object' && invalid.$$_ORIGIN !== prev) {\n next = prev\n active = create(prev, keyPath)\n }\n else {\n next = prev\n active = invalid\n }\n }\n else {\n next = input\n active = create(next, keyPath)\n }\n\n origin[i] = next\n media[i] = active\n\n if (trigger && isFunction(dispatch)) {\n dispatch({\n keyPath,\n value,\n next, active,\n prev, invalid,\n })\n }\n\n return active\n }\n\n // fill items into output array\n // start and end, where to start and end\n // items, original data to use\n const shuffle = (start, end) => {\n for (let i = start; i <= end; i ++) {\n const keyPath = [...parents, i]\n\n Object.defineProperty(reactive, i, {\n get: () => {\n const active = media[i]\n const output = isFunction(get) ? get(keyPath, active) : active\n return output\n },\n set: (value) => {\n if (isFunction(writable) && !writable(keyPath, value)) {\n return media[i]\n }\n\n const descriptor = Object.getOwnPropertyDescriptor(media, i)\n if (descriptor) {\n if (!('value' in descriptor)) {\n if ('set' in descriptor) {\n origin[i] = value\n }\n return value\n }\n if (!descriptor.writable) {\n return descriptor.value\n }\n }\n\n const active = setValue(i, value, true)\n return active\n },\n enumerable: true,\n configurable: true,\n })\n\n // initialize\n setValue(i, origin[i])\n }\n\n // make sure the no use items are removed\n if (media.length > origin.length) {\n media.length = origin.length\n }\n if (reactive.length > media.length) {\n reactive.length = media.length\n }\n }\n\n // change array prototype methods\n const modify = (fn) => ({\n value: function(...args) {\n const nonAs = () => {\n if (fn === 'push' || fn === 'unshift') {\n return media.length\n }\n else if (fn === 'splice') {\n return []\n }\n else if (fn === 'shift') {\n return media[0]\n }\n else if (fn === 'pop') {\n return media[media.length - 1]\n }\n else if (fn === 'insert' || fn === 'remove') {\n return -1\n }\n else {\n return media\n }\n }\n\n if (isFunction(receive)) {\n receive(parents, origin, fn, args)\n }\n\n if (Object.isFrozen(origin)) {\n return nonAs()\n }\n\n if (isFunction(writable) && !writable(parents, origin)) {\n return nonAs()\n }\n\n // a hook to modify args for array push, shift inputs\n if (inObject(fn, options) && isFunction(options[fn])) {\n const res = options[fn](parents, args)\n // when return false, it means don't change the value\n if (res === false) {\n return nonAs()\n }\n // when return array, use it as new args\n if (isArray(res)) {\n args = res\n }\n // when return object, switch to another method\n else if (isObject(res)) {\n const { to, args: newArgs } = res\n fn = to\n args = newArgs\n }\n }\n\n let output = null\n\n // deal with original data\n const operate = () => {\n const before = origin.length\n output = Array.prototype[fn].apply(origin, args)\n const after = origin.length\n return [after, before]\n }\n\n if (fn === 'push') {\n const [after, before] = operate()\n output = after\n media.length = after\n reactive.length = after\n shuffle(before - 1, after - 1)\n }\n else if (fn === 'unshift') {\n const [after] = operate()\n output = after\n media.length = after\n reactive.length = after\n shuffle(0, after - 1)\n }\n else if (fn === 'splice') {\n const [after] = operate()\n\n const [start, len, ...items] = args\n output = media.slice(start, start + len)\n\n media.length = after\n reactive.length = after\n\n if (!items.length) {\n shuffle(start, after - 1)\n }\n else if (len === items.length) {\n shuffle(start, start + len - 1)\n }\n else {\n shuffle(start, after - 1)\n }\n }\n else if (fn === 'shift') {\n const [after] = operate()\n output = media[0]\n media.length = after\n reactive.length = after\n shuffle(0, after - 1)\n }\n else if (fn === 'pop') {\n const [after] = operate()\n output = media[media.length - 1]\n media.length = after\n reactive.length = after\n }\n else if (fn === 'fill') {\n const [, before] = operate()\n const [, start = 0, end = before] = args\n output = media\n shuffle(start, end - 1)\n }\n else if (fn === 'insert') {\n if (args.length < 1) {\n return -1\n }\n else if (args.length < 2) {\n const [item] = args\n output = origin.length\n Array.prototype.push.call(origin, item)\n shuffle(output, output)\n }\n else {\n const [item, before] = args\n const beforeIndex = decideby(() => {\n const mediaIndex = media.indexOf(before)\n if (mediaIndex > -1) {\n return mediaIndex\n }\n\n const originIndex = origin.indexOf(before)\n return originIndex\n })\n\n if (beforeIndex < 0) {\n return -1\n }\n\n Array.prototype.splice.call(origin, beforeIndex, 0, item)\n shuffle(beforeIndex, origin.length - 1)\n output = beforeIndex\n }\n }\n else if (fn === 'remove') {\n if (args.length < 1) {\n return -1\n }\n else {\n const [item] = args\n const index = decideby(() => {\n const mediaIndex = media.indexOf(item)\n if (mediaIndex > -1) {\n return mediaIndex\n }\n\n const originIndex = origin.indexOf(item)\n return originIndex\n })\n\n if (index < 0) {\n return index\n }\n\n Array.prototype.splice.call(origin, index, 1)\n Array.prototype.splice.call(media, index, 1)\n shuffle(index, origin.length - 1)\n output = index\n }\n }\n else {\n operate()\n output = media\n }\n\n if (isFunction(dispatch)) {\n dispatch({\n keyPath: parents,\n value: origin,\n next: origin,\n active: reactive,\n prev: origin,\n invalid: reactive,\n fn,\n result: output,\n }, true)\n }\n\n return output\n },\n })\n\n Object.defineProperties(reactive, {\n push: modify('push'),\n unshift: modify('unshift'),\n splice: modify('splice'),\n pop: modify('pop'),\n shift: modify('shift'),\n sort: modify('sort'),\n reverse: modify('reverse'),\n fill: modify('fill'),\n insert: modify('insert'),\n remove: modify('remove'),\n $$_ORIGIN: {\n get: () => origin,\n },\n })\n\n shuffle(0, origin.length - 1)\n\n return reactive\n }\n\n const output = create(origin)\n return output\n}\n\nconst ProxySymbol = Symbol('Proxy')\n/**\n * create a proxy object.\n * it will change your original data\n * @param {object|array} origin\n * @param {object} options\n * @param {function} options.get to modify output value of each node, receive (keyPath, proxiedValue), proxiedValue is a reactive object/array as if, keyPath is an array which catains keys in path\n * @param {function} options.set to modify input value of each node, receive (keyPath, nextValue), nextValue is the given passed value, the return value will be transformed to be reactive object/array as if\n * @param {function} options.dispatch to notify change with keyPath, receive (keypath, next, prev), it will be called after value is set into\n * @param {function} options.writable whether be able to change value, return false to disable writable, default is true\n * @returns {Proxy}\n * @example\n * const some = {\n * body: {\n * hand: true,\n * foot: true,\n * },\n * }\n * const a = createProxy(some, {\n * get(keyPath, value) {\n * if (keyPath.join('.') === 'body.hand') {\n * return value.toString()\n * }\n * else {\n * return value\n * }\n * },\n * set(keyPath, value) {},\n * dispatch(keyPath, next, current) {},\n * })\n *\n * a !== some // proxy object !== object\n * a.body !== some.body // proxy object !== object\n * a.body.hand !== some.body.hand // true !== 'true'\n * a.body.foot == some.body.foot // true == true\n *\n * a.body.hand = false // now a.body.hand is 'false', a string\n * some.body.hand === false // some.body.hand changes to false\n */\nexport function createProxy(origin, options = {}) {\n const { get, set, del, dispatch, writable, disable, receive, extensible, enumerable } = options\n\n const create = (origin, parents = []) => {\n if (!isObject(origin) && !isArray(origin)) {\n return origin\n }\n\n if (isFunction(disable) && disable(parents, origin)) {\n return origin\n }\n\n let output = null\n if (isObject(origin)) {\n output = createObject(origin, parents)\n }\n else {\n output = createArray(origin, parents)\n }\n\n return output\n }\n\n const createObject = (origin, parents = []) => {\n const media = {}\n const proxy = new Proxy(media, {\n get: (target, key, receiver) => {\n // get original property value\n if (isSymbol(key) && key === ProxySymbol) {\n return origin\n }\n\n // primitive property\n // such as 'a' + obj, and obj[Symbol.toPrimitive](hint) defined\n if (isSymbol(key) && getSymbolContent(key).indexOf('Symbol.') === 0) {\n return Reflect.get(target, key, receiver)\n }\n\n const active = Reflect.get(target, key, receiver)\n\n // here should be noticed\n // a Symbol key will not to into `get` option function\n if (isFunction(get) && !isSymbol(key)) {\n const keyPath = [...parents, key]\n const output = get(keyPath, active)\n return output\n }\n else {\n return active\n }\n },\n set: (target, key, value, receiver) => {\n const keyPath = [...parents, key]\n\n if (isFunction(receive)) {\n receive(keyPath, value)\n }\n\n if (Object.isFrozen(origin)) {\n return true\n }\n\n if (isFunction(writable) && !writable(keyPath, value)) {\n return true\n }\n\n const descriptor = Object.getOwnPropertyDescriptor(media, key)\n if (descriptor) {\n if (!('value' in descriptor)) {\n if ('set' in descriptor) {\n origin[key] = value\n }\n return true\n }\n if (!descriptor.writable) {\n return true\n }\n }\n\n const prev = origin[key]\n const invalid = media[key]\n const input = isFunction(set) ? set(keyPath, value) : value\n\n let active\n let next\n if (inObject(key, media) && (\n value === prev\n || value === invalid\n || input === prev\n || input === invalid\n )) {\n next = prev\n active = invalid\n }\n else {\n next = input\n active = create(next, keyPath)\n }\n\n origin[key] = next\n Reflect.set(target, key, active, receiver)\n\n if (isFunction(dispatch)) {\n dispatch({\n keyPath,\n value,\n next, active,\n prev, invalid,\n })\n }\n\n return true\n },\n deleteProperty: (target, key) => {\n const keyPath = [...parents, key]\n\n if (isFunction(receive)) {\n receive(keyPath)\n }\n\n if (Object.isFrozen(origin)) {\n return true\n }\n\n if (isFunction(writable) && !writable(keyPath)) {\n return true\n }\n\n const descriptor = Object.getOwnPropertyDescriptor(media, key)\n if (!descriptor) {\n return true\n }\n if (!descriptor.configurable) {\n return true\n }\n\n const prev = origin[key]\n const invalid = media[key]\n\n if (isFunction(del) && !isSymbol(key)) {\n del(keyPath)\n }\n\n delete origin[key]\n Reflect.deleteProperty(target, key)\n\n if (isFunction(dispatch)) {\n const none = undefined\n dispatch({\n keyPath,\n value: none,\n next: none,\n active: none,\n prev, invalid,\n }, !isUndefined(prev))\n }\n\n return true\n },\n has(target, key) {\n if (isFunction(enumerable)) {\n const keyPath = [...parents, key]\n return enumerable(keyPath)\n }\n return key in target\n },\n isExtensible() {\n const keyPath = [...parents]\n if (isFunction(extensible)) {\n return extensible(keyPath)\n }\n return true\n },\n })\n\n each(origin, (descriptor, key) => {\n if ('value' in descriptor) {\n const value = descriptor.value\n const keyPath = [...parents, key]\n\n if (Object.isFrozen(origin)) {\n media[key] = create(value, keyPath)\n }\n else {\n const needRewrite = isFunction(set) && !isSymbol(key)\n const next = needRewrite ? set(keyPath, value) : value\n\n if (needRewrite) {\n origin[key] = next\n }\n\n media[key] = create(next, keyPath)\n }\n }\n else {\n Object.defineProperty(media, key, descriptor)\n }\n }, true)\n\n return proxy\n }\n\n const createArray = (origin, parents = []) => {\n const media = []\n const proxy = new Proxy(media, {\n get: (target, key, receiver) => {\n // get original property value\n if (isSymbol(key) && key === ProxySymbol) {\n return origin\n }\n\n // primitive property\n // such as 'a' + obj, and obj[Symbol.toPrimitive](hint) defined\n if (isSymbol(key) && getSymbolContent(key).indexOf('Symbol.') === 0) {\n return Reflect.get(target, key, receiver)\n }\n\n // array primitive operation\n const methods = [\n // the following 3 lines will change the array's length\n // the following 1 line will return the new length\n 'push', 'unshift',\n // the following 1 line will return the spliced items array\n 'splice',\n // the following 1 line will return the removed item value\n 'shift', 'pop',\n // the following 1 line will return the changed original array\n 'sort', 'reverse', 'fill',\n // provided method\n 'insert', 'remove',\n ]\n if (inArray(key, methods)) {\n return (...args) => {\n const nonAs = () => {\n if (key === 'push' || key === 'unshift') {\n return origin.length\n }\n else if (key === 'splice') {\n return []\n }\n else if (key === 'shift') {\n return media[0]\n }\n else if (key === 'pop') {\n return media[origin.length - 1]\n }\n else if (key === 'insert') {\n return -1\n }\n else {\n return media\n }\n }\n\n if (isFunction(receive)) {\n receive(parents, origin, key, args)\n }\n\n if (Object.isFrozen(origin)) {\n return nonAs()\n }\n\n if (isFunction(writable) && !writable(parents, origin)) {\n return nonAs()\n }\n\n // a hook to modify args for array push, shift inputs\n if (inObject(key, options) && isFunction(options[key])) {\n const res = options[key](parents, args)\n // when return false, it means don't change the value\n if (res === false) {\n return nonAs()\n }\n // when return array, use it as new args\n if (isArray(res)) {\n args = res\n }\n // when return object, switch to another method\n else if (isObject(res)) {\n const { to, args: newArgs } = res\n key = to\n args = newArgs\n }\n }\n\n const max = origin.length\n let output = null\n\n // create sub children\n if (key === 'push') {\n // change original data\n Array.prototype[key].apply(origin, args)\n\n const medias = args.map((item, i) => {\n const index = max + i\n return create(item, [...parents, index])\n })\n output = Array.prototype.push.apply(media, medias)\n }\n else if (key === 'splice') {\n // change original data\n Array.prototype[key].apply(origin, args)\n\n const [start, len, ...items] = args\n if (!items.length) {\n output = Array.prototype.splice.call(media, start, len)\n }\n else if (len === items.length) {\n const medias = items.map((item, i) => {\n const index = start + i\n return create(item, [...parents, index])\n })\n const params = [start, len, ...medias]\n output = Array.prototype.splice.apply(media, params)\n }\n // the ones which are right in media will be changed\n else {\n output = media.slice(start, start + len)\n\n const items = origin.slice(start)\n const medias = items.map((item, i) => {\n const index = start + i\n return create(item, [...parents, index])\n })\n const params = [start, origin.length, ...medias]\n Array.prototype.splice.apply(media, params)\n }\n }\n else if (key === 'fill') {\n // change original data\n Array.prototype[key].apply(origin, args)\n\n const [item, start = 0, end = max] = args\n const items = []\n for (let i = start; i < end; i ++) {\n items.push(create(item, [...parents, i]))\n }\n const params = [start, end - start, items]\n Array.prototype.splice.apply(media, params)\n output = media\n }\n else if (key === 'insert') {\n if (args.length < 1) {\n return -1\n }\n else if (args.length < 2) {\n const [item] = args\n output = origin.length\n Array.prototype.push.call(origin, item)\n Array.prototype.push.call(media, item)\n }\n else {\n const [item, before] = args\n const beforeIndex = decideby(() => {\n const mediaIndex = media.indexOf(before)\n if (mediaIndex > -1) {\n return mediaIndex\n }\n\n const originIndex = origin.indexOf(before)\n return originIndex\n })\n\n if (beforeIndex < 0) {\n return -1\n }\n\n Array.prototype.splice.call(origin, beforeIndex, 0, item)\n Array.prototype.splice.call(media, beforeIndex, 0, item)\n output = beforeIndex\n }\n }\n else if (key === 'remove') {\n const [item] = args\n const index = decideby(() => {\n const mediaIndex = media.indexOf(item)\n if (mediaIndex > -1) {\n return mediaIndex\n }\n\n const originIndex = origin.indexOf(item)\n return originIndex\n })\n\n if (index < 0) {\n return index\n }\n\n Array.prototype.splice.call(origin, index, 1)\n Array.prototype.splice.call(media, index, 1)\n output = index\n }\n else {\n // change original data\n Array.prototype[key].apply(origin, args)\n output = Array.prototype[key].apply(media, args)\n }\n\n if (isFunction(dispatch)) {\n dispatch({\n keyPath: parents,\n value: origin,\n next: origin,\n active: proxy,\n prev: origin,\n invalid: proxy,\n fn: key,\n result: output,\n }, true)\n }\n\n return output\n }\n }\n\n const keyPath = [...parents, key]\n const active = Reflect.get(target, key, receiver)\n\n // here should be noticed\n // a Symbol key will not to into `get` option function\n if (isFunction(get) && !isSymbol(key)) {\n const output = get(keyPath, active)\n return output\n }\n else {\n return active\n }\n },\n set: (target, key, value, receiver) => {\n const keyPath = [...parents, key]\n\n if (isFunction(receive)) {\n receive(keyPath, value)\n }\n\n if (Object.isFrozen(origin)) {\n return true\n }\n\n if (isFunction(writable) && !writable(keyPath, value)) {\n return true\n }\n\n const descriptor = Object.getOwnPropertyDescriptor(media, key)\n if (descriptor) {\n if (!('value' in descriptor)) {\n if ('set' in descriptor) {\n origin[key] = value\n }\n return true\n }\n if (!descriptor.writable) {\n return true\n }\n }\n\n // operate like media.length = 0\n if (key === 'length') {\n if (isFunction(writable) && !writable(parents, origin)) {\n return true\n }\n\n origin.length = value\n media.length = value\n\n if (isFunction(dispatch)) {\n dispatch({\n keyPath: parents,\n value: origin,\n next: origin,\n prev: origin,\n active: proxy,\n }, true)\n }\n\n return true\n }\n\n const prev = origin[key]\n const invalid = media[key]\n const input = isFunction(set) ? set(keyPath, value) : value\n\n let active\n let next\n if (inObject(key, media) && (\n value === prev\n || value === invalid\n || input === prev\n || input === invalid\n )) {\n next = prev\n active = invalid\n }\n else {\n next = input\n active = create(next, keyPath)\n }\n\n origin[key] = next\n Reflect.set(target, key, active, receiver)\n\n if (isFunction(dispatch)) {\n dispatch({\n keyPath,\n value,\n next, active,\n prev, invalid,\n })\n }\n\n return true\n },\n deleteProperty: (target, key) => {\n const keyPath = [...parents, key]\n\n if (isFunction(receive)) {\n receive(keyPath)\n }\n\n if (Object.isFrozen(origin)) {\n return true\n }\n\n if (isFunction(writable) && !writable(keyPath)) {\n return true\n }\n\n const descriptor = Object.getOwnPropertyDescriptor(media, key)\n if (!descriptor) {\n return true\n }\n if (!descriptor.configurable) {\n return true\n }\n\n const prev = origin[key]\n const invalid = media[key]\n\n if (isFunction(del) && !isSymbol(key)) {\n del(keyPath)\n }\n\n delete origin[key]\n Reflect.deleteProperty(target, key)\n\n if (isFunction(dispatch)) {\n const none = undefined\n dispatch({\n keyPath,\n value: none,\n next: none,\n active: none,\n prev, invalid,\n }, !isUndefined(prev))\n }\n\n return true\n },\n has(target, key) {\n if (inArray(key, ['remove', 'insert'])) {\n return true\n }\n if (isFunction(enumerable)) {\n const keyPath = [...parents, key]\n return enumerable(keyPath)\n }\n return key in target\n },\n isExtensible() {\n if (isFunction(extensible)) {\n const keyPath = [...parents]\n return extensible(keyPath)\n }\n return true\n },\n })\n\n each(origin, (descriptor, i) => {\n if ('value' in descriptor) {\n const value = descriptor.value\n const keyPath = [...parents, i]\n\n if (Object.isFrozen(origin)) {\n media[i] = create(value, keyPath)\n }\n else {\n const needRewrite = isFunction(set) && !isSymbol(i)\n const next = needRewrite ? set(keyPath, value) : value\n\n if (needRewrite) {\n origin[i] = next\n }\n\n media[i] = create(next, keyPath)\n }\n }\n else {\n Object.defineProperty(media, key, descriptor)\n }\n }, true)\n\n return proxy\n }\n\n const output = create(origin)\n return output\n}\n\n/**\n * determine whether an object is a Proxy\n * @param {any} value\n * @returns {boolean}\n */\nexport function isProxy(value) {\n return !!(value && value[ProxySymbol])\n}\n\n/**\n * refine the original value from a Proxy\n * @param {object} obj\n * @returns {any}\n */\nexport function refineProxy(obj) {\n return obj ? obj[ProxySymbol] : void 0\n}\n\n/**\n * get the string of a symbol\n * @param {symbol} symb\n * @returns {string}\n */\nexport function getSymbolContent(symb) {\n if (symb.description) {\n return symb.description\n }\n const str = symb.toString()\n return str.substring(7, str.length - 1)\n}\n\n/**\n * convert an object to an entry array\n * @param {object} obj\n * @returns {array[]}\n */\nexport function toEntries(obj) {\n const keys = Object.keys(obj)\n return keys.map(key => [key, obj[key]])\n}\n\n/**\n * conver an entry/key-value array to an object\n * @param {array[] | object[]} entries\n * @param {boolean} kv\n * @returns {object}\n */\nexport function fromEntries(entries, kv = false) {\n const obj = {}\n entries.forEach((item) => {\n if (kv) {\n const { key, value } = item\n obj[key] = value\n }\n else {\n const [key, value] = item\n obj[key] = value\n }\n })\n return obj\n}\n","import {\n getConstructorOf,\n createRandomString,\n map,\n isFunction,\n isArray,\n} from 'ts-fns';\n\nexport class Anys {\n constructor(options) {\n this._events = [];\n this._queue = [];\n\n const Constructor = getConstructorOf(this);\n\n const {\n filters: defaultFilters = [],\n plugins: defaultPluings = [],\n ...defaultOptions\n } = {\n ...Anys.defaultOptions,\n ...(Constructor.defaultOptions || {}),\n };\n\n const {\n filters: givenFilters = [],\n plugins: givenPluings = [],\n defines: givenDefines = [],\n ...givenOptions\n } = options || {};\n\n /**\n * generate this.plugins, this.options, this.filters\n * these should be generated when constrcutor processing\n */\n\n const pluginOptions = {};\n const pluginFilters = [];\n const pluginDefines = {};\n\n const isGivenPluginsMapping = givenPluings && !isArray(givenPluings) && typeof givenPluings === 'object';\n const givenPluingList = isGivenPluginsMapping ? objectValues(givenPluings) : isArray(givenPluings) ? givenPluings : [];\n const givenPluginMapping = isGivenPluginsMapping ? Object.keys(givenPluings).map((key) => ({ key, value: givenPluings[key] })) : [];\n\n // create a plugin list which is sorted be dependence direction\n const pluginsDraft = [...defaultPluings, ...givenPluingList];\n const mergePluginDeps = (pluginList) => {\n pluginList.forEach((Plugin) => {\n const depPlugins = Plugin.dependencies || [];\n depPlugins.forEach((dep) => {\n pluginsDraft.unshift(dep);\n });\n mergePluginDeps(depPlugins);\n });\n };\n mergePluginDeps(pluginsDraft);\n const pluginList = pluginsDraft.filter((item, i) => i === pluginsDraft.indexOf(item));\n\n const plugins = [];\n const pluginSet = {};\n pluginList.forEach((Plugin) => {\n const warnExist = (name) => {\n const msg = `plugin named '${name}' has been registered`;\n if (!(pluginSet[name] instanceof Plugin)) {\n console.error(msg, Plugin, pluginSet);\n }\n else {\n console.debug(msg, Plugin, pluginSet);\n }\n }\n\n const localName = givenPluginMapping.find(item => item.value === Plugin)?.key;\n if (localName && pluginSet[localName]) {\n warnExist(localName);\n return;\n }\n\n // const { displayName } = Plugin;\n // if (displayName && pluginSet[displayName]) {\n // warnExist(displayName);\n // return;\n // }\n\n const deps = (Plugin.dependencies || [])\n .map((P) => plugins.find((item) => item instanceof P));\n const plugin = new Plugin(this, deps);\n if (plugin.options) {\n objectAssign(pluginOptions, plugin.options());\n }\n if (plugin.defines) {\n objectAssign(pluginDefines, plugin.defines());\n }\n if (plugin.filters) {\n pluginFilters.push(...plugin.filters());\n }\n plugins.push(plugin);\n\n // if (displayName) {\n // pluginSet[displayName] = plugin;\n // }\n\n if (localName) {\n pluginSet[localName] = plugin;\n }\n });\n\n this._pluginList = plugins;\n this.plugins = pluginSet;\n this.options = { ...defaultOptions, ...pluginOptions, ...givenOptions };\n this.filters = [...defaultFilters, ...pluginFilters, ...givenFilters];\n\n /**\n * check required options which is not passed\n */\n const optionValues = objectValues(this.options);\n const requiredOption = optionValues.find((item) => item && item instanceof Error);\n if (requiredOption) {\n throw requiredOption;\n }\n\n /**\n * init log basic properties\n * clientId, traceId, requestId are special\n */\n\n const definitions = {\n ...pluginDefines,\n ...givenDefines,\n };\n\n this.definitions = definitions;\n this.clientId = definitions.client ? definitions.client() : createRandomString(8);\n this.traceId = definitions.trace ? definitions.trace() : createRandomString(8);\n this.requestId = createRandomString(8);\n\n const basicLog = {};\n Object.defineProperties(basicLog, map(definitions, (define) => ({\n get: isFunction(define) ? define : () => define,\n enumerable: true,\n configurable: true,\n })));\n Object.defineProperties(basicLog, {\n client: {\n get: () => this.clientId,\n enumerable: true,\n configurable: true,\n },\n trace: {\n get: () => this.traceId,\n enumerable: true,\n configurable: true,\n },\n request: {\n get: () => this.requestId,\n enumerable: true,\n configurable: true,\n },\n });\n this._basicLog = basicLog;\n\n /**\n * setup instance\n */\n\n this.invoke('init');\n this._inited = true;\n this.invoke('ready');\n\n if (this.options.autoStart) {\n this.start();\n }\n }\n\n define(key, get) {\n Object.defineProperty(this._basicLog, key, {\n get,\n enumerable: true,\n configurable: true,\n });\n }\n\n on(event, callback) {\n this._events.push([event, callback]);\n }\n\n off(event, callback) {\n this._events.forEach((item, i) => {\n if (item[0] === event && item[1] === callback) {\n this._events.splice(i, 1);\n }\n });\n }\n\n emit(event, ...args) {\n this._events.forEach((item) => {\n if (item[0] === event || item[0] === '*') {\n item[1](...args);\n }\n });\n }\n\n invoke(type, ...args) {\n const defers = [];\n for (let i = 0, len = this._pluginList.length; i < len; i += 1) {\n const plugin = this._pluginList[i];\n if (!plugin[type]) {\n continue;\n }\n if (!isFunction(plugin[type])) {\n continue;\n }\n const res = plugin[type](...args);\n if (res instanceof Promise) {\n defers.push(res);\n }\n }\n return Promise.all(defers).then(() => {});\n }\n\n refreshTraceId() {\n const prevTraceId = this.traceId;\n this.invoke('refreshTraceId');\n this.traceId = this.definitions.trace ? this.definitions.trace() : createRandomString(8);\n this.emit('refreshTraceId', { prev: prevTraceId, next: this.traceId });\n }\n\n refreshRequestId() {\n const prevRequestId = this.requestId;\n this.requestId = createRandomString(8);\n this.emit('refreshRequestId', { prev: prevRequestId, next: this.requestId });\n }\n\n start() {\n this.invoke('start');\n this.emit('start');\n }\n\n write(log) {\n if (!this._inited) {\n throw new Error('could not write before ready');\n }\n\n const data = { ...this._basicLog, ...log };\n // check wheather the log can be write into\n const { filters } = this;\n for (let i = 0, len = filters.length; i < len; i += 1) {\n const filter = filters[i];\n if (!filter(data)) {\n return;\n }\n }\n\n for (let i = 0, len = this._pluginList.length; i < len; i += 1) {\n const plugin = this._pluginList[i];\n if (isFunction(plugin.filter)) {\n if (!plugin.filter(data)) {\n continue;\n }\n }\n if (isFunction(plugin.write)) {\n plugin.write(data);\n }\n }\n\n this.emit('write', data);\n }\n\n report(message) {\n if (!this._inited) {\n throw new Error('could not report before ready');\n }\n\n let resolve, reject;\n const defer = new Promise((ro, re) => {\n resolve = ro;\n reject = re;\n });\n const signal = { message, resolve, reject };\n this._queue.push(signal);\n\n /**\n * read logs\n */\n const read = (operators) => (next) => {\n const logs = [];\n const readDefers = [];\n operators.forEach((operator) => {\n if (!operator.read) {\n return;\n }\n\n const callback = (data) => {\n operator.data = data;\n if (data?.length) {\n logs.push(...data);\n }\n };\n\n const ret = operator.read(message);\n\n if (ret instanceof Promise) {\n ret.then(callback);\n readDefers.push(ret);\n }\n else {\n callback(ret);\n }\n });\n if (readDefers.length) {\n return Promise.all(readDefers).then(() => {\n this.emit('read', message, logs);\n next(logs);\n });\n }\n else {\n this.emit('read', message, logs);\n next(logs);\n }\n };\n\n /**\n * arrange logs\n */\n const arrange = (operators) => (next, logs) => {\n const arrageDefers = [];\n operators.forEach((operator) => {\n if (!operator.arrange) {\n return;\n }\n\n const callback = (chunks) => {\n operator.chunks = chunks;\n };\n\n const ret = operator.arrange(operator.data, logs);\n\n if (ret instanceof Promise) {\n ret.then(callback);\n arrageDefers.push(ret);\n }\n else {\n callback(ret);\n }\n });\n if (arrageDefers.length) {\n return Promise.all(arrageDefers).then(() => {\n this.emit('arrage', message, operators.map((item) => item.chunks));\n next(logs);\n });\n }\n else {\n this.emit('arrage', message, operators.map((item) => item.chunks));\n next(logs);\n }\n };\n\n /**\n * send logs\n */\n const send = (operators) => (next, logs) => {\n const sendDefers = [];\n operators.forEach((operator) => {\n if (!operator.send) {\n return;\n }\n\n const chunks = operator.chunks || [logs];\n\n chunks.forEach((chunk) => {\n if (!chunk?.length) {\n return;\n }\n const ret = operator.send(chunk);\n if (ret instanceof Promise) {\n sendDefers.push(ret);\n }\n });\n });\n if (sendDefers.length) {\n return Promise.all(sendDefers).then(() => {\n this.emit('send', message, operators.map((item) => item.chunks));\n next(logs);\n });\n }\n else {\n this.emit('send', message, operators.map((item) => item.chunks));\n next(logs);\n }\n };\n\n /**\n * clear logs\n */\n const clear = (operators) => (next, logs) => {\n const clearDefers = [];\n operators.forEach((operator) => {\n if (!operator.clear) {\n return;\n }\n\n const chunks = operator.chunks || [logs];\n\n chunks.forEach((chunk) => {\n const ret = operator.clear(chunk);\n if (ret && ret instanceof Promise) {\n clearDefers.push(ret);\n }\n });\n });\n if (clearDefers.length) {\n return Promise.all(clearDefers).then(() => {\n this.emit('clear', message, operators.map((item) => item.chunks));\n next();\n });\n }\n else {\n this.emit('clear', message, operators.map((item) => item.chunks));\n next();\n }\n };\n\n this._reporting = false;\n const run = () => {\n if (this._reporting) {\n return;\n }\n\n this._reporting = true;\n\n const signal = this._queue.shift();\n if (!signal) {\n return;\n }\n\n const { message, resolve, reject } = signal;\n this.emit('report', message);\n\n const discreteOperators = [];\n const intensiveOperators = [];\n\n for (let i = 0, len = this._pluginList.length; i < len; i += 1) {\n const plugin = this._pluginList[i];\n const operator = {};\n let flag = 0;\n if (isFunction(plugin.read)) {\n operator.read = plugin.read.bind(plugin);\n flag ++;\n }\n if (isFunction(plugin.arrange)) {\n operator.arrange = plugin.arrange.bind(plugin);\n flag ++;\n }\n if (isFunction(plugin.send)) {\n operator.send = plugin.send.bind(plugin);\n flag ++;\n }\n if (isFunction(plugin.clear)) {\n operator.clear = plugin.clear.bind(plugin);\n flag ++;\n }\n\n // if a plugin has all report hooks, it means this plugin will report by itself without any other plugin's effects\n if (flag === 4) {\n intensiveOperators.push(operator);\n }\n // depend on other plugins' hook result\n else if (flag) {\n discreteOperators.push(operator);\n }\n }\n\n pipe([\n read(intensiveOperators),\n read(discreteOperators),\n arrange([...intensiveOperators, ...discreteOperators]),\n send([...intensiveOperators, ...discreteOperators]),\n clear([...intensiveOperators, ...discreteOperators]),\n ], {\n onError: reject,\n onSuccess: resolve,\n onComplete: () => {\n this._reporting = false;\n run();\n },\n });\n };\n\n run();\n\n return defer;\n }\n\n send(logs) {\n logs = isArray(logs) ? logs : [logs];\n const res = this.invoke('send', logs);\n this.emit('send', logs);\n return res;\n }\n\n stop() {\n this.invoke('stop');\n this.emit('stop');\n }\n\n static defaultOptions = {\n /**\n * whether start plugins automaticly\n */\n autoStart: true,\n };\n}\n\nfunction objectValues(obj) {\n const keys = Object.keys(obj);\n const values = keys.map(key => obj[key]);\n return values;\n}\n\nfunction objectAssign(obj1, obj2) {\n const keys = Object.keys(obj2);\n keys.forEach((key) => {\n const value = obj2[key];\n obj1[key] = value;\n });\n return obj1;\n}\n\nfunction pipe(fns, { onError, onSuccess, onComplete }) {\n let data, err;\n\n function next(arg) {\n data = arg;\n run();\n }\n\n function run() {\n if (err) {\n return;\n }\n\n const fn = fns.shift();\n\n // end\n if (!fn) {\n onSuccess();\n onComplete();\n return;\n }\n\n try {\n const ret = fn(next, data);\n if (ret instanceof Promise) {\n ret.catch((e) => {\n err = e;\n onError(e);\n onComplete();\n });\n }\n } catch (e) {\n err = e;\n onError(e);\n onComplete();\n }\n }\n\n run();\n}\n","import { each, define } from './object.js'\nimport { inObject } from './is.js'\n\n/**\n * @param {any} ins\n * @returns {boolean}\n */\nexport function getConstructorOf(ins) {\n return Object.getPrototypeOf(ins).constructor\n}\n\n/**\n * Create a new Child any which is inherited from Parent any\n * @param {any} Parent\n * @param {object} proptotypes\n * @param {object} statics\n * @returns {any}\n */\nexport function inherit(Parent, proptotypes, statics) {\n class Child extends Parent {}\n\n const name = Object.getOwnPropertyDescriptor(Parent, 'name')\n define(Child, 'name', {\n ...name,\n configurable: true,\n })\n\n if (proptotypes) {\n Object.assign(Child.prototype, proptotypes)\n Child.prototype.constructor = Child\n }\n\n each(Parent, (descriptor, key) => {\n if (statics && inObject(key, statics, true)) {\n return\n }\n define(Child, key, descriptor)\n }, true)\n\n if (statics) {\n each(statics, (descriptor, key) => {\n define(Child, key, descriptor)\n }, true)\n }\n\n return Child\n}\n\n/**\n * mix Extend into Source, (notice: will override Source)\n * @param {any} Source\n * @param {any} Extend\n * @param {any}\n */\nexport function mixin(Source, Extend) {\n each(Extend, (descriptor, key) => {\n define(Source, key, descriptor)\n }, true)\n\n each(Extend.prototype, (descriptor, key) => {\n if (key === 'constructor') {\n return\n }\n define(Source.prototype, key, descriptor)\n }, true)\n\n return Source\n}\n","export class AnysPlugin {\n constructor(anys) {\n this.anys = anys;\n this.$effects = {};\n }\n\n start() {\n // @ts-ignore\n if (!this.options) {\n return;\n }\n\n // @ts-ignore\n const options = this.options();\n const keys = Object.keys(options);\n const affect = (name) => {\n const methodName = `register${name.replace(name[0], name[0].toUpperCase())}`;\n if (this[methodName]) {\n const revoke = this[methodName]();\n this.$effects[name] = revoke;\n }\n };\n\n const stch = this.anys.options;\n keys.forEach((key) => {\n if (stch[key]) {\n affect(key);\n }\n });\n }\n\n stop() {\n // @ts-ignore\n if (!this.options) {\n return;\n }\n\n // @ts-ignore\n const options = this.options();\n const keys = Object.keys(options);\n const stch = this.anys.options;\n\n keys.forEach((key) => {\n const revoke = this.$effects[key];\n if (stch[key] && revoke) {\n revoke();\n }\n this.$effects[key] = null;\n });\n }\n}\n","import { createRandomString } from 'ts-fns';\n\nexport class AnysIdentifyPlugin {\n constructor(anys) {\n this.anys = anys;\n }\n\n options() {\n return {\n namespace: new Error('options.namespace is required!'),\n };\n }\n\n defines() {\n const defineClientId = () => {\n const { namespace } = this.anys.options;\n const key = `Anys.${namespace}.clientId`;\n let clientId = localStorage.getItem(key);\n if (!clientId) {\n clientId = createRandomString(8);\n localStorage.setItem(key, clientId);\n }\n return clientId;\n };\n\n const defineTraceId = () => {\n const { namespace } = this.anys.options;\n const key = `Anys.${namespace}.traceId`;\n let traceId = sessionStorage.getItem(key);\n if (!traceId) {\n traceId = createRandomString(8);\n sessionStorage.setItem(key, traceId);\n }\n return traceId;\n }\n\n return {\n client: defineClientId,\n trace: defineTraceId,\n };\n }\n\n refreshTraceId() {\n const { namespace } = this.anys.options;\n const key = `Anys.${namespace}.traceId`;\n const traceId = createRandomString(8);\n sessionStorage.setItem(key, traceId);\n }\n}\n","export function getPath(node, root = document.documentElement) {\n const { nodeName, path: nodePath } = node;\n\n if (nodePath) {\n return nodePath;\n }\n\n if (nodeName === 'BODY' || nodeName === 'HTML' || nodeName === 'HEAD') {\n return nodeName;\n }\n\n const path = [];\n\n let current = node;\n let parent = node.parentNode;\n\n const findIndex = (node) => {\n const { nodeName, parentNode } = node;\n // the node is not in document\n if (!parentNode) {\n return -1;\n }\n const siblings = [].filter.call(parentNode.childNodes, item => item.nodeName === nodeName);\n const index = siblings.indexOf(node);\n return index;\n };\n\n if (nodeName[0] === '#') {\n const index = findIndex(node);\n path.push(`${nodeName}:${index}`);\n current = parent;\n parent = current.parentNode;\n }\n\n while (parent) {\n if (current === root) {\n break;\n }\n const { nodeName } = current;\n if (nodeName === 'BODY' || nodeName === 'HTML' || nodeName === 'HEAD') {\n path.push(nodeName);\n }\n else {\n const index = findIndex(current);\n path.push(`${nodeName.toLowerCase()}:${index}`);\n }\n current = parent;\n parent = current.parentNode;\n }\n path.reverse();\n return path.join('/');\n}\n\nexport function findNode(selector, root = document) {\n if (!selector) {\n return root;\n }\n\n // HTML, BODY, HEAD\n if (/^[A-Z]+$/.test(selector)) {\n return root.querySelector(selector);\n }\n\n const path = selector.split('/');\n const items = path.map(item => item.split(':'));\n\n const el = items.reduce((target, [name, index]) => {\n if (!target) {\n return null;\n }\n\n if (/^[A-Z]+$/.test(name)) {\n return target.querySelector(name);\n }\n\n if (+index < 0) {\n return null;\n }\n\n const siblings = [].filter.call(target.childNodes, child => child.nodeName.toLowerCase() === name);\n const sibling = siblings[index];\n return sibling;\n }, root);\n\n if (!el) {\n return null;\n }\n\n return el;\n}\n","import { AnysPlugin, getPath } from 'anys-shared';\n\nexport class AnysMonitorInputEventPlugin extends AnysPlugin {\n options() {\n return {\n input: true,\n };\n }\n\n registerInput() {\n const extract = (filter) => (e) => {\n const {\n target, type, inputType, data,\n } = e;\n\n if (inputType === 'insertCompositionText') {\n return;\n }\n\n if (type === 'compositionend' && !data) {\n return;\n }\n\n const { tagName, value } = target;\n\n // ignore input when set data-ignore attribute\n if (target.getAttribute('data-ignore')) {\n return;\n }\n\n const elInput = target.getAttribute('type');\n\n const detailData = filter({ tagName, value, type: elInput, target });\n if (!detailData) {\n return;\n }\n\n const log = {\n type: 'input',\n time: Date.now(),\n el: getPath(target),\n detail: detailData,\n };\n this.anys.write(log);\n };\n\n const listenInput = extract(({ tagName, value, type }) => {\n if (tagName === 'INPUT' && type !== 'radio' && type !== 'checkbox' && type !== 'password') {\n return { value, type };\n }\n\n if (tagName === 'INPUT' && type === 'password') {\n return { value: '***', type };\n }\n\n if (tagName === 'TEXTAREA') {\n return { value, type: 'textarea' };\n }\n });\n\n const listenChange = extract(({ tagName, value, type }) => {\n if (tagName === 'SELECT') {\n return { value, type: 'select' };\n }\n\n if (tagName === 'INPUT' && (type === 'radio' || type === 'checkbox')) {\n return { value, type };\n }\n });\n\n const listenPaste = extract(({ tagName, value, type }) => {\n if (tagName === 'TEXTAREA') {\n return { value, type: 'textarea' };\n }\n\n if (tagName === 'INPUT') {\n return { value, type };\n }\n });\n\n document.addEventListener('input', listenInput, true);\n document.addEventListener('compositionend', listenInput, true);\n document.addEventListener('change', listenChange, true);\n document.addEventListener('paste', listenPaste, true);\n\n return () => {\n document.removeEventListener('input', listenInput);\n document.removeEventListener('compositionend', listenInput);\n document.removeEventListener('change', listenChange);\n document.removeEventListener('paste', listenPaste);\n };\n }\n}\n","import { AnysPlugin, getPath } from 'anys-shared';\n\nexport class AnysMonitorMouseEventPlugin extends AnysPlugin {\n options() {\n const isSupportTouch = 'ontouchend' in document;\n return {\n mouse: !isSupportTouch,\n click: true,\n mousemove: false,\n mousedown: false,\n mouseup: false,\n wheel: false,\n contextmenu: false,\n };\n }\n\n addEventListener(event, throttle) {\n if (!this.anys.options.mouse) {\n return;\n }\n\n const listener = this.createThrottleListener((e) => {\n const { innerWidth, innerHeight } = window;\n const {\n target, button,\n pageX, pageY,\n } = e;\n const log = {\n type: event,\n time: Date.now(),\n detail: {\n e: getPath(target),\n w: innerWidth,\n h: innerHeight,\n x: pageX,\n y: pageY,\n button,\n },\n };\n return log;\n }, throttle);\n document.addEventListener(event, listener, true);\n return () => document.removeEventListener(event, listener);\n }\n\n registerClick() {\n return this.addEventListener('click');\n }\n\n registerMouseup() {\n return this.addEventListener('mouseup');\n }\n\n registerMousedown() {\n return this.addEventListener('mousedown');\n }\n\n registerContextmenu() {\n return this.addEventListener('contextmenu');\n }\n\n registerMousemove() {\n return this.addEventListener('mousemove', 100);\n }\n\n registerWheel() {\n if (!this.anys.options.mouse) {\n return;\n }\n\n const type = 'wheel';\n const listener = this.createThrottleListener((e) => {\n const {\n target,\n deltaX,\n deltaY,\n deltaZ,\n deltaMode,\n } = e;\n const log = {\n type,\n time: Date.now(),\n detail: {\n e: getPath(target),\n deltaX,\n deltaY,\n deltaZ,\n mode: deltaMode,\n },\n };\n return log;\n }, 100);\n document.addEventListener(type, listener);\n return () => document.removeEventListener(type, listener);\n }\n\n createThrottleListener(createLog, throttle) {\n let ticking = 0;\n let time = 0;\n const listener = (e) => {\n if (ticking) {\n return;\n }\n\n const now = Date.now();\n if (throttle && time + throttle > now) {\n return;\n }\n\n const log = createLog(e);\n requestAnimationFrame(() => {\n this.anys.write(log);\n ticking = 0;\n time = Date.now();\n });\n\n ticking = 1;\n };\n return listener;\n }\n}\n","import { AnysPlugin } from 'anys-shared';\n\nconst enterLog = {\n type: 'window_activity.enter',\n time: Date.now(),\n};\n\nexport class AnysMonitorWindowActivityPlugin extends AnysPlugin {\n options() {\n return {\n activity: true,\n deadTimeout: 0,\n };\n }\n\n ready() {\n if (this.anys.options.activity) {\n // record right now\n this.anys.write(enterLog);\n }\n }\n\n registerActivity() {\n const onvisibilitychange = () => {\n if (document.visibilityState === 'hidden') {\n const log = {\n type: 'window_activity.focusout',\n time: Date.now(),\n };\n this.anys.write(log);\n } else {\n const log = {\n type: 'window_activity.focusin',\n time: Date.now(),\n };\n this.anys.write(log);\n }\n };\n\n // TODO 此时立即就要卸载了,应该尝试阻塞一下\n const onunload = () => {\n const log = {\n type: 'window_activity.unload',\n time: Date.now(),\n };\n this.anys.write(log);\n };\n\n window.addEventListener('beforeunload', onunload, true);\n document.addEventListener('visibilitychange', onvisibilitychange, true);\n\n return () => {\n window.removeEventListener('beforeunload', onunload);\n document.removeEventListener('visibilitychange', onvisibilitychange);\n };\n }\n\n registerDeadTimeout() {\n const { deadTimeout } = this.anys.options;\n if (!deadTimeout) {\n return;\n }\n\n let timer;\n const listener = () => {\n clearTimeout(timer);\n timer = setTimeout(() => {\n const log = {\n type: 'window_activity.dead',\n time: Date.now(),\n };\n this.anys.write(log);\n\n // @ts-ignore\n }, deadTimeout);\n };\n\n document.addEventListener('keydown', listener, true);\n document.addEventListener('mousedown', listener, true);\n document.addEventListener('touchstart', listener, true);\n document.addEventListener('touchmove', listener, true);\n document.addEventListener('mousemove', listener, true);\n document.addEventListener('scroll', listener, true);\n window.addEventListener('resize', listener, true);\n\n return () => {\n document.removeEventListener('keydown', listener);\n document.removeEventListener('mousedown', listener);\n document.removeEventListener('touchstart', listener);\n document.removeEventListener('touchmove', listener);\n document.removeEventListener('mousemove', listener);\n document.removeEventListener('scroll', listener);\n window.removeEventListener('resize', listener);\n };\n }\n}\n","import { AnysPlugin } from 'anys-shared';\n\nexport class AnysMonitorUrlPlugin extends AnysPlugin {\n options() {\n return {\n url: true,\n };\n }\n\n registerUrl() {\n const listener = () => {\n this.recordUrl();\n };\n\n window.addEventListener('hashchange', listener);\n window.addEventListener('popstate', listener);\n\n // 一启动就记录一次\n this.recordUrl();\n\n return () => {\n window.removeEventListener('hashchange', listener);\n window.removeEventListener('popstate', listener);\n };\n }\n\n recordUrl() {\n const url = window.location.href;\n const a = new URL(url);\n const path = a.pathname.replace(/^([^/])/, '/$1');\n const log = {\n type: 'url',\n time: Date.now(),\n url,\n detail: {\n uri: path + (a.search ? `?${a.search}` : ''),\n path,\n protocol: a.protocol.replace(':', ''),\n host: a.hostname,\n port: a.port,\n search: a.search,\n hash: a.hash.replace('#', ''),\n },\n };\n this.anys.write(log);\n }\n}\n","import { AnysPlugin, getPath } from 'anys-shared';\n\nexport class AnysMonitorTouchEventPlugin extends AnysPlugin {\n options() {\n const isSupportTouch = 'ontouchend' in document;\n return {\n touch: isSupportTouch,\n touchstart: isSupportTouch,\n touchend: isSupportTouch,\n touchmove: isSupportTouch,\n };\n }\n\n addEventListener(event) {\n if (!this.anys.options.touch) {\n return;\n }\n\n let ticking = 0;\n\n const listener = (e) => {\n if (ticking) {\n return;\n }\n\n const { innerWidth, innerHeight } = window;\n const {\n target, identifier, force,\n pageX, pageY,\n } = e;\n const log = {\n type: event,\n time: Date.now(),\n detail: {\n e: getPath(target),\n width: innerWidth,\n height: innerHeight,\n x: pageX,\n y: pageY,\n identifier,\n force,\n },\n };\n\n requestAnimationFrame(() => {\n this.anys.write(log);\n ticking = 0;\n });\n\n ticking = 1;\n };\n\n document.addEventListener(event, listener, true);\n\n return () => document.removeEventListener(event, listener);\n }\n\n registerTouchmove() {\n return this.addEventListener('touchmove');\n }\n\n registerTouchend() {\n return this.addEventListener('touchend');\n }\n\n registerTouchstart() {\n return this.addEventListener('touchstart');\n }\n}\n","export class AsyncQueue {\n constructor() {\n this.queue = [];\n this.status = 0;\n }\n\n push(runner) {\n let resolve; let\n reject;\n const defer = new Promise((rs, rj) => {\n resolve = rs;\n reject = rj;\n });\n const item = {\n runner,\n resolve,\n reject,\n };\n this.queue.push(item);\n\n const run = () => {\n setTimeout(() => {\n if (!this.queue.length) {\n this.status = 0;\n return;\n }\n\n const { runner: fn, resolve: rs, reject: rj } = this.queue.shift();\n fn().then(rs, rj).finally(run);\n }, 0);\n this.status = 1;\n };\n\n if (!this.status) {\n run();\n }\n\n return defer;\n }\n}\n","export class InDB {\n\t/**\n\t * InDB\n\t * @param {object} [options]\n\t * @param {string} [options.name] database name\n\t * @param {number} [options.version] database version\n\t * @param {object[]} [options.stores]\n\t * @param {string} [options.stores[].name] store name\n\t * @param {string} [options.stores[].primaryKeyPath] store primary keyPath\n\t * @param {boolean} [options.stores[].autoIncrement] is store primary keyPath autoIncrement, if true, primary key will be number\n\t * @param {boolean} [options.stores[].isKv] is store set to be Key-Value mode, if true, the store will have Storage methods, and `primaryKeyPath` `autoIncrement` not working\n\t * @param {object[]} [options.stores[].indexes]\n\t * @param {string} [options.stores[].indexes[].name] index name\n\t * @param {string} [options.stores[].indexes[].keyPath] index keyPath\n\t * @param {boolean} [options.stores[].indexes[].unique] should index value be unique\n\t * @returns\n\t */\n\tconstructor(options = {}) {\n\t\tlet { name, version = 1, stores } = options\n\t\tconst asStorage = !name\n\n\t\tif (!name) {\n\t\t\tname = '__indb__'\n\t\t}\n\n\t\tif (!stores || !Array.isArray(stores) || !stores.length) {\n\t\t\tstores = [\n\t\t\t\t{\n\t\t\t\t\tname: '__indb__',\n\t\t\t\t\tisKv: true,\n\t\t\t\t},\n\t\t\t]\n\t\t}\n\n\t\tthis.cache = {}\n\t\tthis.connection = null\n\n\t\tthis.name = name\n\t\tthis.version = version\n\t\tthis.stores = stores\n\n\t\t// update database structure\n\t\tconst request = indexedDB.open(name, version)\n\t\trequest.onupgradeneeded = (e) => {\n\t\t\t// @ts-ignore\n\t\t\tconst db = e.target.result\n\t\t\tconst existStoreNames = Array.from(db.objectStoreNames)\n\t\t\tconst passStoreNames = []\n\n\t\t\tstores.forEach((item) => {\n\t\t\t\tlet objectStore = null\n\t\t\t\tif (existStoreNames.indexOf(item.name) > -1) {\n\t\t\t\t\t// @ts-ignore\n\t\t\t\t\tobjectStore = e.target.transaction.objectStore(item.name)\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tconst keyPath = item.isKv ? 'key' : item.primaryKeyPath\n\t\t\t\t\tconst autoIncrement = item.isKv ? false : item.autoIncrement\n\t\t\t\t\tobjectStore = db.createObjectStore(item.name, { keyPath, autoIncrement })\n\t\t\t\t}\n\n\t\t\t\t// delete old indexes\n\t\t\t\tconst indexNames = objectStore.indexNames\n\t\t\t\tif (indexNames && indexNames.length) {\n\t\t\t\t\tArray.from(indexNames).forEach((item) => objectStore.deleteIndex(item))\n\t\t\t\t}\n\n\t\t\t\t// add new indexes\n\t\t\t\tif (item.indexes && item.indexes.length) {\n\t\t\t\t\titem.indexes.forEach((item) => {\n\t\t\t\t\t\tobjectStore.createIndex(item.name, item.keyPath || item.name, { unique: item.unique, multiEntry: Array.isArray(item.keyPath) })\n\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\tpassStoreNames.push(item.name)\n\t\t\t})\n\n\t\t\t// delete objectStores which is not in config information\n\t\t\t// notice, developers should backup data firstly\n\t\t\tif (existStoreNames) {\n\t\t\t\texistStoreNames.forEach((item) => {\n\t\t\t\t\tif (passStoreNames.indexOf(item) === -1) {\n\t\t\t\t\t\tdb.deleteObjectStore(item)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t\trequest.onblocked = (e) => {\n\t\t\tconsole.error(modifyError(new Error('indexedDB ' + name + ' is blocked')))\n\t\t}\n\n\t\t// use as a storage like:\n\t\t// const store = new InDB()\n\t\t// store.setItem('key', 'value')\n\t\tif (asStorage) {\n\t\t\t// @ts-ignore\n\t\t\treturn this.use(name)\n\t\t}\n\t}\n\n\tconnect() {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst request = indexedDB.open(this.name, this.version)\n\t\t\trequest.onerror = (e) => {\n\t\t\t\treject(modifyError(e))\n\t\t\t}\n\t\t\trequest.onsuccess = (e) => {\n\t\t\t\t// @ts-ignore\n\t\t\t\tresolve(e.target.result)\n\t\t\t}\n\t\t})\n\t}\n\n\t/**\n\t *\n\t * @param {string} name\n\t * @returns {InDBStore}\n\t */\n\tuse(name) {\n\t\tconst currentStore = this.stores.find(item => item.name === name)\n\n\t\tif (!currentStore) {\n\t\t\tthrow new Error(`[InDB]: store ${name} is not existing.`)\n\t\t}\n\n\t\t// use connected store\n\t\tif (this.cache[name]) {\n\t\t\treturn this.cache[name]\n\t\t}\n\n\t\tconst store = new InDBStore({\n\t\t\tdb: this,\n\t\t\tstore: currentStore,\n\t\t})\n\n\t\t// if it is a key-value store, append special methods\n\t\tif (currentStore.isKv) {\n\t\t\tObject.defineProperties(store, {\n\t\t\t\tkey: {\n\t\t\t\t\tvalue: i => store.keys().then(keys => keys && keys[i]),\n\t\t\t\t},\n\t\t\t\tgetItem: {\n\t\t\t\t\tvalue: key => store.get(key).then(obj => obj && obj.value),\n\t\t\t\t},\n\t\t\t\tsetItem: {\n\t\t\t\t\tvalue: (key, value) => store.put({ key, value }),\n\t\t\t\t},\n\t\t\t\tremoveItem: {\n\t\t\t\t\tvalue: key => store.delete(key),\n\t\t\t\t},\n\t\t\t})\n\t\t}\n\n\t\tthis.cache[name] = store\n\n\t\treturn store\n\t}\n\n\tclose() {\n\t\tthis.cache = null\n\t\tthis.stores = null\n\n\t\treturn this.connect().then((db) => {\n\t\t\tdb.close()\n\t\t})\n\t}\n\n\tstatic deleteDatabase(name) {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst request = indexedDB.deleteDatabase(name)\n\t\t\trequest.onsuccess = () => {\n\t\t\t\tresolve()\n\t\t\t}\n\t\t\trequest.onerror = (e) => {\n\t\t\t\treject(e)\n\t\t\t}\n\t\t})\n\t}\n\n\tstatic databases() {\n\t\treturn indexedDB.databases()\n\t}\n}\n\nexport default InDB\n\nclass InDBStore {\n\tconstructor(options = {}) {\n\t\tconst { store, db } = options\n\n\t\tif (typeof store !== 'object' || !store.name || typeof store.name !== 'string') {\n\t\t\tthrow new Error(`[InDBStore]: options.store should be a store config object.`)\n\t\t}\n\n\t\tif (!(db instanceof InDB)) {\n\t\t\tthrow new Error(`[InDBStore]: options.db should be an instanceof InDB.`)\n\t\t}\n\n\t\tthis.db = db\n\n\t\tthis.store = store\n\t\tthis.name = store.name\n\t\tthis.primaryKeyPath = store.isKv ? 'key' : store.primaryKeyPath\n\n\t\tthis._queue = []\n\t}\n\n\ttransaction(writable = false) {\n\t\tconst create = () => {\n\t\t\tconst name = this.name\n\t\t\tconst mode = writable ? 'readwrite' : 'readonly'\n\n\t\t\t// share the same connection\n\t\t\tconst connection = this.db.connection\n\t\t\tconst deferer = connection ? Promise.resolve(connection) : this.db.connect()\n\t\t\treturn deferer.then((db) => {\n\t\t\t\tthis.db.connection = db\n\t\t\t\tconst tx = db.transaction(name, mode)\n\t\t\t\tconst disconnect = () => {\n\t\t\t\t\tthis.db.connection = null\n\t\t\t\t\tthis._queue.shift()\n\t\t\t\t}\n\t\t\t\ttx.oncomplete = disconnect\n\t\t\t\ttx.onabort = disconnect\n\t\t\t\ttx.onerror = disconnect\n\t\t\t\treturn tx\n\t\t\t})\n\t\t}\n\n\t\tconst latest = this._queue[this._queue.length - 1]\n\t\tconst deferer = latest ? latest.then(() => create()) : create()\n\t\tthis._queue.push(deferer)\n\t\treturn deferer\n\t}\n\n\tobjectStore(writable = false) {\n\t\tconst name = this.name\n\t\treturn this.transaction(writable).then(tx => tx.objectStore(name))\n\t}\n\n\tcursor(options) {\n\t\tconst { index, range, direction, onTouch, onDone, onError, writable = false } = options\n\t\treturn this.objectStore(writable).then((objectStore) => {\n\t\t\tconst owner = index ? objectStore.index(index) : objectStore\n\t\t\tconst request = owner.openCursor(range, direction)\n\t\t\trequest.onsuccess = (e) => {\n\t\t\t\tconst cursor = e.target.result\n\t\t\t\tif (cursor) {\n\t\t\t\t\tonTouch(cursor, owner)\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tonDone(cursor, owner)\n\t\t\t\t}\n\t\t\t}\n\t\t\trequest.onerror = (e) => {\n\t\t\t\tonError(modifyError(e))\n\t\t\t}\n\t\t})\n\t}\n\n\trequest(fn, options = {}) {\n\t\tconst { writable = false } = options\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tthis.objectStore(writable).then((objectStore) => {\n\t\t\t\tconst request = fn(objectStore)\n\t\t\t\trequest.onsuccess = (e) => {\n\t\t\t\t\tconst result = e.target.result\n\t\t\t\t\tresolve(result)\n\t\t\t\t}\n\t\t\t\trequest.onerror = (e) => {\n\t\t\t\t\treject(modifyError(e))\n\t\t\t\t}\n\t\t\t})\n\t\t})\n\t}\n\n\titerate(fn, options = {}) {\n\t\tconst { index, range, writable = false, direction = 'next' } = options\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tthis.cursor({\n\t\t\t\tindex,\n\t\t\t\trange,\n\t\t\t\twritable,\n\t\t\t\tdirection,\n\t\t\t\tonTouch: (cursor, owner) => {\n\t\t\t\t\tconst next = () => cursor.continue()\n\t\t\t\t\tconst stop = () => {\n\t\t\t\t\t\t// should commit when writable is true\n\t\t\t\t\t\towner.transaction.commit()\n\t\t\t\t\t\tresolve()\n\t\t\t\t\t}\n\t\t\t\t\tfn(cursor, next, stop)\n\t\t\t\t},\n\t\t\t\tonDone: () => {\n\t\t\t\t\tresolve()\n\t\t\t\t},\n\t\t\t\tonError: (e) => {\n\t\t\t\t\treject(e)\n\t\t\t\t},\n\t\t\t})\n\t\t})\n\t}\n\n\tbatch(fns, options = {}) {\n\t\tconst { writable = true } = options\n\t\treturn this.transaction(writable).then((tx) => {\n\t\t\tconst name = this.name\n\t\t\tconst promises = []\n\t\t\tconst objectStore = tx.objectStore(name)\n\t\t\tfns.forEach((fn) => {\n\t\t\t\tconst deferer = new Promise((resolve, reject) => {\n\t\t\t\t\tconst request = fn(objectStore)\n\t\t\t\t\trequest.onsuccess = (e) => {\n\t\t\t\t\t\tconst result = e.target.result\n\t\t\t\t\t\tresolve(result)\n\t\t\t\t\t}\n\t\t\t\t\trequest.onerror = (e) => {\n\t\t\t\t\t\treject(modifyError(e))\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\tpromises.push(deferer)\n\t\t\t})\n\t\t\treturn Promise.all(promises)\n\t\t})\n\t}\n\n\t// ==========================================\n\n\t/**\n\t *\n\t * @param {string} key\n\t * @returns\n\t */\n\tget(key) {\n\t\t// single key\n\t\tif (!Array.isArray(key)) {\n\t\t\treturn this.request(objectStore => objectStore.get(key))\n\t\t}\n\n\t\t// multiple keys\n\t\tconst keys = key\n\t\tconst fns = keys.map(key => objectStore => objectStore.get(key))\n\t\treturn this.batch(fns, { writable: false })\n\t}\n\n\tkeys() {\n\t\tconst keyPath = this.primaryKeyPath\n\t\tconst results = []\n\t\treturn this.each((obj) => {\n\t\t\tconst key = parse(obj, keyPath)\n\t\t\tresults.push(key)\n\t\t}).then(() => {\n\t\t\treturn results\n\t\t})\n\t}\n\n\tall() {\n\t\tconst results = []\n\t\treturn this.each((obj) => {\n\t\t\tresults.push(obj)\n\t\t}).then(() => {\n\t\t\treturn results\n\t\t})\n\t}\n\n\tcount() {\n\t\treturn this.request(objectStore => objectStore.count())\n\t}\n\n\t// ==========================================\n\n\teach(fn) {\n\t\treturn this.iterate((cursor, next) => {\n\t\t\tconst obj = cursor.value\n\t\t\tfn(obj)\n\t\t\tnext()\n\t\t})\n\t}\n\n\treverse(fn) {\n\t\treturn this.iterate((cursor, next) => {\n\t\t\tconst obj = cursor.value\n\t\t\tfn(obj)\n\t\t\tnext()\n\t\t}, { direction: 'prev' })\n\t}\n\n\tsome(count = 10, offset = 0) {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst results = []\n\t\t\tlet i = 0\n\t\t\tlet start = offset\n\t\t\tlet end = offset + count\n\t\t\tlet direction\n\n\t\t\t// offset < 0, means begining from the latest item,\n\t\t\t// for example, offset = -1, means begining from the last item\n\t\t\tif (offset < 0) {\n\t\t\t\tdirection = 'prev'\n\t\t\t\tcount = Math.min(count, -offset)\n\t\t\t\tstart = -(offset + count) || 0\n\t\t\t\tend = start + count\n\t\t\t}\n\n\t\t\tthis.iterate((cursor, next, stop) => {\n\t\t\t\tif (i < start) {\n\t\t\t\t\ti ++\n\t\t\t\t\tnext()\n\t\t\t\t}\n\t\t\t\telse if (i < end) {\n\t\t\t\t\tresults.push(cursor.value)\n\t\t\t\t\ti ++\n\t\t\t\t\tnext()\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tstop()\n\t\t\t\t}\n\t\t\t}, { direction }).then(() => {\n\t\t\t\tif (offset < 0) {\n\t\t\t\t\tresults.reverse()\n\t\t\t\t}\n\t\t\t\tresolve(results)\n\t\t\t}).catch(reject)\n\t\t})\n\t}\n\n\tfirst() {\n\t\treturn this.some(1).then(items => items[0])\n\t}\n\n\tlast() {\n\t\treturn this.some(1, -1).then(items => items[0])\n\t}\n\n\t// =========================\n\n\t/**\n\t * find a record with given index\n\t * @param {string} key index name\n\t * @param {*} value\n\t * @returns\n\t */\n\tfind(key, value) {\n\t\treturn this.request(objectStore => objectStore.index(key).get(value))\n\t}\n\t/**\n\t * query several records with given index and compare condition\n\t * @param {string} key index name\n\t * @param {*} value\n\t * @param {string} [compare]\n\t * @returns\n\t */\n\tquery(key, value, compare) {\n\t\tconst range = (function() {\n\t\t\tswitch (compare) {\n\t\t\t\tcase '>':\n\t\t\t\t\treturn IDBKeyRange.lowerBound(value, true)\n\t\t\t\tcase '>=':\n\t\t\t\t\treturn IDBKeyRange.lowerBound(value)\n\t\t\t\tcase '<':\n\t\t\t\t\treturn IDBKeyRange.upperBound(value, true)\n\t\t\t\tcase '<=':\n\t\t\t\t\treturn IDBKeyRange.upperBound(value)\n\t\t\t\tcase '%':\n\t\t\t\tcase '!=':\n\t\t\t\tcase 'in':\n\t\t\t\t\treturn undefined\n\t\t\t\tdefault:\n\t\t\t\t\treturn IDBKeyRange.only(value)\n\t\t\t}\n\t\t}())\n\n\t\tconst results = []\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tthis.cursor({\n\t\t\t\tindex: key,\n\t\t\t\trange,\n\t\t\t\tonTouch: (cursor, owner) => {\n\t\t\t\t\tconst targetObj = cursor.value\n\t\t\t\t\tconst keyPath = owner.keyPath\n\t\t\t\t\tconst targetValue = parse(targetObj, keyPath)\n\n\t\t\t\t\tif (compare === '!=') {\n\t\t\t\t\t\tif (targetValue !== value) {\n\t\t\t\t\t\t\tresults.push(targetObj)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse if (compare === '%') {\n\t\t\t\t\t\tif (typeof targetValue == 'string' && targetValue.indexOf(value) > -1) {\n\t\t\t\t\t\t\tresults.push(targetObj)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse if (compare === 'in') {\n\t\t\t\t\t\tif (Array.isArray(value) && value.indexOf(targetValue) > -1) {\n\t\t\t\t\t\t\tresults.push(targetObj)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tresults.push(targetObj)\n\t\t\t\t\t}\n\n\t\t\t\t\tcursor.continue()\n\t\t\t\t},\n\t\t\t\tonDone: () => {\n\t\t\t\t\tresolve(results)\n\t\t\t\t},\n\t\t\t\tonError: (e) => {\n\t\t\t\t\treject(e)\n\t\t\t\t},\n\t\t\t})\n\t\t})\n\t}\n\n\t/**\n\t * query several records with conditions,\n\t * notice that, it works with iterator not with index.\n\t * @param {...object[]} rules\n\t * @param {string} rules[][].key index name or any keyPath.\n\t * @param {*} rules[][].value\n\t * @param {string=} rules[][].compare\n\t * @param {boolean=} rules[][].optional whether this condition is optional\n\t * @returns\n\t */\n\tselect(...rules) {\n\t\tconst currentStore = this.store\n\t\tconst indexes = currentStore.indexes || []\n\t\tconst indexesMapping = {}\n\t\tindexes.forEach((item) => {\n\t\t\tconst { name, keyPath } = item\n\t\t\tindexesMapping[name] = keyPath\n\t\t})\n\n\t\tconst compareAandB = function(a, b, compare) {\n\t\t\tif (a === undefined) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tswitch (compare) {\n\t\t\t\tcase '>':\n\t\t\t\t\treturn a > b\n\t\t\t\tcase '>=':\n\t\t\t\t\treturn a >= b\n\t\t\t\tcase '<':\n\t\t\t\t\treturn a < b\n\t\t\t\tcase '<=':\n\t\t\t\t\treturn a <= b\n\t\t\t\tcase '!=':\n\t\t\t\t\treturn a !== b\n\t\t\t\tcase '%':\n\t\t\t\t\treturn typeof a === 'string' && a.indexOf(b) > -1\n\t\t\t\tcase 'in':\n\t\t\t\t\treturn Array.isArray(b) && b.indexOf(a) > -1\n\t\t\t\tdefault:\n\t\t\t\t\treturn a === b\n\t\t\t}\n\t\t}\n\n\t\tconst determine = function(obj, and_conditions, or_conditions) {\n\t\t\tif (!and_conditions.length && !or_conditions.length) {\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\tfor (let i = 0, len = and_conditions.length; i < len; i ++) {\n\t\t\t\tconst { keyPath, value, compare } = and_conditions[i]\n\t\t\t\tconst current = parse(obj, keyPath)\n\t\t\t\tif (!compareAandB(current, value, compare)) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!or_conditions.length) {\n\t\t\t\treturn true\n\t\t\t}\n\n\t\t\tfor (let i = 0, len = or_conditions.length; i < len; i ++) {\n\t\t\t\tconst { keyPath, value, compare } = or_conditions[i]\n\t\t\t\tconst current = parse(obj, keyPath)\n\t\t\t\tif (compareAandB(current, value, compare)) {\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn false\n\t\t}\n\n\t\tconst groups = []\n\t\trules.forEach((conditions) => {\n\t\t\tconst or_conditions = []\n\t\t\tconst and_conditions = []\n\t\t\tfor (let i = 0, len = conditions.length; i < len; i ++) {\n\t\t\t\tconst { key, value, compare, optional } = conditions[i]\n\t\t\t\tconst keyPath = indexesMapping[key] || key // if there is not such index, use original key as keyPath\n\t\t\t\tif (optional) {\n\t\t\t\t\tor_conditions.push({ keyPath, value, compare })\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tand_conditions.push({ keyPath, value, compare })\n\t\t\t\t}\n\t\t\t}\n\t\t\tgroups.push([and_conditions, or_conditions])\n\t\t})\n\n\t\tconst isOk = (obj) => {\n\t\t\tfor (let i = 0, len = groups.length; i < len; i ++) {\n\t\t\t\tconst [and_conditions, or_conditions] = groups[i]\n\t\t\t\tconst res = determine(obj, and_conditions, or_conditions)\n\t\t\t\tif (res) {\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false\n\t\t}\n\n\t\tconst results = []\n\t\treturn this.each((obj) => {\n\t\t\tif (isOk(obj)) {\n\t\t\t\tresults.push(obj)\n\t\t\t}\n\t\t}).then(() => {\n\t\t\treturn results\n\t\t})\n\t}\n\n\t// =====================================\n\n\t/**\n\t * add a record into store\n\t * @param {*} obj\n\t * @param {string} [key]\n\t * @returns\n\t */\n\tadd(obj, key) {\n\t\tif (Array.isArray(obj)) {\n\t\t\tconst objs = obj\n\t\t\tif (objs.length < 2) {\n\t\t\t\treturn this.add(obj[0], key)\n\t\t\t}\n\n\t\t\tconst fns = objs.map(obj => objectStore => objectStore.add(obj, key))\n\t\t\treturn this.batch(fns)\n\t\t}\n\n\t\tif (!obj) {\n\t\t\treturn Promise.resolve()\n\t\t}\n\n\t\treturn this.request(objectStore => objectStore.add(obj, key), { writable: true })\n\t}\n\n\t/**\n\t *\n\t * @param {*} obj\n\t * @param {string} [key] if not pass, primaryKey will read from obj\n\t * @returns\n\t */\n\tput(obj, key) {\n\t\tif (Array.isArray(obj)) {\n\t\t\tconst objs = obj\n\t\t\tif (objs.length < 2) {\n\t\t\t\treturn this.put(objs[0], key)\n\t\t\t}\n\n\t\t\tconst fns = objs.map(obj => objectStore => objectStore.put(obj, key))\n\t\t\treturn this.batch(fns)\n\t\t}\n\n\t\tif (!obj) {\n\t\t\treturn Promise.resolve()\n\t\t}\n\n\t\treturn this.request(objectStore => objectStore.put(obj, key), { writable: true })\n\t}\n\n\tdelete(key) {\n\t\tif (Array.isArray(key)) {\n\t\t\tconst keys = key\n\t\t\tif (keys.length < 2) {\n\t\t\t\treturn this.delete(keys[0])\n\t\t\t}\n\n\t\t\tconst fns = keys.map(key => objectStore => objectStore.delete(key))\n\t\t\treturn this.batch(fns)\n\t\t}\n\n\t\tif (!key) {\n\t\t\treturn Promise.resolve()\n\t\t}\n\n\t\treturn this.request(objectStore => objectStore.delete(key), { writable: true })\n\t}\n\n\tremove(obj) {\n\t\tconst keyPath = this.primaryKeyPath\n\n\t\tif (Array.isArray(obj)) {\n\t\t\tconst objs = obj\n\t\t\tif (objs.length < 2) {\n\t\t\t\treturn this.remove(objs[0])\n\t\t\t}\n\n\t\t\tconst fns = objs.map(obj => {\n\t\t\t\tconst key = parse(obj, keyPath)\n\t\t\t\treturn objectStore => objectStore.delete(key)\n\t\t\t})\n\t\t\treturn this.batch(fns)\n\t\t}\n\n\t\tif (!obj) {\n\t\t\treturn Promise.resolve()\n\t\t}\n\n\t\tconst key = parse(obj, keyPath)\n\t\tif (!key) {\n\t\t\treturn Promise.resolve()\n\t\t}\n\n\t\treturn this.delete(key)\n\t}\n\n\tclear() {\n\t\treturn this.request(objectStore => objectStore.clear(), { writable: true })\n\t}\n}\n\nfunction makeKeyChain(path) {\n\tlet chain = path.toString().split(/\\.|\\[|\\]/).filter(item => !!item)\n\treturn chain\n}\n\nfunction parse(obj, path) {\n\tif (typeof path === 'undefined' || path === null) {\n\t return;\n\t}\n\n\tif (Array.isArray(path)) {\n\t for (let i = 0, len = path.length; i < len; i ++) {\n\t\tconst item = path[i]\n\t\tconst res = parse(obj, item)\n\t\tif (res !== undefined) {\n\t\t return res\n\t\t}\n\t }\n\t return\n\t}\n\n\tlet chain = makeKeyChain(path)\n\n\tif (!chain.length) {\n\t return obj\n\t}\n\n\tlet target = obj\n\tfor (let i = 0, len = chain.length; i < len; i ++) {\n\t let key = chain[i]\n\t if (target[key] === undefined) {\n\t\treturn\n\t }\n\t target = target[key]\n\t}\n\treturn target\n}\n\nfunction modifyError(e) {\n\tconst { message } = e\n\te.message = message.indexOf('[IndexedDB]') === -1 ? '[IndexedDB]: ' + message : message\n\treturn e\n}\n","import { AsyncQueue } from 'anys-shared';\nimport { InDB } from 'indb/es/index.js';\n\nexport class AnysStoreOfflinePlugin {\n constructor(anys) {\n this.anys = anys;\n this.queue = new AsyncQueue();\n }\n\n options() {\n return {\n namespace: new Error('options.namespace is required!'),\n /**\n * offline log will close autoReport as default,\n * developers should must invoke anys.send to send logs to server side during\n * which should use this.[offlineLogger].select to pick logs,\n * and this.[offlineLogger].remove to clear logs\n */\n autoReport: false,\n /**\n * a offline log will be delete after how long time,\n * default 2 day (48 hours)\n */\n expireTime: 3600000 * 48,\n };\n }\n\n init() {\n const storeName = 'logs';\n const idb = new InDB({\n name: this.anys.options.namespace,\n version: 2,\n stores: [\n {\n name: storeName,\n primaryKeyPath: '_id',\n autoIncrement: true,\n },\n ],\n });\n this.db = idb.use(storeName);\n }\n\n ready() {\n /**\n * clear logs which should be delete from db\n */\n const { expireTime } = this.anys.options;\n if (expireTime) {\n let offset = 0;\n const timer = setInterval(() => {\n this.queue\n .push(() => this.db.some(100, offset))\n .then((logs) => {\n if (!logs.length) {\n // @ts-ignore\n clearInterval(timer);\n return;\n }\n const curr = Date.now();\n const ids = [];\n logs.forEach((log) => {\n const { _id, time } = log;\n if (curr - time > expireTime) {\n ids.push(_id);\n }\n });\n if (ids.length) {\n this.queue.push(() => this.db.delete(ids));\n }\n offset += 100;\n offset -= ids.length;\n });\n }, 10000);\n }\n }\n\n write(data) {\n this.queue\n .push(() => this.db.add(data))\n .then((id) => {\n this.anys.emit('writeOfflineLog', { id, data });\n });\n }\n\n /**\n * select records from db\n * anys.report([\n * { key: 'time', value: Date.now() - 3600000, compare: '>' },\n * { key: 'trace', value: 'xxx' },\n * ]);\n * https://github.com/tangshuang/indb#select\n * @param {Array} message\n * @returns\n */\n read(message) {\n if (!message) {\n message = [\n { key: 'client', value: this.anys.clientId },\n { key: 'trace', value: this.anys.traceId },\n ];\n }\n else if (!Array.isArray(message)) {\n return;\n }\n else if (message.some(item => !item.key)) {\n return;\n }\n return this.select(message);\n }\n\n clear(logs) {\n return this.queue.push(() => this.db.remove(logs)).catch(() => {});\n }\n\n /**\n * select records from db\n * https://github.com/tangshuang/indb#select\n * @param {Array} conditions\n * @returns\n */\n select(conditions) {\n return this.queue.push(() => this.db.select(conditions));\n }\n\n /**\n * delete records from db\n * @param {number|Array<number>} ids\n * @returns\n */\n remove(ids) {\n return this.queue.push(() => this.db.delete(ids)).catch(() => {});\n }\n}\n","import { AnysPlugin, getPath } from 'anys-shared';\nimport { createRandomString } from 'ts-fns';\n\nexport class AnysMonitorDOMMutationPlugin extends AnysPlugin {\n init() {\n this.currentSnapshotId = '';\n this.currentMutationId = '';\n this.currentMutationNo = 0;\n }\n\n options() {\n return {\n mutation: true,\n };\n }\n\n registerMutation() {\n const observer = this.createObserver((logs) => {\n const mutationId = createRandomString(8);\n const number = this.currentMutationNo + 1;\n const log = {\n type: 'mutation',\n time: Date.now(),\n detail: logs,\n ssid: this.currentSnapshotId,\n ssno: number,\n curr: mutationId,\n prev: this.currentMutationId,\n };\n this.anys.write(log);\n this.currentMutationId = mutationId;\n this.currentMutationNo = number;\n });\n\n // record after loaded\n window.addEventListener('load', () => {\n observer.observe(document, {\n characterData: true,\n attributes: true,\n childList: true,\n subtree: true,\n });\n this.recordSnapshot();\n buildPath(document.documentElement);\n });\n\n const autoRecordWhenRefreshTrace = () => {\n this.recordSnapshot();\n };\n this.anys.on('refreshTraceId', autoRecordWhenRefreshTrace);\n\n return () => {\n observer.disconnect();\n this.anys.off('refreshTraceId', autoRecordWhenRefreshTrace);\n };\n }\n\n recordSnapshot() {\n const snapshot = createSnapshot();\n const snapshotId = createRandomString(8);\n\n const url = window.location.href;\n const a = new URL(url);\n const path = a.pathname.replace(/^([^/])/, '/$1');\n\n this.anys.write({\n type: 'snapshot',\n time: Date.now(),\n url: {\n uri: path + (a.search ? `?${a.search}` : ''),\n path,\n protocol: a.protocol.replace(':', ''),\n host: a.hostname,\n port: a.port,\n search: a.search,\n hash: a.hash.replace('#', ''),\n },\n detail: snapshot,\n ssid: snapshotId,\n });\n this.currentSnapshotId = snapshotId;\n this.currentMutationNo = 0;\n }\n\n createObserver(callback) {\n const isInIgnore = (node) => {\n if (node.hasAttribute?.('data-ignore')) {\n return true;\n }\n\n let parent = node.parentNode;\n while (parent) {\n if (parent.hasAttribute?.('data-ignore')) {\n return true;\n }\n parent = parent.parentNode;\n }\n\n return false;\n };\n\n const observer = new MutationObserver((inputs) => {\n /**\n * @type any[]\n */\n const mutations = [];\n const changes = [...inputs].reverse();\n changes.forEach((item) => {\n const { type, target, attributeName, oldValue } = item;\n\n // ignore nodes which are special\n if (isInIgnore(target)) {\n return;\n }\n\n if (type === 'attributes') {\n // @ts-ignore\n const next = target.getAttribute(attributeName);\n if (next === oldValue) {\n return;\n }\n if (mutations.find(item => item.type === type && item.target === target && item.attributeName === attributeName)) {\n return;\n }\n }\n else if (type === 'characterData') {\n // @ts-ignore\n const next = target.data;\n if (next === oldValue) {\n return;\n }\n if (mutations.find(item => item.type === type && item.target === target && item.target.data === next)) {\n return;\n }\n }\n\n mutations.push(item);\n });\n mutations.reverse();\n\n /**\n * records as logs\n */\n\n const logs = [];\n mutations.forEach((mutation) => {\n const { type, target, attributeName, oldValue } = mutation;\n const targetPath = target.path || getPath(target);\n const getRelativePath = (someNode) => {\n const somePath = getPath(someNode);\n return somePath.replace(targetPath + '/', '');\n };\n\n if (type === 'attributes') {\n const next = target.getAttribute(attributeName);\n const prev = oldValue;\n logs.push({\n type: 'attribute',\n target: targetPath,\n name: attributeName,\n next,\n prev,\n });\n }\n else if (type === 'characterData') {\n const next = target.data;\n const prev = oldValue;\n logs.push({\n type: 'text',\n target: targetPath,\n next,\n prev,\n });\n }\n else if (type === 'childList') {\n // ignore textarea inside changes\n if (target.nodeName === 'TEXTAREA') {\n return;\n }\n\n const { removedNodes, addedNodes, previousSibling, nextSibling } = mutation;\n\n const movedNodes = [];\n const remove = Array.from(removedNodes)\n .map((node) => {\n // move node\n if (document.body.contains(node)) {\n movedNodes.push({\n node,\n path: getPath(node),\n });\n return;\n }\n\n // when a node is removed after inserted immediately,\n // it will be treated as moved as previous\n\n // path relative to target\n const nodePath = node.path ? getRelativePath(node) : null;\n const before = previousSibling ? getPath(previousSibling) : null;\n const after = nextSibling ? getPath(nextSibling) : null;\n const patch = {};\n if (nodePath) {\n patch.node = nodePath;\n }\n else {\n patch.before = before;\n patch.after = after;\n }\n return patch;\n })\n .filter(Boolean);\n const move = [];\n const insert = Array.from(addedNodes)\n .map((node) => {\n // we SHOULD MUST read nextSibling's path sibling we invoke buildPath\n const sibling = node.nextSibling ? getRelativePath(node.nextSibling) : null;\n\n // move node\n // when a node is inserted and moved immediately, it will go through\n // insert -> remove -> insert\n // we treat it as\n // insert -> move\n // when remove, we create movedNode.path, so here we get it as expected\n // if a node is removed after inserted immediately but not inserted, we drop it\n const movedNode = movedNodes.find(item => item.node === node);\n if (movedNode) {\n move.push({\n node: movedNode.path,\n sibling,\n });\n return;\n }\n\n const isText = node.nodeName === '#text';\n const isComment = node.nodeName === '#comment';\n\n const text = isText ? node.data : null;\n const comment = isComment ? node.data : null;\n const html = isText || isComment ? null : clearHtml(node.outerHTML);\n\n return {\n text,\n html,\n comment,\n sibling,\n };\n })\n .filter(Boolean);\n\n logs.push({\n type: 'children',\n target: targetPath,\n remove,\n insert,\n move,\n });\n\n // rebuild node and its children's path\n buildPath(target);\n }\n });\n\n // record mutation logs\n callback(logs);\n });\n\n // build all nodes' path\n buildPath(document);\n\n return observer;\n }\n}\n\nfunction buildPath(node) {\n if (node !== document) {\n const path = getPath(node);\n node.path = path;\n }\n\n const children = node.childNodes;\n Array.from(children).forEach((el) => {\n buildPath(el);\n });\n}\n\nfunction clearHtml(html) {\n return html\n // noscript\n .replace(/<script([^]*?)>([^]*?)<\\/script>/gm, '<noscript$1></noscript>')\n .replace(/<noscript([^]*?)>([^]*?)<\\/noscript>/gm, '<noscript$1></noscript>')\n // // remove script\n // .replace(/<script([^]*?)>([^]*?)<\\/script>/gm, '')\n // remove preload script\n .replace(/<link([^]*?)as=\"script\"([^]*?)>/g, '<link$1$2>')\n .replace(/\\n\\n*\\s*\\n*\\n/gm, '\\n');\n}\n\nfunction createFormSnapshot() {\n const forms = document.querySelectorAll('input, textarea, select');\n const data = [];\n Array.from(forms).forEach((el) => {\n const target = getPath(el);\n // @ts-ignore\n const value = el.type === 'password' ? '***' : el.value;\n data.push({ el: target, value });\n });\n return data;\n}\n\nexport function createSnapshot() {\n const { name, publicId, systemId } = document.doctype;\n const doctype = { name, publicId, systemId };\n\n const content = document.documentElement.innerHTML;\n const html = clearHtml(content);\n\n const attrs = {};\n const el = document.querySelector('html');\n for (let { name, value } of el.attributes) {\n attrs[name] = value;\n }\n\n const values = createFormSnapshot();\n\n return { doctype, attrs, html, values };\n}\n","import { AnysPlugin } from 'anys-shared';\n\nexport class AnysMonitorWindowSizePlugin extends AnysPlugin {\n options() {\n return {\n size: true,\n };\n }\n\n createRecordLog() {\n const { innerWidth: width, innerHeight: height } = window;\n const log = {\n type: 'window_size',\n time: Date.now(),\n detail: { width, height },\n };\n return log;\n }\n\n registerSize() {\n let request;\n\n const listen = () => {\n clearTimeout(request);\n\n const log = this.createRecordLog();\n request = setTimeout(() => {\n this.anys.write(log);\n }, 100);\n };\n\n // 一启动就记录一次\n this.recordSize();\n\n window.addEventListener('resize', listen);\n\n return () => {\n window.removeEventListener('resize', listen);\n };\n }\n\n recordSize() {\n const log = this.createRecordLog();\n this.anys.write(log);\n }\n}\n","import { AnysPlugin, getPath } from 'anys-shared';\n\nexport class AnysMonitorScrollEventPlugin extends AnysPlugin {\n options() {\n return {\n scroll: true,\n };\n }\n\n registerScroll() {\n let ticking = 0;\n\n const listen = (e) => {\n if (ticking) {\n return;\n }\n\n const { target, bubbles } = e;\n let log;\n if (bubbles) {\n const { scrollX, scrollY } = window;\n log = {\n type: 'window_scroll',\n time: Date.now(),\n detail: { scrollX, scrollY },\n };\n }\n else {\n const { scrollLeft, scrollTop } = target;\n log = {\n type: 'scroll',\n time: Date.now(),\n target: getPath(target),\n detail: { scrollLeft, scrollTop },\n };\n }\n\n requestAnimationFrame(() => {\n this.anys.write(log);\n ticking = 0;\n });\n\n ticking = 1;\n };\n\n window.addEventListener('scroll', listen, true);\n\n return () => {\n window.removeEventListener('scroll', listen);\n };\n }\n}\n","import { AnysPlugin, ajaxPost, replaceUrlSearch } from 'anys-shared';\nimport { AnysIdentifyPlugin } from 'anys-web-plugin-identify';\nimport { AnysMonitorInputEventPlugin } from 'anys-web-plugin-monitor-input-event';\nimport { AnysMonitorMouseEventPlugin } from 'anys-web-plugin-monitor-mouse-event';\nimport { AnysMonitorWindowActivityPlugin } from 'anys-web-plugin-monitor-window-activity';\nimport { AnysMonitorUrlPlugin } from 'anys-web-plugin-monitor-url';\nimport { AnysMonitorTouchEventPlugin } from 'anys-web-plugin-monitor-touch-event';\nimport { AnysStoreOfflinePlugin } from 'anys-web-plugin-store-offline';\nimport { AnysMonitorDOMMutationPlugin } from 'anys-web-plugin-monitor-dom-mutation';\nimport { AnysMonitorWindowSizePlugin } from 'anys-web-plugin-monitor-window-size';\nimport { AnysMonitorScrollEventPlugin } from 'anys-web-plugin-monitor-scroll-event';\n\nexport class AnysOfflineTracerPlugin extends AnysPlugin {\n static dependencies = [\n AnysStoreOfflinePlugin,\n AnysMonitorUrlPlugin,\n AnysMonitorWindowSizePlugin,\n AnysMonitorDOMMutationPlugin,\n AnysIdentifyPlugin,\n AnysMonitorInputEventPlugin,\n AnysMonitorMouseEventPlugin,\n AnysMonitorWindowActivityPlugin,\n AnysMonitorTouchEventPlugin,\n AnysMonitorScrollEventPlugin,\n ];\n\n constructor(anys, [offlineStore, urlMonitor, windowSizeMonitor, DOMMutationMonitor]) {\n super(anys);\n this.offlineStore = offlineStore;\n this.urlMonitor = urlMonitor;\n this.windowSizeMonitor = windowSizeMonitor;\n this.DOMMutationMonitor = DOMMutationMonitor;\n // cache for trace logs to be send by beacon\n this.cache = {};\n }\n\n options() {\n const isSupportTouch = 'ontouchend' in document;\n return {\n touch: isSupportTouch,\n mouse: !isSupportTouch,\n click: false,\n mousedown: true,\n mousemove: true,\n mouseup: true,\n autoReport: false,\n reportUrl: new Error('options.reportUrl is required!'),\n reportInterval: 10000,\n reportParams: null,\n };\n }\n\n registerAutoReport() {\n const { clientId } = this.anys;\n const autoReportWhenRefreshTraceId = ({ prev }) => {\n // report previous trace logs\n this.anys.report([\n { key: 'client', value: clientId },\n { key: 'trace', value: prev },\n ]);\n\n // clear cache\n this.cache = {};\n\n // record new information\n this.urlMonitor.recordUrl();\n this.windowSizeMonitor.recordSize();\n this.DOMMutationMonitor.recordSnapshot();\n };\n this.anys.on('refreshTraceId', autoReportWhenRefreshTraceId);\n\n const timer = setInterval(() => {\n this.anys.report();\n }, this.anys.options.reportInterval);\n\n let isUnloaded = 0;\n const sendBeaconWhenBeforeUnload = () => {\n if (isUnloaded) {\n return;\n }\n isUnloaded = 1;\n\n const ids = Object.keys(this.cache);\n const logs = { data: Object.values(this.cache), by: 'beacon' };\n if (ids.length) {\n this.offlineStore.remove(ids); // async may not executed\n navigator.sendBeacon(this.anys.options.reportUrl, JSON.stringify(logs));\n this.cache = {};\n }\n };\n window.addEventListener('beforeunload', sendBeaconWhenBeforeUnload);\n window.addEventListener('pagehide', sendBeaconWhenBeforeUnload); // 兼容微信浏览器\n window.addEventListener('unload', sendBeaconWhenBeforeUnload);\n\n const addCacheWhenWriteLog = ({ id, data }) => {\n this.cache[id] = data;\n };\n this.anys.on('writeOfflineLog', addCacheWhenWriteLog);\n\n return () => {\n this.anys.off('refreshTraceId', autoReportWhenRefreshTraceId);\n this.anys.off('writeOfflineLog', addCacheWhenWriteLog);\n // @ts-ignore\n clearInterval(timer);\n window.removeEventListener('beforeunload', sendBeaconWhenBeforeUnload);\n };\n }\n\n /**\n * define read here, so that recorder will not send other plugins 'read' output\n * @param {*} message\n * @returns\n */\n read(message) {\n return this.offlineStore.read(message);\n }\n\n arrange(logs) {\n const groups = [];\n let i = 0;\n\n logs.forEach((item) => {\n groups[i] = groups[i] || [];\n groups[i].push(item);\n if (groups[i].length > 200) {\n i ++;\n }\n });\n\n return groups;\n }\n\n send(data) {\n const items = [];\n const ids = [];\n\n data.forEach((item) => {\n const { _id, ...info } = item;\n ids.push(_id);\n items.push(info);\n });\n\n if (!items.length) {\n return;\n }\n\n const { reportUrl, reportParams } = this.anys.options;\n const url = reportParams ? replaceUrlSearch(reportUrl, reportParams) : reportUrl;\n return ajaxPost(url, { data: items }).then(() => {\n ids.forEach((id) => {\n delete this.cache[id];\n });\n });\n }\n\n clear() {\n this.cache = {};\n }\n}\n","export function replaceUrlSearch(url, params) {\n const encode = (value) => encodeURIComponent(value);\n\n const index = url.indexOf('?');\n if (index < 0) {\n const search = Object.keys(params)\n .map((key) => `${key}=${encode(params[key])}`)\n .join('&');\n const [path, hash] = url.split('#');\n return path + '?' + search + (hash ? '#' + hash : '');\n }\n\n const [path, right] = url.split('?');\n const [search, hash] = right.split('#');\n\n const origin = search.split('&')\n .map((item) => item.split('='))\n .map((kv) => {\n const [key, ...values] = kv;\n const value = values.join('=');\n return [key, value];\n })\n .reduce((map, [key, value]) => ({ ...map, [key]: value }), {});\n Object.assign(origin, params);\n\n const newSearch = Object.keys(origin).map((key) => `${key}=${encode(origin[key])}`).join('&');\n return path + '?' + newSearch + (hash ? '#' + hash : '');\n}\n","export function ajaxPost(url, data) {\n return new Promise((resolve, reject) => {\n // @ts-ignore\n const XHR = window.__XMLHttpRequest || window.XMLHttpRequest;\n\n const http = new XHR();\n http.open('POST', url, true);\n http.onreadystatechange = function() {\n if(http.readyState == 4) {\n if (http.status == 200) {\n resolve(http.responseText);\n }\n else {\n reject(new Error(`ajax post fail with status ${http.status}`));\n }\n }\n };\n http.onerror = reject;\n http.send(JSON.stringify(data));\n });\n}\n","import { Anys } from 'anys';\nimport { AnysOfflineTracerPlugin } from './offline-tracer-plugin.js';\n\nclass Tracer extends Anys {\n /**\n * patch auth info into reportParams\n * @param {object} info\n */\n auth(info) {\n this.options.reportParams = Object.assign(this.options.reportParams || {}, info);\n }\n}\n\nexport const createTracer = (options = {}) => new Tracer({\n namespace: 'AnysTracer',\n ...options,\n plugins: {\n ...(options.plugins || {}),\n tracer: AnysOfflineTracerPlugin,\n },\n});\n"],"names":["__webpack_require__","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","isArray","Array","isFunction","isStrict","f","strict","entire","fnBody","slice","indexOf","lastIndexOf","trim","isNativeClass","isNativeSTD","level4","topCtx","replace","isBabelTransformedClass","test","isBabelRuntimeTransformedClass","isBabelTransformedMinifiedClass","level3","protos","getOwnPropertyDescriptors","hasProtos","keys","filter","item","length","level2","hasThisInside","level1","isConstructor","createRandomString","len","arguments","undefined","CHARS","text","i","charAt","Math","floor","random","each","fn","descriptor","descriptors","forEach","set","configurable","writable","Anys","options","_this","this","_events","_queue","ins","Constructor","getPrototypeOf","constructor","_Anys$defaultOptions","_objectSpread","defaultOptions","_Anys$defaultOptions$","filters","defaultFilters","_Anys$defaultOptions$2","plugins","defaultPluings","_objectWithoutProperties","_excluded","_ref","_ref$filters","givenFilters","_ref$plugins","givenPluings","_ref$defines","defines","givenDefines","givenOptions","_excluded2","pluginOptions","pluginFilters","pluginDefines","isGivenPluginsMapping","_typeof","givenPluingList","objectValues","givenPluginMapping","map","pluginsDraft","concat","_toConsumableArray","mergePluginDeps","pluginList","Plugin","depPlugins","dependencies","dep","unshift","pluginSet","_givenPluginMapping$f","name","msg","localName","find","console","debug","error","deps","P","plugin","objectAssign","push","apply","_pluginList","requiredOption","Error","definitions","clientId","client","traceId","trace","requestId","basicLog","defineProperties","result","define","request","_basicLog","invoke","_inited","autoStart","start","_proto","on","event","callback","off","_this2","splice","emit","_len","args","_key","type","defers","_len2","_key2","res","Promise","all","then","refreshTraceId","prevTraceId","prev","next","refreshRequestId","prevRequestId","write","log","data","report","message","resolve","reject","_this3","defer","ro","re","signal","read","operators","logs","readDefers","operator","ret","arrange","arrageDefers","chunks","send","sendDefers","chunk","clear","clearDefers","_reporting","run","shift","discreteOperators","intensiveOperators","flag","bind","fns","_ref2","err","onError","onSuccess","onComplete","arg","catch","e","pipe","stop","obj1","obj2","AnysPlugin","anys","$effects","stch","methodName","toUpperCase","revoke","affect","AnysIdentifyPlugin","namespace","localStorage","getItem","setItem","sessionStorage","getPath","node","root","document","documentElement","nodeName","nodePath","path","current","parent","parentNode","findIndex","childNodes","index","toLowerCase","reverse","join","AnysMonitorInputEventPlugin","_AnysPlugin","_inherits","input","registerInput","extract","target","inputType","tagName","getAttribute","elInput","detailData","time","Date","now","el","detail","listenInput","listenChange","listenPaste","_ref3","addEventListener","removeEventListener","AnysMonitorMouseEventPlugin","mouse","click","mousemove","mousedown","mouseup","wheel","contextmenu","throttle","listener","createThrottleListener","_window","window","innerWidth","innerHeight","button","pageX","pageY","w","h","x","y","registerClick","registerMouseup","registerMousedown","registerContextmenu","registerMousemove","registerWheel","deltaX","deltaY","deltaZ","deltaMode","mode","createLog","ticking","requestAnimationFrame","enterLog","AnysMonitorWindowActivityPlugin","activity","deadTimeout","ready","registerActivity","onvisibilitychange","visibilityState","onunload","registerDeadTimeout","timer","clearTimeout","setTimeout","AnysMonitorUrlPlugin","url","registerUrl","recordUrl","location","href","a","URL","pathname","uri","search","protocol","host","hostname","port","hash","AnysMonitorTouchEventPlugin","isSupportTouch","touch","touchstart","touchend","touchmove","identifier","force","width","height","registerTouchmove","registerTouchend","registerTouchstart","AsyncQueue","queue","status","runner","rs","rj","_this$queue$shift","finally","InDB","_options$version","version","stores","asStorage","isKv","cache","connection","indexedDB","open","onupgradeneeded","db","existStoreNames","from","objectStoreNames","passStoreNames","objectStore","transaction","keyPath","primaryKeyPath","autoIncrement","createObjectStore","indexNames","deleteIndex","indexes","createIndex","unique","multiEntry","deleteObjectStore","onblocked","modifyError","use","connect","onerror","onsuccess","currentStore","store","InDBStore","put","removeItem","delete","close","deleteDatabase","databases","_createClass","_proto2","create","tx","disconnect","oncomplete","onabort","latest","deferer","cursor","range","direction","onTouch","onDone","_options$writable","owner","openCursor","_options$writable2","iterate","_this4","_options$writable3","_options$direction","continue","commit","batch","_this5","_options$writable4","promises","results","parse","count","some","_this6","offset","end","min","first","items","last","query","compare","_this7","IDBKeyRange","lowerBound","upperBound","only","targetObj","targetValue","select","indexesMapping","compareAandB","b","determine","and_conditions","or_conditions","_and_conditions$i","_or_conditions$_i","groups","rules","conditions","_conditions$i","optional","_groups$i","_slicedToArray","isOk","add","objs","remove","chain","toString","split","makeKeyChain","AnysStoreOfflinePlugin","autoReport","expireTime","init","storeName","idb","setInterval","curr","ids","_id","clearInterval","id","AnysMonitorDOMMutationPlugin","currentSnapshotId","currentMutationId","currentMutationNo","mutation","registerMutation","observer","createObserver","mutationId","number","ssid","ssno","observe","characterData","attributes","childList","subtree","recordSnapshot","buildPath","autoRecordWhenRefreshTrace","snapshot","_step","_document$doctype","doctype","publicId","systemId","html","clearHtml","innerHTML","attrs","_iterator","_createForOfIteratorHelper","querySelector","s","n","done","_step$value","values","forms","querySelectorAll","createSnapshot","snapshotId","MutationObserver","inputs","mutations","attributeName","oldValue","_node$hasAttribute","hasAttribute","_parent$hasAttribute","_parent","isInIgnore","targetPath","getRelativePath","someNode","removedNodes","addedNodes","previousSibling","nextSibling","movedNodes","body","contains","before","after","patch","Boolean","move","insert","sibling","movedNode","isText","isComment","comment","outerHTML","children","AnysMonitorWindowSizePlugin","size","createRecordLog","registerSize","listen","recordSize","AnysMonitorScrollEventPlugin","scroll","registerScroll","bubbles","scrollX","scrollY","scrollLeft","scrollTop","AnysOfflineTracerPlugin","offlineStore","urlMonitor","windowSizeMonitor","DOMMutationMonitor","reportUrl","reportInterval","reportParams","registerAutoReport","autoReportWhenRefreshTraceId","isUnloaded","sendBeaconWhenBeforeUnload","by","navigator","sendBeacon","JSON","stringify","addCacheWhenWriteLog","_ref4","info","_this$anys$options","params","encode","encodeURIComponent","_url$split2","_url$split4","_right$split2","origin","kv","_kv","_toArray","reduce","_defineProperty","assign","replaceUrlSearch","http","__XMLHttpRequest","XMLHttpRequest","onreadystatechange","readyState","responseText","ajaxPost","Tracer","_Anys","auth","createTracer","tracer"],"sourceRoot":""}
1
+ {"version":3,"file":"index.js","mappings":"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","sources":["webpack://anys/webpack/bootstrap","webpack://anys/webpack/runtime/define property getters","webpack://anys/webpack/runtime/hasOwnProperty shorthand","webpack://anys/webpack/runtime/make namespace object","webpack://anys/../../node_modules/ts-fns/es/is.js","webpack://anys/../../node_modules/ts-fns/es/string.js","webpack://anys/../../node_modules/ts-fns/es/object.js","webpack://anys/../anys/src/index.js","webpack://anys/../../node_modules/ts-fns/es/class.js","webpack://anys/../@shared/src/plugin.js","webpack://anys/../anys-web-plugin-identify/src/index.js","webpack://anys/../@shared/src/dom-path.js","webpack://anys/../anys-web-plugin-monitor-input-event/src/index.js","webpack://anys/../anys-web-plugin-monitor-mouse-event/src/index.js","webpack://anys/../anys-web-plugin-monitor-window-activity/src/index.js","webpack://anys/../anys-web-plugin-monitor-url/src/index.js","webpack://anys/../anys-web-plugin-monitor-touch-event/src/index.js","webpack://anys/../@shared/src/async-queue.js","webpack://anys/../anys-web-plugin-store-offline/node_modules/indb/es/index.js","webpack://anys/../anys-web-plugin-store-offline/src/index.js","webpack://anys/../anys-web-plugin-monitor-dom-mutation/src/index.js","webpack://anys/../anys-web-plugin-monitor-window-size/src/index.js","webpack://anys/../anys-web-plugin-monitor-scroll-event/src/index.js","webpack://anys/./src/offline-tracer-plugin.js","webpack://anys/../@shared/src/url.js","webpack://anys/../@shared/src/ajax.js","webpack://anys/./src/index.js"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import { unionArray } from './array.js'\n\n/**\n * @param {any} value\n * @returns {boolean}\n */\nexport function isUndefined(value) {\n return typeof value === 'undefined'\n}\n\n/**\n * @param {any} value\n * @returns {boolean}\n */\nexport function isNull(value) {\n return value === null\n}\n\n/**\n * @param {any} value\n * @returns {boolean}\n */\nexport function isNullish(value) {\n return isUndefined(value) || isNull(value)\n}\n\n/**\n * @param {any} value\n * @returns {boolean}\n */\nexport function isNone(value) {\n return isNullish(value) || isNaN(value)\n}\n\n/**\n * @param {any} value\n * @returns {boolean}\n */\nexport function isArray(value) {\n return Array.isArray(value)\n}\n\n/**\n * @param {any} value\n * @returns {boolean}\n */\nexport function isObject(value) {\n return value && typeof value === 'object' && value.constructor === Object\n}\n\n/**\n * @param {any} value\n * @returns {boolean}\n */\nexport function isDate(value) {\n return isInstanceOf(value, Date)\n}\n\n/**\n * @param {any} value\n * @returns {boolean}\n */\nexport function isString(value) {\n return typeof value === 'string'\n}\n\n/**\n * @param {any} value\n * @returns {boolean}\n */\nexport function isNumber(value) {\n return typeof value === 'number' && !isNaN(value)\n}\n\n/**\n * @param {any} value\n * @returns {boolean}\n */\nexport function isNaN(value) {\n return typeof value === 'number' && Number.isNaN(value)\n}\n\n/**\n * @param {any} value\n * @returns {boolean}\n */\nexport function isSymbol(value) {\n return typeof value === 'symbol'\n}\n\n/**\n * @param {any} value\n * @returns {boolean}\n */\nexport function isFinite(value) {\n return typeof value === 'number' && Number.isFinite(value)\n}\n\n/**\n * @param {any} value\n * @returns {boolean}\n */\nexport function isInfinite(value) {\n return typeof value === 'number' && !Number.isNaN(value) && !Number.isFinite(value)\n}\n\n/**\n * @param {any} value\n * @returns {boolean}\n */\nexport function isBoolean(value) {\n return value === true || value === false\n}\n\n/**\n * @param {any} value\n * @returns {boolean}\n */\nexport function isNumeric(value) {\n return isString(value) && /^\\-{0,1}[0-9]+\\.{0,1}([0-9]+){0,1}$/.test(value)\n}\n\n/**\n * @param {any} value\n * @returns {boolean}\n */\nexport function isBlob(value) {\n return isInstanceOf(value, Blob)\n || (\n value\n && typeof value.size === 'number'\n && typeof value.type === 'string'\n )\n}\n\n/**\n * @param {any} value\n * @returns {boolean}\n */\nexport function isFile(value) {\n return isInstanceOf(value, File)\n || (\n isBlob(value)\n && (typeof value.lastModifiedDate === 'object' || typeof value.lastModified === 'number')\n && typeof value.name === 'string'\n )\n}\n\n/**\n * @param {any} value\n * @returns {boolean}\n */\nexport function isFormData(value) {\n return isInstanceOf(value, FormData)\n}\n\n/**\n * @param {any} value\n * @returns {boolean}\n */\nexport function isEmpty(value) {\n if (isNone(value) || value === '' || isNaN(value)) {\n return true\n }\n else if (isArray(value)) {\n return value.length === 0\n }\n else if (isObject(value)) {\n return Object.getOwnPropertyNames(value).length === 0\n }\n else {\n return false\n }\n}\n\n/**\n * @param {any} value\n * @param {boolean} [isStrict] where Constructor is to return false\n * @returns {boolean}\n */\nexport function isFunction(value, isStrict) {\n if (typeof value !== 'function') {\n return false\n }\n return isStrict ? !isConstructor(value, 2) : true\n}\n\n/**\n * judge whether a value is a Constructor\n * @param {any} f\n * @param {number} [strict] strict level\n * - 4: should must be one of native code, native class\n * - 3: can be babel transformed class\n * - 2: can be some function whose prototype has more than one properties\n * - 1: can be some function which has this inside\n * - 0: can be some function which has prototype\n * @returns {boolean}\n */\nexport function isConstructor(f, strict) {\n if (typeof f !== 'function') {\n return false\n }\n\n if (f === Symbol) {\n return false\n }\n\n // bond function && arrow function\n if (!f.prototype) {\n return false\n }\n\n const entire = f + ''\n const fnBody = entire.slice(entire.indexOf(\"{\") + 1, entire.lastIndexOf(\"}\")).trim()\n\n // native class definition\n const isNativeClass = entire.indexOf('class ') === 0\n // std lib: String, Number...\n const isNativeSTD = fnBody === `[native code]`\n\n const level4 = isNativeClass || isNativeSTD\n if (strict >= 4) {\n return level4\n }\n\n const topCtx = fnBody.replace(/function.*?\\{.*?\\}/gm, '')\n .replace(/return/gm, '')\n .replace(/\\n+/gm, ';')\n .replace(/\\s+/gm, '')\n .replace(/;;/gm, ';')\n // babel transformed class, begin with '_classCallCheck(this,', may by minified by compile tool\n const isBabelTransformedClass = /^_classCallCheck\\(this,/.test(topCtx)\n // @babel/plugin-transform-runtime '(0, _classCallCheck2[\"default\"])(this,'\n const isBabelRuntimeTransformedClass = /^\\(.*?_classCallCheck.*?\\)\\(this,/.test(topCtx)\n // webpack minified\n const isBabelTransformedMinifiedClass = /^[0-9a-zA-Z_;!?:]*?\\(this,/.test(topCtx)\n\n const level3 = level4 || isBabelTransformedClass || isBabelRuntimeTransformedClass || isBabelTransformedMinifiedClass\n if (strict == 3) {\n return level3\n }\n\n // there are some properties on f.prototype\n const protos = Object.getOwnPropertyDescriptors(f.prototype)\n const keys = Object.keys(protos).filter(item => item !== 'constructor')\n const hasProtos = !!keys.length\n\n const level2 = level3 || hasProtos\n if (strict == 2) {\n return level2\n }\n\n // function() { this.name = 'xx' }\n const hasThisInside = topCtx.indexOf('this.') === 0 || topCtx.indexOf(';this.') > -1 || topCtx.indexOf('=this;') > -1\n\n const level1 = level2 || hasThisInside\n if (strict == 1) {\n return level1\n }\n\n return true\n}\n\n/**\n * @param {any} value\n * @returns {boolean}\n */\nexport function isTruthy(value) {\n return !!value\n}\n\n/**\n * @param {any} value\n * @returns {boolean}\n */\nexport function isFalsy(value) {\n return !value\n}\n\n/**\n * @param {any} value\n * @returns {boolean}\n */\nexport function isEqual(val1, val2) {\n const equal = (obj1, obj2) => {\n const keys1 = Object.getOwnPropertyNames(obj1)\n const keys2 = Object.getOwnPropertyNames(obj2)\n const keys = unionArray(keys1, keys2)\n\n for (let i = 0, len = keys.length; i < len; i ++) {\n const key = keys[i]\n\n if (!inArray(key, keys1)) {\n return false\n }\n if (!inArray(key, keys2)) {\n return false\n }\n\n const value1 = obj1[key]\n const value2 = obj2[key]\n if (!isEqual(value1, value2)) {\n return false\n }\n }\n\n return true\n }\n\n if (isObject(val1) && isObject(val2)) {\n return equal(val1, val2)\n }\n else if (isArray(val1) && isArray(val2)) {\n return equal(val1, val2)\n }\n else {\n return val1 === val2\n }\n}\n\n/**\n * @param {any} a\n * @param {any} b\n * @returns {boolean}\n */\nexport function isLt(a, b) {\n return a < b\n}\n\n/**\n * @param {any} a\n * @param {any} b\n * @returns {boolean}\n */\nexport function isLte(a, b) {\n return a <= b\n}\n\n/**\n * @param {any} a\n * @param {any} b\n * @returns {boolean}\n */\nexport function isGt(a, b) {\n return a > b\n}\n\n/**\n * @param {any} a\n * @param {any} b\n * @returns {boolean}\n */\nexport function isGte(a, b) {\n return a >= b\n}\n\n/**\n * @param {any} value\n * @returns {boolean}\n */\nexport function isPromise(value) {\n return isInstanceOf(value, Promise)\n || (\n value\n && (typeof value === 'object' || typeof value === 'function')\n && typeof value.then === 'function'\n )\n}\n\n/**\n * @param {any} value\n * @param {any} Constructor\n * @param {boolean} [isStrict]\n * @returns {boolean}\n */\nexport function isInstanceOf(value, Constructor, isStrict) {\n if (!value || typeof value !== 'object') {\n return false\n }\n if (isStrict) {\n return value.constructor === Constructor\n }\n else {\n return value instanceof Constructor\n }\n}\n\n/**\n * @param {any} SubConstructor\n * @param {any} Constructor\n * @param {boolean} [isStrict]\n * @returns {boolean}\n */\nexport function isInheritedOf(SubConstructor, Constructor, isStrict) {\n if (typeof SubConstructor !== 'function') {\n return false\n }\n\n const ins = SubConstructor.prototype\n if (!ins) {\n return false\n }\n\n return isInstanceOf(ins, Constructor, isStrict)\n}\n\n/**\n * check wether a property is the given object's own property,\n * it will check:\n * - only string properties (except symbol properties, different from hasOwnKey),\n * - only enumerable properties;\n * @param {string} key\n * @param {object} obj\n * @param {boolean} [own] use hasOwnKey to check\n * @returns {boolean}\n */\nexport function inObject(key, obj, own) {\n if (!obj || typeof obj !== 'object') {\n return false\n }\n\n if (own) {\n return hasOwnKey(obj, key)\n }\n\n return typeof key !== 'symbol' && Object.prototype.propertyIsEnumerable.call(obj, key)\n}\n\n/**\n * check wether a property is the given object's own property,\n * as default, it will check:\n * - both string and symbol properties (different from inObject),\n * - both enumerable and non-enumerable properties;\n * @param {object|array} obj\n * @param {string} key\n * @param {boolean} [enumerable]\n * @returns {boolean}\n */\n export function hasOwnKey(obj, key) {\n if (!obj || typeof obj !== 'object') {\n return false\n }\n\n return Object.prototype.hasOwnProperty.call(obj, key)\n}\n\n/**\n * @param {any} item\n * @param {array} arr\n * @returns {boolean}\n */\nexport function inArray(item, arr) {\n return isArray(arr) && arr.includes(item)\n}\n\n/**\n * @param {object} objA\n * @param {object} objB\n * @param {number} deepth how many deepth to check\n */\nexport function isShallowEqual(objA, objB, deepth){\n if(objA === objB) {\n return true\n }\n\n // not object. number, string, boolean, null\n if(!(typeof objA === 'object' && objA !== null) || !(typeof objB === 'object' && objB !== null)) {\n return false\n }\n\n // object vs. array\n if ([objA, objB].filter(item => isArray(item)).length === 1) {\n return false\n }\n\n const keysA = Object.keys(objA).sort()\n const keysB = Object.keys(objB).sort()\n\n if (keysA.length !== keysB.length) {\n return false\n }\n\n for (let i = 0; i < keysA.length; i ++) {\n const keyA = keysA[i]\n const keyB = keysB[i]\n\n if (keyA !== keyB) {\n return false\n }\n\n const key = keyA\n\n if (objA[key] !== objB[key]) {\n if (deepth && typeof objA[key] === 'object' && typeof objB[key] === 'object') {\n if (!isShallowEqual(objA[key], objB[key], deepth - 1)) {\n return false\n }\n }\n else {\n return false\n }\n }\n }\n\n return true\n}\n\nexport function isOneInArray(items, arr) {\n return arr.some(one => items.includes(one))\n}\n\nexport function isAllInArray(items, arr) {\n return !arr.some(one => !items.includes(one))\n}\n","import { createArray } from './array.js'\n\n// the order could never be changed, becuase we use it for number convertion\nexport function getAllChars() {\n return '0123456789abcdefghigklmnopqrstuvwxyzABCDEFGHIGKLMNOPQRSTUVWXYZ'\n}\n\n/**\n * @param {string} input\n * @param {string} separator\n * @param {array} segments\n * @param {boolean} alignright\n * @returns {string}\n */\nexport function formatString(input, separator, segments, alignright) {\n if (typeof input !== 'string' || !input) {\n return ''\n }\n if (typeof separator !== 'string' || !separator) {\n return input\n }\n if (!segments) {\n return input\n }\n\n let letters = input.split('')\n\n if (alignright) {\n letters.reverse()\n }\n\n let points = Array.isArray(segments) ? [].concat(segments) : [segments]\n let result = []\n let count = points[0]\n\n for (let i = 0, len = letters.length; i < len; i ++) {\n if (typeof segments === 'number') {\n if (i > 0 && i % count === 0) {\n result.push(separator)\n }\n }\n else if (Array.isArray(segments) && points.length) {\n if (i > 0 && i % count === 0) {\n result.push(separator)\n points.shift()\n count += points.length ? points[0] : 0\n }\n }\n\n let char = letters[i]\n result.push(char)\n }\n\n if (alignright) {\n result.reverse()\n }\n\n let output = result.join('')\n return output\n}\n\n/**\n * @param {string} str\n * @param {number} len\n * @param {boolean} pad\n * @returns {string}\n */\nexport function padLeft(str, len, pad) {\n if (str.length >= len) {\n return str\n }\n\n let diff = len - str.length\n let letters = createArray(pad, diff)\n\n return letters.join('') + str\n}\n\n/**\n * @param {string} str\n * @param {number} len\n * @param {boolean} pad\n * @returns {string}\n */\nexport function padRight(str, len, pad) {\n if (str.length >= len) {\n return str\n }\n\n let diff = len - str.length\n let letters = createArray(pad, diff)\n\n return str + letters.join('')\n}\n\n/**\n * @param {string} str\n * @returns {string}\n */\nexport function getStringHash(str) {\n let hash = 5381\n let i = str.length\n\n while(i) {\n hash = (hash * 33) ^ str.charCodeAt(--i)\n }\n\n return hash >>> 0\n}\n\n/**\n * @param {number} len\n * @returns {string}\n */\nexport function createRandomString(len = 16) {\n const CHARS = getAllChars()\n let text = ''\n for (let i = 0; i < len; i++) {\n text += CHARS.charAt(Math.floor(Math.random() * CHARS.length))\n }\n return text\n}\n\n// https://github.com/gillesruppert/node-interpolate/blob/master/lib/interpolate.js\n/**\n * @param {string} template\n * @param {object} data\n * @param {object} [opts]\n * @returns {string}\n */\nexport function interpolate(template, data, opts) {\n let regex,\n lDel,\n rDel,\n delLen,\n lDelLen,\n delimiter,\n // For escaping strings to go in regex\n regexEscape = /([$\\^\\\\\\/()|?+*\\[\\]{}.\\-])/g;\n\n opts = opts || {};\n\n delimiter = opts.delimiter || '{}';\n delLen = delimiter.length;\n lDelLen = Math.ceil(delLen / 2);\n // escape delimiters for regex\n lDel = delimiter.substr(0, lDelLen).replace(regexEscape, \"\\\\$1\");\n rDel = delimiter.substr(lDelLen, delLen).replace(regexEscape, \"\\\\$1\") || lDel;\n\n // construct the new regex\n regex = new RegExp(lDel + \"[^\" + lDel + rDel + \"]+\" + rDel, \"g\");\n\n return template.replace(regex, function (placeholder) {\n let key = placeholder.slice(lDelLen, -lDelLen),\n keyParts = key.split(\".\"),\n val,\n i = 0,\n len = keyParts.length;\n\n if (key in data) {\n // need to be backwards compatible with \"flattened\" data.\n val = data[key];\n }\n else {\n // look up the chain\n val = data;\n for (; i < len; i++) {\n if (keyParts[i] in val) {\n val = val[ keyParts[i] ];\n } else {\n return placeholder;\n }\n }\n }\n return val;\n });\n}\n","import { getStringHash } from './string.js'\nimport { isArray, isObject, isFile, isDate, isFunction, inArray, isSymbol, inObject, isUndefined, hasOwnKey } from './is.js'\nimport { decideby } from './syntax.js'\n\n/**\n * @param {any} obj\n */\nexport function clone(obj) {\n const parents = []\n const clone = function(origin) {\n if (!isObject(origin) && !isArray(origin)) {\n return origin\n }\n\n const result = isArray(origin) ? [] : {}\n const keys = Object.keys(origin)\n\n parents.push({ origin, result })\n\n for (let i = 0, len = keys.length; i < len; i ++) {\n const key = keys[i]\n const value = origin[key]\n const referer = parents.find(item => item.origin === value)\n\n if (referer) {\n result[key] = referer.result\n }\n else {\n result[key] = clone(value)\n }\n }\n\n return result\n }\n\n const result = clone(obj)\n return result\n}\n\n/**\n * Deep extend an object\n * @param {object} obj1\n * @param {object} obj2\n * @param {0|1|2} [mixArr] 0: extend array as object, 1: push into array, 2: replace all items\n * @returns {object}\n */\nexport function extend(obj1, obj2, mixArr = 0) {\n const exists = []\n const extend = (obj1, obj2) => {\n each(obj2, (value, key) => {\n const originalValue = obj1[key]\n\n // check whether extended\n const exist = exists.find(item => item.e === value)\n if (exist) {\n if (originalValue === exist.o) {\n return\n }\n if (!originalValue || typeof originalValue !== 'object') {\n obj1[key] = exist.o\n return\n }\n }\n\n if (isObject(originalValue)) {\n if (isObject(value) || isArray(value)) {\n extend(originalValue, value, mixArr)\n }\n else {\n obj1[key] = value\n }\n }\n else if (isArray(originalValue)) {\n if (isObject(value)) {\n if (mixArr === 0 || mixArr === 1) {\n extend(originalValue, value, mixArr)\n }\n else if (mixArr === 2) {\n originalValue.length = 0\n extend(originalValue, value, mixArr)\n }\n else {\n obj1[key] = value\n }\n }\n else if (isArray(value)) {\n if (mixArr === 0) {\n extend(originalValue, value, mixArr)\n }\n else if (mixArr === 1) {\n originalValue.push(...value)\n }\n else if (mixArr === 2) {\n originalValue.length = 0\n originalValue.push(...value)\n }\n else {\n obj1[key] = value\n }\n }\n else {\n obj1[key] = value\n }\n }\n else {\n obj1[key] = value\n }\n })\n\n // record this pair\n exists.push({\n o: obj1, // original\n e: obj2, // extend by this\n })\n\n return obj1\n }\n return extend(obj1, obj2)\n}\n\n/**\n * @param {object} obj1\n * @param {object} obj2\n * @param {boolean} [concatArray]\n * @returns {object}\n */\nexport function merge(obj1, obj2, concatArray = true) {\n obj1 = clone(obj1)\n\n if (!isArray(obj2) && !isObject(obj2)) {\n return isArray(obj1) && isObject(obj1) ? obj1 : null\n }\n\n obj2 = clone(obj2)\n\n if (!isArray(obj1) && !isObject(obj1)) {\n return isArray(obj2) && isObject(obj2) ? obj2 : null\n }\n\n const exists = []\n const merge = (obj1, obj2) => {\n if (isArray(obj1)) {\n if (isArray(obj2) && concatArray) {\n return [...obj1, ...obj2]\n }\n }\n\n const result = obj1\n const keys = Object.keys(obj2)\n keys.forEach((key) => {\n const oldValue = obj1[key]\n const newValue = obj2[key]\n\n if (isObject(newValue) || isArray(newValue)) {\n const index = exists.indexOf(newValue)\n if (index === -1) {\n exists.push(newValue)\n }\n else if (!isArray(oldValue) && !isObject(oldValue)) {\n result[key] = newValue\n return\n }\n }\n\n if (isObject(newValue) || isArray(newValue)) {\n if (isObject(oldValue) || isArray(oldValue)) {\n result[key] = merge(oldValue, newValue)\n }\n else {\n result[key] = newValue\n }\n }\n else {\n result[key] = newValue\n }\n })\n return result\n }\n\n return merge(obj1, obj2)\n}\n\n/**\n * @param {object} obj\n * @returns {string}\n */\nexport function stringify(obj) {\n const exists = [obj]\n const used = []\n const stringifyObjectByKeys = (obj) => {\n if (isArray(obj)) {\n let items = obj.map((item) => {\n if (item && typeof item === 'object') {\n return stringifyObjectByKeys(item)\n }\n else {\n return JSON.stringify(item)\n }\n })\n let str = '[' + items.join(',') + ']'\n return str\n }\n\n let str = '{'\n let keys = Object.keys(obj)\n let total = keys.length\n keys.sort()\n keys.forEach((key, i) => {\n let value = obj[key]\n str += key + ':'\n\n if (value && typeof value === 'object') {\n let index = exists.indexOf(value)\n if (index > -1) {\n str += '#' + index\n used.push(index)\n }\n else {\n exists.push(value)\n const num = exists.length - 1\n str += '#' + num + stringifyObjectByKeys(value)\n }\n }\n else {\n str += JSON.stringify(value)\n }\n\n if (i < total - 1) {\n str += ','\n }\n })\n str += '}'\n return str\n }\n let str = stringifyObjectByKeys(obj)\n\n exists.forEach((item, i) => {\n if (!used.includes(i)) {\n str = str.replace(new RegExp(`:#${i}`, 'g'), ':')\n }\n })\n\n if (used.includes(0)) {\n str = '#0' + str\n }\n\n return str\n}\n\n/**\n * @param {object} obj\n * @returns {string}\n */\nexport function getObjectHash(obj) {\n if (typeof obj !== 'object') {\n return\n }\n\n let str = stringify(obj)\n let hash = getStringHash(str)\n return hash\n}\n\n/**\n * @param {object} obj\n * @param {string} key\n * @param {object|function} value\n * @returns {object}\n */\nexport function define(obj, key, value) {\n if (isFunction(value)) {\n return Object.defineProperty(obj, key, { get: value })\n }\n else if (isObject(value)) {\n if (hasOwnKey(value, 'enumerable') || hasOwnKey(value, 'configurable')) {\n return Object.defineProperty(obj, key, value)\n }\n else if ((isFunction(value.set) && isFunction(value.get))) {\n return Object.defineProperty(obj, key, value)\n }\n else if (hasOwnKey(value, 'value')) {\n return Object.defineProperty(obj, key, value)\n }\n else {\n return Object.defineProperty(obj, key, { value })\n }\n }\n else {\n return Object.defineProperty(obj, key, { value })\n }\n}\n\n/**\n * @param {object|array} obj\n * @param {function} [determine]\n * @returns {object}\n */\nexport function flat(obj, determine) {\n const flat = (input, path = '', result = {}) => {\n if (isArray(input)) {\n input.forEach((item, i) => flat(item, `${path}[${i}]`, result))\n return result\n }\n else if (input && typeof input === 'object' && !isFile(input) && !isDate(input)) {\n if (isFunction(determine) && !determine(input)) {\n result[path] = input\n return result\n }\n\n each(input, (value, key) => {\n flat(value, !path ? key : `${path}[${key}]`, result)\n })\n return result\n }\n else {\n result[path] = input\n return result\n }\n }\n return flat(obj)\n}\n\n/**\n * @param {object|array} obj\n * @param {function} fn\n * @param {boolean} descriptor\n * @returns {object|array}\n */\nexport function each(obj, fn, descriptor) {\n const withDescriptor = () => {\n const descriptors = Object.getOwnPropertyDescriptors(obj)\n const keys = Object.keys(descriptors)\n keys.forEach((key) => {\n const descriptor = descriptors[key]\n const { get, set, enumerable, configurable, writable } = descriptor\n if (enumerable || (get || set) || (configurable && writable)) {\n fn(descriptor, key, obj)\n }\n })\n }\n\n const withIterator = () => {\n if (isArray(obj)) {\n obj.forEach(fn)\n }\n else {\n const keys = Object.keys(obj)\n keys.forEach((key) => {\n const value = obj[key]\n fn(value, key, obj)\n })\n }\n }\n\n return descriptor ? withDescriptor() : withIterator()\n}\n\n/**\n * @param {object|array} obj\n * @param {function} fn\n * @returns {object}\n */\nexport function map(obj, fn) {\n if (isArray(obj)) {\n return obj.map(fn)\n }\n else {\n const result = {}\n each(obj, (value, key) => {\n result[key] = fn(value, key, obj)\n })\n return result\n }\n}\n\n/**\n * @param {object|array} obj\n * @param {function} fn\n * @returns {object}\n */\nexport function filter(obj, fn) {\n if (isArray(obj)) {\n return obj.filter(fn)\n }\n else {\n const result = {}\n each(obj, (value, key) => {\n const bool = fn(value, key, obj)\n if (!bool) {\n return\n }\n result[key] = value\n })\n return result\n }\n}\n\n/**\n * @param {object|array} obj\n * @param {function} fn\n */\nexport function iterate(obj, fn) {\n if (isArray(obj)) {\n for (let i = 0, len = obj.length; i < len; i ++) {\n const item = obj[i]\n const res = fn(item, i, obj)\n if (!isUndefined(res)) {\n return res\n }\n }\n }\n else {\n const keys = Object.keys(obj)\n for (let i = 0, len = keys.length; i < len; i ++) {\n const key = keys[i]\n const value = obj[key]\n const res = fn(value, key, obj)\n if (!isUndefined(res)) {\n return res\n }\n }\n }\n}\n\n/**\n * @param {object|array} obj\n * @param {function} fn\n */\nexport function find(obj, fn) {\n return iterate(obj, (value, key) => {\n const res = fn(value, key, obj)\n if (res) {\n return value\n }\n })\n}\n\n/**\n * @param {object} obj\n * @param {array} keys\n * @returns {object}\n */\nexport function extract(obj, keys) {\n const results = {}\n keys.forEach((key) => {\n if (hasOwnKey(obj, key)) {\n results[key] = obj[key]\n }\n })\n return results\n}\n\n/**\n * deep freeze\n * @param {object} o\n * @returns {object}\n */\nexport function freeze(o) {\n\tif (!Object.freeze) {\n\t\treturn o\n\t}\n\n\tObject.freeze(o)\n\n\tObject.getOwnPropertyNames(o).forEach((prop) => {\n\t\tconst v = o[prop]\n\t\tif (\n\t\t\tObject.prototype.hasOwnProperty.call(o, prop)\n\t\t\t&& v !== null\n\t\t\t&& (typeof v === 'object' || typeof v === 'function')\n\t\t\t&& !Object.isFrozen(v)\n\t\t) {\n\t\t\tfreeze(v)\n\t\t}\n\t})\n\n\treturn o\n}\n\n/**\n * create a reactive object.\n * it will change your original data\n * @param {object|array} origin\n * @param {object} options\n * @param {function} options.get to modify output value of each node, receive (keyPath, reactiveValue), reactiveValue is a reactive object/array as if, keyPath is an array which catains keys in path\n * @param {function} options.set to modify input value of each node, receive (keyPath, nextValue), nextValue is the given passed value, the return value will be transformed to be reactive object/array as if\n * @param {function} options.dispatch to notify change with keyPath, receive (keypath, next, prev), it will be called after value is set into\n * @param {function} options.writable whether be able to change value, return false to disable writable, default is true\n * @param {function} options.disable return true to disable create nest reactive on this node\n * @returns {object|array}\n * @example\n * const some = {\n * body: {\n * hand: true,\n * foot: true,\n * },\n * }\n * const a = createReactive(some, {\n * get(keyPath, value) {\n * if (keyPath.join('.') === 'body.hand') {\n * return value.toString()\n * }\n * else {\n * return value\n * }\n * },\n * set(keyPath, value) {},\n * dispatch({\n * keyPath,\n * value, // receive value\n * input, // getter output\n * next, // created reactive\n * prev, // current reactive\n * }, force) {},\n * })\n *\n * a !== some // reactive object !== object\n * a.body !== some.body // reactive object !== object\n * a.body.hand !== some.body.hand // true !== 'true'\n * a.body.foot == some.body.foot // true == true\n *\n * a.body.hand = false // now a.body.hand is 'false', a string\n * some.body.hand === false // original data changed\n */\nexport function createReactive(origin, options = {}) {\n const { get, set, del, dispatch, writable, disable, receive } = options\n\n const create = (origin, parents = []) => {\n if (!isObject(origin) && !isArray(origin)) {\n return origin\n }\n\n if (isFunction(disable) && disable(parents, origin)) {\n return origin\n }\n\n let output = null\n if (isObject(origin)) {\n output = createObject(origin, parents)\n }\n else {\n output = createArray(origin, parents)\n }\n\n return output\n }\n\n const createObject = (origin, parents = []) => {\n const media = {}\n const reactive = {}\n\n const setValue = (key, value, trigger) => {\n const keyPath = [...parents, key]\n\n if (Object.isFrozen(origin)) {\n const active = create(value, keyPath)\n return active\n }\n\n const prev = origin[key]\n const invalid = media[key]\n const input = isFunction(set) ? set(keyPath, value) : value\n\n let active\n let next\n if (inObject(key, media) && (\n value === prev\n || value === invalid\n || input === prev\n || input === invalid\n )) {\n // origin property is changed any where else\n if ((typeof prev !== 'object' || prev === null) && prev !== invalid) {\n next = prev\n active = prev\n }\n else if (invalid && typeof invalid === 'object' && invalid.$$_ORIGIN !== prev) {\n next = prev\n active = create(prev, keyPath)\n }\n else {\n next = prev\n active = invalid\n }\n }\n else {\n next = input\n active = create(next, keyPath)\n }\n\n origin[key] = next\n media[key] = active\n\n if (trigger && isFunction(dispatch)) {\n dispatch({\n keyPath,\n value,\n next, active,\n prev, invalid,\n })\n }\n\n return active\n }\n\n const delValue = (key, trigger) => {\n const keyPath = [...parents, key]\n const prev = origin[key]\n const invalid = media[key]\n\n if (isFunction(del)) {\n del(keyPath)\n }\n\n delete reactive[key]\n delete media[key]\n delete origin[key]\n\n if (trigger && isFunction(dispatch)) {\n const none = void 0\n dispatch({\n keyPath,\n value: none,\n next: none,\n active: none,\n prev, invalid,\n }, isUndefined(prev))\n }\n }\n\n const put = (key, value, trigger) => {\n const keyPath = [...parents, key]\n\n Object.defineProperty(reactive, key, {\n get: () => {\n const active = media[key]\n const output = isFunction(get) ? get(keyPath, active) : active\n return output\n },\n set: (value) => {\n if (isFunction(receive)) {\n receive(keyPath, value)\n }\n\n if (Object.isFrozen(origin)) {\n return media[key]\n }\n\n if (isFunction(writable) && !writable(keyPath, value)) {\n return media[key]\n }\n\n const descriptor = Object.getOwnPropertyDescriptor(media, key)\n if (descriptor) {\n if (!('value' in descriptor)) {\n if ('set' in descriptor) {\n origin[key] = value\n }\n return value\n }\n if (!descriptor.writable) {\n return descriptor.value\n }\n }\n\n const active = setValue(key, value, true)\n return active\n },\n enumerable: true,\n configurable: true,\n })\n\n // initialize the current value at the first time\n const active = setValue(key, value, trigger)\n return active\n }\n\n each(origin, (descriptor, key) => {\n if ('value' in descriptor) {\n const value = descriptor.value\n put(key, value)\n }\n else {\n Object.defineProperty(media, key, descriptor)\n }\n }, true)\n\n Object.defineProperties(reactive, {\n $get: {\n value: key => reactive[key],\n },\n $set: {\n value: (key, value) => {\n const keyPath = [...parents, key]\n\n if (isFunction(receive)) {\n receive(keyPath, value)\n }\n\n if (Object.isFrozen(origin)) {\n return media[key]\n }\n\n if (isFunction(writable) && !writable(keyPath)) {\n return media[key]\n }\n\n const descriptor = Object.getOwnPropertyDescriptor(media, key)\n if (descriptor) {\n if (!('value' in descriptor)) {\n if ('set' in descriptor) {\n origin[key] = value\n }\n return value\n }\n if (!descriptor.writable) {\n return descriptor.value\n }\n }\n\n const active = inObject(key, reactive) ? setValue(key, value, true) : put(key, value, true)\n return active\n },\n },\n $del: {\n value: (key) => {\n const keyPath = [...parents, key]\n\n if (isFunction(receive)) {\n receive(keyPath)\n }\n\n if (Object.isFrozen(origin)) {\n return false\n }\n\n if (isFunction(writable) && !writable(keyPath)) {\n return false\n }\n\n const descriptor = Object.getOwnPropertyDescriptor(media, key)\n if (!descriptor) {\n return false\n }\n if (!descriptor.configurable) {\n return false\n }\n\n delValue(key, true)\n return true\n },\n },\n $$_ORIGIN: {\n get: () => origin,\n },\n })\n\n return reactive\n }\n\n const createArray = (origin, parents = []) => {\n const media = []\n const reactive = []\n\n const setValue = (i, value, trigger) => {\n const keyPath = [...parents, i]\n\n if (Object.isFrozen(origin)) {\n const active = create(value, keyPath)\n return active\n }\n\n const prev = origin[i]\n const invalid = media[i]\n const input = isFunction(set) ? set(keyPath, value) : value\n\n let active\n let next\n if (inObject(i, media) && (\n value === prev\n || value === invalid\n || input === prev\n || input === invalid\n )) {\n // origin property is changed any where else\n if ((typeof prev !== 'object' || prev === null) && prev !== invalid) {\n next = prev\n active = prev\n }\n else if (invalid && typeof invalid === 'object' && invalid.$$_ORIGIN !== prev) {\n next = prev\n active = create(prev, keyPath)\n }\n else {\n next = prev\n active = invalid\n }\n }\n else {\n next = input\n active = create(next, keyPath)\n }\n\n origin[i] = next\n media[i] = active\n\n if (trigger && isFunction(dispatch)) {\n dispatch({\n keyPath,\n value,\n next, active,\n prev, invalid,\n })\n }\n\n return active\n }\n\n // fill items into output array\n // start and end, where to start and end\n // items, original data to use\n const shuffle = (start, end) => {\n for (let i = start; i <= end; i ++) {\n const keyPath = [...parents, i]\n\n Object.defineProperty(reactive, i, {\n get: () => {\n const active = media[i]\n const output = isFunction(get) ? get(keyPath, active) : active\n return output\n },\n set: (value) => {\n if (isFunction(writable) && !writable(keyPath, value)) {\n return media[i]\n }\n\n const descriptor = Object.getOwnPropertyDescriptor(media, i)\n if (descriptor) {\n if (!('value' in descriptor)) {\n if ('set' in descriptor) {\n origin[i] = value\n }\n return value\n }\n if (!descriptor.writable) {\n return descriptor.value\n }\n }\n\n const active = setValue(i, value, true)\n return active\n },\n enumerable: true,\n configurable: true,\n })\n\n // initialize\n setValue(i, origin[i])\n }\n\n // make sure the no use items are removed\n if (media.length > origin.length) {\n media.length = origin.length\n }\n if (reactive.length > media.length) {\n reactive.length = media.length\n }\n }\n\n // change array prototype methods\n const modify = (fn) => ({\n value: function(...args) {\n const nonAs = () => {\n if (fn === 'push' || fn === 'unshift') {\n return media.length\n }\n else if (fn === 'splice') {\n return []\n }\n else if (fn === 'shift') {\n return media[0]\n }\n else if (fn === 'pop') {\n return media[media.length - 1]\n }\n else if (fn === 'insert' || fn === 'remove') {\n return -1\n }\n else {\n return media\n }\n }\n\n if (isFunction(receive)) {\n receive(parents, origin, fn, args)\n }\n\n if (Object.isFrozen(origin)) {\n return nonAs()\n }\n\n if (isFunction(writable) && !writable(parents, origin)) {\n return nonAs()\n }\n\n // a hook to modify args for array push, shift inputs\n if (inObject(fn, options) && isFunction(options[fn])) {\n const res = options[fn](parents, args)\n // when return false, it means don't change the value\n if (res === false) {\n return nonAs()\n }\n // when return array, use it as new args\n if (isArray(res)) {\n args = res\n }\n // when return object, switch to another method\n else if (isObject(res)) {\n const { to, args: newArgs } = res\n fn = to\n args = newArgs\n }\n }\n\n let output = null\n\n // deal with original data\n const operate = () => {\n const before = origin.length\n output = Array.prototype[fn].apply(origin, args)\n const after = origin.length\n return [after, before]\n }\n\n if (fn === 'push') {\n const [after, before] = operate()\n output = after\n media.length = after\n reactive.length = after\n shuffle(before - 1, after - 1)\n }\n else if (fn === 'unshift') {\n const [after] = operate()\n output = after\n media.length = after\n reactive.length = after\n shuffle(0, after - 1)\n }\n else if (fn === 'splice') {\n const [after] = operate()\n\n const [start, len, ...items] = args\n output = media.slice(start, start + len)\n\n media.length = after\n reactive.length = after\n\n if (!items.length) {\n shuffle(start, after - 1)\n }\n else if (len === items.length) {\n shuffle(start, start + len - 1)\n }\n else {\n shuffle(start, after - 1)\n }\n }\n else if (fn === 'shift') {\n const [after] = operate()\n output = media[0]\n media.length = after\n reactive.length = after\n shuffle(0, after - 1)\n }\n else if (fn === 'pop') {\n const [after] = operate()\n output = media[media.length - 1]\n media.length = after\n reactive.length = after\n }\n else if (fn === 'fill') {\n const [, before] = operate()\n const [, start = 0, end = before] = args\n output = media\n shuffle(start, end - 1)\n }\n else if (fn === 'insert') {\n if (args.length < 1) {\n return -1\n }\n else if (args.length < 2) {\n const [item] = args\n output = origin.length\n Array.prototype.push.call(origin, item)\n shuffle(output, output)\n }\n else {\n const [item, before] = args\n const beforeIndex = decideby(() => {\n const mediaIndex = media.indexOf(before)\n if (mediaIndex > -1) {\n return mediaIndex\n }\n\n const originIndex = origin.indexOf(before)\n return originIndex\n })\n\n if (beforeIndex < 0) {\n return -1\n }\n\n Array.prototype.splice.call(origin, beforeIndex, 0, item)\n shuffle(beforeIndex, origin.length - 1)\n output = beforeIndex\n }\n }\n else if (fn === 'remove') {\n if (args.length < 1) {\n return -1\n }\n else {\n const [item] = args\n const index = decideby(() => {\n const mediaIndex = media.indexOf(item)\n if (mediaIndex > -1) {\n return mediaIndex\n }\n\n const originIndex = origin.indexOf(item)\n return originIndex\n })\n\n if (index < 0) {\n return index\n }\n\n Array.prototype.splice.call(origin, index, 1)\n Array.prototype.splice.call(media, index, 1)\n shuffle(index, origin.length - 1)\n output = index\n }\n }\n else {\n operate()\n output = media\n }\n\n if (isFunction(dispatch)) {\n dispatch({\n keyPath: parents,\n value: origin,\n next: origin,\n active: reactive,\n prev: origin,\n invalid: reactive,\n fn,\n result: output,\n }, true)\n }\n\n return output\n },\n })\n\n Object.defineProperties(reactive, {\n push: modify('push'),\n unshift: modify('unshift'),\n splice: modify('splice'),\n pop: modify('pop'),\n shift: modify('shift'),\n sort: modify('sort'),\n reverse: modify('reverse'),\n fill: modify('fill'),\n insert: modify('insert'),\n remove: modify('remove'),\n $$_ORIGIN: {\n get: () => origin,\n },\n })\n\n shuffle(0, origin.length - 1)\n\n return reactive\n }\n\n const output = create(origin)\n return output\n}\n\nconst ProxySymbol = Symbol('Proxy')\n/**\n * create a proxy object.\n * it will change your original data\n * @param {object|array} origin\n * @param {object} options\n * @param {function} options.get to modify output value of each node, receive (keyPath, proxiedValue), proxiedValue is a reactive object/array as if, keyPath is an array which catains keys in path\n * @param {function} options.set to modify input value of each node, receive (keyPath, nextValue), nextValue is the given passed value, the return value will be transformed to be reactive object/array as if\n * @param {function} options.dispatch to notify change with keyPath, receive (keypath, next, prev), it will be called after value is set into\n * @param {function} options.writable whether be able to change value, return false to disable writable, default is true\n * @returns {Proxy}\n * @example\n * const some = {\n * body: {\n * hand: true,\n * foot: true,\n * },\n * }\n * const a = createProxy(some, {\n * get(keyPath, value) {\n * if (keyPath.join('.') === 'body.hand') {\n * return value.toString()\n * }\n * else {\n * return value\n * }\n * },\n * set(keyPath, value) {},\n * dispatch(keyPath, next, current) {},\n * })\n *\n * a !== some // proxy object !== object\n * a.body !== some.body // proxy object !== object\n * a.body.hand !== some.body.hand // true !== 'true'\n * a.body.foot == some.body.foot // true == true\n *\n * a.body.hand = false // now a.body.hand is 'false', a string\n * some.body.hand === false // some.body.hand changes to false\n */\nexport function createProxy(origin, options = {}) {\n const { get, set, del, dispatch, writable, disable, receive, extensible, enumerable } = options\n\n const create = (origin, parents = []) => {\n if (!isObject(origin) && !isArray(origin)) {\n return origin\n }\n\n if (isFunction(disable) && disable(parents, origin)) {\n return origin\n }\n\n let output = null\n if (isObject(origin)) {\n output = createObject(origin, parents)\n }\n else {\n output = createArray(origin, parents)\n }\n\n return output\n }\n\n const createObject = (origin, parents = []) => {\n const media = {}\n const proxy = new Proxy(media, {\n get: (target, key, receiver) => {\n // get original property value\n if (isSymbol(key) && key === ProxySymbol) {\n return origin\n }\n\n // primitive property\n // such as 'a' + obj, and obj[Symbol.toPrimitive](hint) defined\n if (isSymbol(key) && getSymbolContent(key).indexOf('Symbol.') === 0) {\n return Reflect.get(target, key, receiver)\n }\n\n const active = Reflect.get(target, key, receiver)\n\n // here should be noticed\n // a Symbol key will not to into `get` option function\n if (isFunction(get) && !isSymbol(key)) {\n const keyPath = [...parents, key]\n const output = get(keyPath, active)\n return output\n }\n else {\n return active\n }\n },\n set: (target, key, value, receiver) => {\n const keyPath = [...parents, key]\n\n if (isFunction(receive)) {\n receive(keyPath, value)\n }\n\n if (Object.isFrozen(origin)) {\n return true\n }\n\n if (isFunction(writable) && !writable(keyPath, value)) {\n return true\n }\n\n const descriptor = Object.getOwnPropertyDescriptor(media, key)\n if (descriptor) {\n if (!('value' in descriptor)) {\n if ('set' in descriptor) {\n origin[key] = value\n }\n return true\n }\n if (!descriptor.writable) {\n return true\n }\n }\n\n const prev = origin[key]\n const invalid = media[key]\n const input = isFunction(set) ? set(keyPath, value) : value\n\n let active\n let next\n if (inObject(key, media) && (\n value === prev\n || value === invalid\n || input === prev\n || input === invalid\n )) {\n next = prev\n active = invalid\n }\n else {\n next = input\n active = create(next, keyPath)\n }\n\n origin[key] = next\n Reflect.set(target, key, active, receiver)\n\n if (isFunction(dispatch)) {\n dispatch({\n keyPath,\n value,\n next, active,\n prev, invalid,\n })\n }\n\n return true\n },\n deleteProperty: (target, key) => {\n const keyPath = [...parents, key]\n\n if (isFunction(receive)) {\n receive(keyPath)\n }\n\n if (Object.isFrozen(origin)) {\n return true\n }\n\n if (isFunction(writable) && !writable(keyPath)) {\n return true\n }\n\n const descriptor = Object.getOwnPropertyDescriptor(media, key)\n if (!descriptor) {\n return true\n }\n if (!descriptor.configurable) {\n return true\n }\n\n const prev = origin[key]\n const invalid = media[key]\n\n if (isFunction(del) && !isSymbol(key)) {\n del(keyPath)\n }\n\n delete origin[key]\n Reflect.deleteProperty(target, key)\n\n if (isFunction(dispatch)) {\n const none = undefined\n dispatch({\n keyPath,\n value: none,\n next: none,\n active: none,\n prev, invalid,\n }, !isUndefined(prev))\n }\n\n return true\n },\n has(target, key) {\n if (isFunction(enumerable)) {\n const keyPath = [...parents, key]\n return enumerable(keyPath)\n }\n return key in target\n },\n isExtensible() {\n const keyPath = [...parents]\n if (isFunction(extensible)) {\n return extensible(keyPath)\n }\n return true\n },\n })\n\n each(origin, (descriptor, key) => {\n if ('value' in descriptor) {\n const value = descriptor.value\n const keyPath = [...parents, key]\n\n if (Object.isFrozen(origin)) {\n media[key] = create(value, keyPath)\n }\n else {\n const needRewrite = isFunction(set) && !isSymbol(key)\n const next = needRewrite ? set(keyPath, value) : value\n\n if (needRewrite) {\n origin[key] = next\n }\n\n media[key] = create(next, keyPath)\n }\n }\n else {\n Object.defineProperty(media, key, descriptor)\n }\n }, true)\n\n return proxy\n }\n\n const createArray = (origin, parents = []) => {\n const media = []\n const proxy = new Proxy(media, {\n get: (target, key, receiver) => {\n // get original property value\n if (isSymbol(key) && key === ProxySymbol) {\n return origin\n }\n\n // primitive property\n // such as 'a' + obj, and obj[Symbol.toPrimitive](hint) defined\n if (isSymbol(key) && getSymbolContent(key).indexOf('Symbol.') === 0) {\n return Reflect.get(target, key, receiver)\n }\n\n // array primitive operation\n const methods = [\n // the following 3 lines will change the array's length\n // the following 1 line will return the new length\n 'push', 'unshift',\n // the following 1 line will return the spliced items array\n 'splice',\n // the following 1 line will return the removed item value\n 'shift', 'pop',\n // the following 1 line will return the changed original array\n 'sort', 'reverse', 'fill',\n // provided method\n 'insert', 'remove',\n ]\n if (inArray(key, methods)) {\n return (...args) => {\n const nonAs = () => {\n if (key === 'push' || key === 'unshift') {\n return origin.length\n }\n else if (key === 'splice') {\n return []\n }\n else if (key === 'shift') {\n return media[0]\n }\n else if (key === 'pop') {\n return media[origin.length - 1]\n }\n else if (key === 'insert') {\n return -1\n }\n else {\n return media\n }\n }\n\n if (isFunction(receive)) {\n receive(parents, origin, key, args)\n }\n\n if (Object.isFrozen(origin)) {\n return nonAs()\n }\n\n if (isFunction(writable) && !writable(parents, origin)) {\n return nonAs()\n }\n\n // a hook to modify args for array push, shift inputs\n if (inObject(key, options) && isFunction(options[key])) {\n const res = options[key](parents, args)\n // when return false, it means don't change the value\n if (res === false) {\n return nonAs()\n }\n // when return array, use it as new args\n if (isArray(res)) {\n args = res\n }\n // when return object, switch to another method\n else if (isObject(res)) {\n const { to, args: newArgs } = res\n key = to\n args = newArgs\n }\n }\n\n const max = origin.length\n let output = null\n\n // create sub children\n if (key === 'push') {\n // change original data\n Array.prototype[key].apply(origin, args)\n\n const medias = args.map((item, i) => {\n const index = max + i\n return create(item, [...parents, index])\n })\n output = Array.prototype.push.apply(media, medias)\n }\n else if (key === 'splice') {\n // change original data\n Array.prototype[key].apply(origin, args)\n\n const [start, len, ...items] = args\n if (!items.length) {\n output = Array.prototype.splice.call(media, start, len)\n }\n else if (len === items.length) {\n const medias = items.map((item, i) => {\n const index = start + i\n return create(item, [...parents, index])\n })\n const params = [start, len, ...medias]\n output = Array.prototype.splice.apply(media, params)\n }\n // the ones which are right in media will be changed\n else {\n output = media.slice(start, start + len)\n\n const items = origin.slice(start)\n const medias = items.map((item, i) => {\n const index = start + i\n return create(item, [...parents, index])\n })\n const params = [start, origin.length, ...medias]\n Array.prototype.splice.apply(media, params)\n }\n }\n else if (key === 'fill') {\n // change original data\n Array.prototype[key].apply(origin, args)\n\n const [item, start = 0, end = max] = args\n const items = []\n for (let i = start; i < end; i ++) {\n items.push(create(item, [...parents, i]))\n }\n const params = [start, end - start, items]\n Array.prototype.splice.apply(media, params)\n output = media\n }\n else if (key === 'insert') {\n if (args.length < 1) {\n return -1\n }\n else if (args.length < 2) {\n const [item] = args\n output = origin.length\n Array.prototype.push.call(origin, item)\n Array.prototype.push.call(media, item)\n }\n else {\n const [item, before] = args\n const beforeIndex = decideby(() => {\n const mediaIndex = media.indexOf(before)\n if (mediaIndex > -1) {\n return mediaIndex\n }\n\n const originIndex = origin.indexOf(before)\n return originIndex\n })\n\n if (beforeIndex < 0) {\n return -1\n }\n\n Array.prototype.splice.call(origin, beforeIndex, 0, item)\n Array.prototype.splice.call(media, beforeIndex, 0, item)\n output = beforeIndex\n }\n }\n else if (key === 'remove') {\n const [item] = args\n const index = decideby(() => {\n const mediaIndex = media.indexOf(item)\n if (mediaIndex > -1) {\n return mediaIndex\n }\n\n const originIndex = origin.indexOf(item)\n return originIndex\n })\n\n if (index < 0) {\n return index\n }\n\n Array.prototype.splice.call(origin, index, 1)\n Array.prototype.splice.call(media, index, 1)\n output = index\n }\n else {\n // change original data\n Array.prototype[key].apply(origin, args)\n output = Array.prototype[key].apply(media, args)\n }\n\n if (isFunction(dispatch)) {\n dispatch({\n keyPath: parents,\n value: origin,\n next: origin,\n active: proxy,\n prev: origin,\n invalid: proxy,\n fn: key,\n result: output,\n }, true)\n }\n\n return output\n }\n }\n\n const keyPath = [...parents, key]\n const active = Reflect.get(target, key, receiver)\n\n // here should be noticed\n // a Symbol key will not to into `get` option function\n if (isFunction(get) && !isSymbol(key)) {\n const output = get(keyPath, active)\n return output\n }\n else {\n return active\n }\n },\n set: (target, key, value, receiver) => {\n const keyPath = [...parents, key]\n\n if (isFunction(receive)) {\n receive(keyPath, value)\n }\n\n if (Object.isFrozen(origin)) {\n return true\n }\n\n if (isFunction(writable) && !writable(keyPath, value)) {\n return true\n }\n\n const descriptor = Object.getOwnPropertyDescriptor(media, key)\n if (descriptor) {\n if (!('value' in descriptor)) {\n if ('set' in descriptor) {\n origin[key] = value\n }\n return true\n }\n if (!descriptor.writable) {\n return true\n }\n }\n\n // operate like media.length = 0\n if (key === 'length') {\n if (isFunction(writable) && !writable(parents, origin)) {\n return true\n }\n\n origin.length = value\n media.length = value\n\n if (isFunction(dispatch)) {\n dispatch({\n keyPath: parents,\n value: origin,\n next: origin,\n prev: origin,\n active: proxy,\n }, true)\n }\n\n return true\n }\n\n const prev = origin[key]\n const invalid = media[key]\n const input = isFunction(set) ? set(keyPath, value) : value\n\n let active\n let next\n if (inObject(key, media) && (\n value === prev\n || value === invalid\n || input === prev\n || input === invalid\n )) {\n next = prev\n active = invalid\n }\n else {\n next = input\n active = create(next, keyPath)\n }\n\n origin[key] = next\n Reflect.set(target, key, active, receiver)\n\n if (isFunction(dispatch)) {\n dispatch({\n keyPath,\n value,\n next, active,\n prev, invalid,\n })\n }\n\n return true\n },\n deleteProperty: (target, key) => {\n const keyPath = [...parents, key]\n\n if (isFunction(receive)) {\n receive(keyPath)\n }\n\n if (Object.isFrozen(origin)) {\n return true\n }\n\n if (isFunction(writable) && !writable(keyPath)) {\n return true\n }\n\n const descriptor = Object.getOwnPropertyDescriptor(media, key)\n if (!descriptor) {\n return true\n }\n if (!descriptor.configurable) {\n return true\n }\n\n const prev = origin[key]\n const invalid = media[key]\n\n if (isFunction(del) && !isSymbol(key)) {\n del(keyPath)\n }\n\n delete origin[key]\n Reflect.deleteProperty(target, key)\n\n if (isFunction(dispatch)) {\n const none = undefined\n dispatch({\n keyPath,\n value: none,\n next: none,\n active: none,\n prev, invalid,\n }, !isUndefined(prev))\n }\n\n return true\n },\n has(target, key) {\n if (inArray(key, ['remove', 'insert'])) {\n return true\n }\n if (isFunction(enumerable)) {\n const keyPath = [...parents, key]\n return enumerable(keyPath)\n }\n return key in target\n },\n isExtensible() {\n if (isFunction(extensible)) {\n const keyPath = [...parents]\n return extensible(keyPath)\n }\n return true\n },\n })\n\n each(origin, (descriptor, i) => {\n if ('value' in descriptor) {\n const value = descriptor.value\n const keyPath = [...parents, i]\n\n if (Object.isFrozen(origin)) {\n media[i] = create(value, keyPath)\n }\n else {\n const needRewrite = isFunction(set) && !isSymbol(i)\n const next = needRewrite ? set(keyPath, value) : value\n\n if (needRewrite) {\n origin[i] = next\n }\n\n media[i] = create(next, keyPath)\n }\n }\n else {\n Object.defineProperty(media, key, descriptor)\n }\n }, true)\n\n return proxy\n }\n\n const output = create(origin)\n return output\n}\n\n/**\n * determine whether an object is a Proxy\n * @param {any} value\n * @returns {boolean}\n */\nexport function isProxy(value) {\n return !!(value && value[ProxySymbol])\n}\n\n/**\n * refine the original value from a Proxy\n * @param {object} obj\n * @returns {any}\n */\nexport function refineProxy(obj) {\n return obj ? obj[ProxySymbol] : void 0\n}\n\n/**\n * get the string of a symbol\n * @param {symbol} symb\n * @returns {string}\n */\nexport function getSymbolContent(symb) {\n if (symb.description) {\n return symb.description\n }\n const str = symb.toString()\n return str.substring(7, str.length - 1)\n}\n\n/**\n * convert an object to an entry array\n * @param {object} obj\n * @returns {array[]}\n */\nexport function toEntries(obj) {\n const keys = Object.keys(obj)\n return keys.map(key => [key, obj[key]])\n}\n\n/**\n * conver an entry/key-value array to an object\n * @param {array[] | object[]} entries\n * @param {boolean} kv\n * @returns {object}\n */\nexport function fromEntries(entries, kv = false) {\n const obj = {}\n entries.forEach((item) => {\n if (kv) {\n const { key, value } = item\n obj[key] = value\n }\n else {\n const [key, value] = item\n obj[key] = value\n }\n })\n return obj\n}\n","import {\n getConstructorOf,\n createRandomString,\n map,\n isFunction,\n isArray,\n} from 'ts-fns';\n\nexport class Anys {\n constructor(options) {\n this._events = [];\n this._queue = [];\n\n const Constructor = getConstructorOf(this);\n\n const {\n filters: defaultFilters = [],\n plugins: defaultPluings = [],\n ...defaultOptions\n } = {\n ...Anys.defaultOptions,\n ...(Constructor.defaultOptions || {}),\n };\n\n const {\n filters: givenFilters = [],\n plugins: givenPluings = [],\n defines: givenDefines = [],\n ...givenOptions\n } = options || {};\n\n /**\n * generate this.plugins, this.options, this.filters\n * these should be generated when constrcutor processing\n */\n\n const pluginOptions = {};\n const pluginFilters = [];\n const pluginDefines = {};\n\n const isGivenPluginsMapping = givenPluings && !isArray(givenPluings) && typeof givenPluings === 'object';\n const givenPluingList = isGivenPluginsMapping ? objectValues(givenPluings) : isArray(givenPluings) ? givenPluings : [];\n const givenPluginMapping = isGivenPluginsMapping ? Object.keys(givenPluings).map((key) => ({ key, value: givenPluings[key] })) : [];\n\n // create a plugin list which is sorted be dependence direction\n const pluginsDraft = [...defaultPluings, ...givenPluingList];\n const mergePluginDeps = (pluginList) => {\n pluginList.forEach((Plugin) => {\n const depPlugins = Plugin.dependencies || [];\n depPlugins.forEach((dep) => {\n pluginsDraft.unshift(dep);\n });\n mergePluginDeps(depPlugins);\n });\n };\n mergePluginDeps(pluginsDraft);\n const pluginList = pluginsDraft.filter((item, i) => i === pluginsDraft.indexOf(item));\n\n const plugins = [];\n const pluginSet = {};\n pluginList.forEach((Plugin) => {\n const warnExist = (name) => {\n const msg = `plugin named '${name}' has been registered`;\n if (!(pluginSet[name] instanceof Plugin)) {\n console.error(msg, Plugin, pluginSet);\n }\n else {\n console.debug(msg, Plugin, pluginSet);\n }\n }\n\n const localName = givenPluginMapping.find(item => item.value === Plugin)?.key;\n if (localName && pluginSet[localName]) {\n warnExist(localName);\n return;\n }\n\n // const { displayName } = Plugin;\n // if (displayName && pluginSet[displayName]) {\n // warnExist(displayName);\n // return;\n // }\n\n const deps = (Plugin.dependencies || [])\n .map((P) => plugins.find((item) => item instanceof P));\n const plugin = new Plugin(this, deps);\n if (plugin.options) {\n objectAssign(pluginOptions, plugin.options());\n }\n if (plugin.defines) {\n objectAssign(pluginDefines, plugin.defines());\n }\n if (plugin.filters) {\n pluginFilters.push(...plugin.filters());\n }\n plugins.push(plugin);\n\n // if (displayName) {\n // pluginSet[displayName] = plugin;\n // }\n\n if (localName) {\n pluginSet[localName] = plugin;\n }\n });\n\n this._pluginList = plugins;\n this.plugins = pluginSet;\n this.options = { ...defaultOptions, ...pluginOptions, ...givenOptions };\n this.filters = [...defaultFilters, ...pluginFilters, ...givenFilters];\n\n /**\n * check required options which is not passed\n */\n const optionValues = objectValues(this.options);\n const requiredOption = optionValues.find((item) => item && item instanceof Error);\n if (requiredOption) {\n throw requiredOption;\n }\n\n /**\n * init log basic properties\n * clientId, traceId, requestId are special\n */\n\n const definitions = {\n ...pluginDefines,\n ...givenDefines,\n };\n\n this.definitions = definitions;\n this.clientId = definitions.client ? definitions.client() : createRandomString(8);\n this.traceId = definitions.trace ? definitions.trace() : createRandomString(8);\n this.requestId = createRandomString(8);\n\n const basicLog = {};\n Object.defineProperties(basicLog, map(definitions, (define) => ({\n get: isFunction(define) ? define : () => define,\n enumerable: true,\n configurable: true,\n })));\n Object.defineProperties(basicLog, {\n client: {\n get: () => this.clientId,\n enumerable: true,\n configurable: true,\n },\n trace: {\n get: () => this.traceId,\n enumerable: true,\n configurable: true,\n },\n request: {\n get: () => this.requestId,\n enumerable: true,\n configurable: true,\n },\n });\n this._basicLog = basicLog;\n\n /**\n * setup instance\n */\n\n this.invoke('init');\n this._inited = true;\n this.invoke('ready');\n\n if (this.options.autoStart) {\n this.start();\n }\n }\n\n define(key, get) {\n Object.defineProperty(this._basicLog, key, {\n get,\n enumerable: true,\n configurable: true,\n });\n }\n\n on(event, callback) {\n this._events.push([event, callback]);\n }\n\n off(event, callback) {\n this._events.forEach((item, i) => {\n if (item[0] === event && item[1] === callback) {\n this._events.splice(i, 1);\n }\n });\n }\n\n emit(event, ...args) {\n this._events.forEach((item) => {\n if (item[0] === event || item[0] === '*') {\n item[1](...args);\n }\n });\n }\n\n invoke(type, ...args) {\n const defers = [];\n for (let i = 0, len = this._pluginList.length; i < len; i += 1) {\n const plugin = this._pluginList[i];\n if (!plugin[type]) {\n continue;\n }\n if (!isFunction(plugin[type])) {\n continue;\n }\n const res = plugin[type](...args);\n if (res instanceof Promise) {\n defers.push(res);\n }\n }\n return Promise.all(defers).then(() => {});\n }\n\n refreshTraceId() {\n const prevTraceId = this.traceId;\n this.invoke('refreshTraceId');\n this.traceId = this.definitions.trace ? this.definitions.trace() : createRandomString(8);\n this.emit('refreshTraceId', { prev: prevTraceId, next: this.traceId });\n }\n\n refreshRequestId() {\n const prevRequestId = this.requestId;\n this.requestId = createRandomString(8);\n this.emit('refreshRequestId', { prev: prevRequestId, next: this.requestId });\n }\n\n start() {\n this.invoke('start');\n this.emit('start');\n }\n\n write(log) {\n if (!this._inited) {\n throw new Error('could not write before ready');\n }\n\n const data = { ...this._basicLog, ...log };\n // check wheather the log can be write into\n const { filters } = this;\n for (let i = 0, len = filters.length; i < len; i += 1) {\n const filter = filters[i];\n if (!filter(data)) {\n return;\n }\n }\n\n for (let i = 0, len = this._pluginList.length; i < len; i += 1) {\n const plugin = this._pluginList[i];\n if (isFunction(plugin.filter)) {\n if (!plugin.filter(data)) {\n continue;\n }\n }\n if (isFunction(plugin.write)) {\n plugin.write(data);\n }\n }\n\n this.emit('write', data);\n }\n\n report(message) {\n if (!this._inited) {\n throw new Error('could not report before ready');\n }\n\n let resolve, reject;\n const defer = new Promise((ro, re) => {\n resolve = ro;\n reject = re;\n });\n const signal = { message, resolve, reject };\n this._queue.push(signal);\n\n /**\n * read logs\n */\n const read = (operators) => (next) => {\n const logs = [];\n const readDefers = [];\n operators.forEach((operator) => {\n if (!operator.read) {\n return;\n }\n\n const callback = (data) => {\n operator.data = data;\n if (data?.length) {\n logs.push(...data);\n }\n };\n\n const ret = operator.read(message);\n\n if (ret instanceof Promise) {\n ret.then(callback);\n readDefers.push(ret);\n }\n else {\n callback(ret);\n }\n });\n if (readDefers.length) {\n return Promise.all(readDefers).then(() => {\n this.emit('read', message, logs);\n next(logs);\n });\n }\n else {\n this.emit('read', message, logs);\n next(logs);\n }\n };\n\n /**\n * arrange logs\n */\n const arrange = (operators) => (next, logs) => {\n const arrageDefers = [];\n operators.forEach((operator) => {\n if (!operator.arrange) {\n return;\n }\n\n const callback = (chunks) => {\n operator.chunks = chunks;\n };\n\n const ret = operator.arrange(operator.data, logs);\n\n if (ret instanceof Promise) {\n ret.then(callback);\n arrageDefers.push(ret);\n }\n else {\n callback(ret);\n }\n });\n if (arrageDefers.length) {\n return Promise.all(arrageDefers).then(() => {\n this.emit('arrage', message, operators.map((item) => item.chunks));\n next(logs);\n });\n }\n else {\n this.emit('arrage', message, operators.map((item) => item.chunks));\n next(logs);\n }\n };\n\n /**\n * send logs\n */\n const send = (operators) => (next, logs) => {\n const sendDefers = [];\n operators.forEach((operator) => {\n if (!operator.send) {\n return;\n }\n\n const chunks = operator.chunks || [logs];\n\n chunks.forEach((chunk) => {\n if (!chunk?.length) {\n return;\n }\n const ret = operator.send(chunk);\n if (ret instanceof Promise) {\n sendDefers.push(ret);\n }\n });\n });\n if (sendDefers.length) {\n return Promise.all(sendDefers).then(() => {\n this.emit('send', message, operators.map((item) => item.chunks));\n next(logs);\n });\n }\n else {\n this.emit('send', message, operators.map((item) => item.chunks));\n next(logs);\n }\n };\n\n /**\n * clear logs\n */\n const clear = (operators) => (next, logs) => {\n const clearDefers = [];\n operators.forEach((operator) => {\n if (!operator.clear) {\n return;\n }\n\n const chunks = operator.chunks || [logs];\n\n chunks.forEach((chunk) => {\n const ret = operator.clear(chunk);\n if (ret && ret instanceof Promise) {\n clearDefers.push(ret);\n }\n });\n });\n if (clearDefers.length) {\n return Promise.all(clearDefers).then(() => {\n this.emit('clear', message, operators.map((item) => item.chunks));\n next();\n });\n }\n else {\n this.emit('clear', message, operators.map((item) => item.chunks));\n next();\n }\n };\n\n this._reporting = false;\n const run = () => {\n if (this._reporting) {\n return;\n }\n\n this._reporting = true;\n\n const signal = this._queue.shift();\n if (!signal) {\n return;\n }\n\n const { message, resolve, reject } = signal;\n this.emit('report', message);\n\n const discreteOperators = [];\n const intensiveOperators = [];\n\n for (let i = 0, len = this._pluginList.length; i < len; i += 1) {\n const plugin = this._pluginList[i];\n const operator = {};\n let flag = 0;\n if (isFunction(plugin.read)) {\n operator.read = plugin.read.bind(plugin);\n flag ++;\n }\n if (isFunction(plugin.arrange)) {\n operator.arrange = plugin.arrange.bind(plugin);\n flag ++;\n }\n if (isFunction(plugin.send)) {\n operator.send = plugin.send.bind(plugin);\n flag ++;\n }\n if (isFunction(plugin.clear)) {\n operator.clear = plugin.clear.bind(plugin);\n flag ++;\n }\n\n // if a plugin has all report hooks, it means this plugin will report by itself without any other plugin's effects\n if (flag === 4) {\n intensiveOperators.push(operator);\n }\n // depend on other plugins' hook result\n else if (flag) {\n discreteOperators.push(operator);\n }\n }\n\n pipe([\n read(intensiveOperators),\n read(discreteOperators),\n arrange([...intensiveOperators, ...discreteOperators]),\n send([...intensiveOperators, ...discreteOperators]),\n clear([...intensiveOperators, ...discreteOperators]),\n ], {\n onError: reject,\n onSuccess: resolve,\n onComplete: () => {\n this._reporting = false;\n run();\n },\n });\n };\n\n run();\n\n return defer;\n }\n\n send(logs) {\n logs = isArray(logs) ? logs : [logs];\n const res = this.invoke('send', logs);\n this.emit('send', logs);\n return res;\n }\n\n stop() {\n this.invoke('stop');\n this.emit('stop');\n }\n\n static defaultOptions = {\n /**\n * whether start plugins automaticly\n */\n autoStart: true,\n };\n}\n\nfunction objectValues(obj) {\n const keys = Object.keys(obj);\n const values = keys.map(key => obj[key]);\n return values;\n}\n\nfunction objectAssign(obj1, obj2) {\n const keys = Object.keys(obj2);\n keys.forEach((key) => {\n const value = obj2[key];\n obj1[key] = value;\n });\n return obj1;\n}\n\nfunction pipe(fns, { onError, onSuccess, onComplete }) {\n let data, err;\n\n function next(arg) {\n data = arg;\n run();\n }\n\n function run() {\n if (err) {\n return;\n }\n\n const fn = fns.shift();\n\n // end\n if (!fn) {\n onSuccess();\n onComplete();\n return;\n }\n\n try {\n const ret = fn(next, data);\n if (ret instanceof Promise) {\n ret.catch((e) => {\n err = e;\n onError(e);\n onComplete();\n });\n }\n } catch (e) {\n err = e;\n onError(e);\n onComplete();\n }\n }\n\n run();\n}\n","import { each, define } from './object.js'\nimport { inObject } from './is.js'\n\n/**\n * @param {any} ins\n * @returns {boolean}\n */\nexport function getConstructorOf(ins) {\n return Object.getPrototypeOf(ins).constructor\n}\n\n/**\n * Create a new Child any which is inherited from Parent any\n * @param {any} Parent\n * @param {object} proptotypes\n * @param {object} statics\n * @returns {any}\n */\nexport function inherit(Parent, proptotypes, statics) {\n class Child extends Parent {}\n\n const name = Object.getOwnPropertyDescriptor(Parent, 'name')\n define(Child, 'name', {\n ...name,\n configurable: true,\n })\n\n if (proptotypes) {\n Object.assign(Child.prototype, proptotypes)\n Child.prototype.constructor = Child\n }\n\n each(Parent, (descriptor, key) => {\n if (statics && inObject(key, statics, true)) {\n return\n }\n define(Child, key, descriptor)\n }, true)\n\n if (statics) {\n each(statics, (descriptor, key) => {\n define(Child, key, descriptor)\n }, true)\n }\n\n return Child\n}\n\n/**\n * mix Extend into Source, (notice: will override Source)\n * @param {any} Source\n * @param {any} Extend\n * @param {any}\n */\nexport function mixin(Source, Extend) {\n each(Extend, (descriptor, key) => {\n define(Source, key, descriptor)\n }, true)\n\n each(Extend.prototype, (descriptor, key) => {\n if (key === 'constructor') {\n return\n }\n define(Source.prototype, key, descriptor)\n }, true)\n\n return Source\n}\n","export class AnysPlugin {\n constructor(anys) {\n this.anys = anys;\n this.$effects = {};\n }\n\n start() {\n // @ts-ignore\n if (!this.options) {\n return;\n }\n\n // @ts-ignore\n const options = this.options();\n const keys = Object.keys(options);\n const affect = (name) => {\n const methodName = `register${name.replace(name[0], name[0].toUpperCase())}`;\n if (this[methodName]) {\n const revoke = this[methodName]();\n this.$effects[name] = revoke;\n }\n };\n\n const stch = this.anys.options;\n keys.forEach((key) => {\n if (stch[key]) {\n affect(key);\n }\n });\n }\n\n stop() {\n // @ts-ignore\n if (!this.options) {\n return;\n }\n\n // @ts-ignore\n const options = this.options();\n const keys = Object.keys(options);\n const stch = this.anys.options;\n\n keys.forEach((key) => {\n const revoke = this.$effects[key];\n if (stch[key] && revoke) {\n revoke();\n }\n this.$effects[key] = null;\n });\n }\n}\n","import { createRandomString } from 'ts-fns';\n\nexport class AnysIdentifyPlugin {\n constructor(anys) {\n this.anys = anys;\n }\n\n options() {\n return {\n namespace: new Error('options.namespace is required!'),\n };\n }\n\n defines() {\n const defineClientId = () => {\n const { namespace } = this.anys.options;\n const key = `Anys.${namespace}.clientId`;\n let clientId = localStorage.getItem(key);\n if (!clientId) {\n clientId = createRandomString(8);\n localStorage.setItem(key, clientId);\n }\n return clientId;\n };\n\n const defineTraceId = () => {\n const { namespace } = this.anys.options;\n const key = `Anys.${namespace}.traceId`;\n let traceId = sessionStorage.getItem(key);\n if (!traceId) {\n traceId = createRandomString(8);\n sessionStorage.setItem(key, traceId);\n }\n return traceId;\n }\n\n return {\n client: defineClientId,\n trace: defineTraceId,\n };\n }\n\n refreshTraceId() {\n const { namespace } = this.anys.options;\n const key = `Anys.${namespace}.traceId`;\n const traceId = createRandomString(8);\n sessionStorage.setItem(key, traceId);\n }\n}\n","export function getPath(node, root = document.documentElement) {\n const { nodeName, path: nodePath } = node;\n\n if (nodePath) {\n return nodePath;\n }\n\n if (nodeName === 'BODY' || nodeName === 'HTML' || nodeName === 'HEAD') {\n return nodeName;\n }\n\n const path = [];\n\n let current = node;\n let parent = node.parentNode;\n\n const findIndex = (node) => {\n const { nodeName, parentNode } = node;\n // the node is not in document\n if (!parentNode) {\n return -1;\n }\n const siblings = [].filter.call(parentNode.childNodes, item => item.nodeName === nodeName);\n const index = siblings.indexOf(node);\n return index;\n };\n\n if (nodeName[0] === '#') {\n const index = findIndex(node);\n path.push(`${nodeName}:${index}`);\n current = parent;\n parent = current.parentNode;\n }\n\n while (parent) {\n if (current === root) {\n break;\n }\n const { nodeName } = current;\n if (nodeName === 'BODY' || nodeName === 'HTML' || nodeName === 'HEAD') {\n path.push(nodeName);\n }\n else {\n const index = findIndex(current);\n path.push(`${nodeName.toLowerCase()}:${index}`);\n }\n current = parent;\n parent = current.parentNode;\n }\n path.reverse();\n return path.join('/');\n}\n\nexport function findNode(selector, root = document) {\n if (!selector) {\n return root;\n }\n\n // HTML, BODY, HEAD\n if (/^[A-Z]+$/.test(selector)) {\n return root.querySelector(selector);\n }\n\n const path = selector.split('/');\n const items = path.map(item => item.split(':'));\n\n const el = items.reduce((target, [name, index]) => {\n if (!target) {\n return null;\n }\n\n if (/^[A-Z]+$/.test(name)) {\n return target.querySelector(name);\n }\n\n if (+index < 0) {\n return null;\n }\n\n const siblings = [].filter.call(target.childNodes, child => child.nodeName.toLowerCase() === name);\n const sibling = siblings[index];\n return sibling;\n }, root);\n\n if (!el) {\n return null;\n }\n\n return el;\n}\n","import { AnysPlugin, getPath } from 'anys-shared';\n\nexport class AnysMonitorInputEventPlugin extends AnysPlugin {\n options() {\n return {\n input: true,\n };\n }\n\n registerInput() {\n const extract = (filter) => (e) => {\n const {\n target, type, inputType, data,\n } = e;\n\n if (inputType === 'insertCompositionText') {\n return;\n }\n\n if (type === 'compositionend' && !data) {\n return;\n }\n\n const { tagName, value } = target;\n\n // ignore input when set data-ignore attribute\n if (target.getAttribute('data-ignore')) {\n return;\n }\n\n const elInput = target.getAttribute('type');\n\n const detailData = filter({ tagName, value, type: elInput, target });\n if (!detailData) {\n return;\n }\n\n const log = {\n type: 'input',\n time: Date.now(),\n el: getPath(target),\n detail: detailData,\n };\n this.anys.write(log);\n };\n\n const listenInput = extract(({ tagName, value, type }) => {\n if (tagName === 'INPUT' && type !== 'radio' && type !== 'checkbox' && type !== 'password') {\n return { value, type };\n }\n\n if (tagName === 'INPUT' && type === 'password') {\n return { value: '***', type };\n }\n\n if (tagName === 'TEXTAREA') {\n return { value, type: 'textarea' };\n }\n });\n\n const listenChange = extract(({ tagName, value, type }) => {\n if (tagName === 'SELECT') {\n return { value, type: 'select' };\n }\n\n if (tagName === 'INPUT' && (type === 'radio' || type === 'checkbox')) {\n return { value, type };\n }\n });\n\n const listenPaste = extract(({ tagName, value, type }) => {\n if (tagName === 'TEXTAREA') {\n return { value, type: 'textarea' };\n }\n\n if (tagName === 'INPUT') {\n return { value, type };\n }\n });\n\n document.addEventListener('input', listenInput, true);\n document.addEventListener('compositionend', listenInput, true);\n document.addEventListener('change', listenChange, true);\n document.addEventListener('paste', listenPaste, true);\n\n return () => {\n document.removeEventListener('input', listenInput);\n document.removeEventListener('compositionend', listenInput);\n document.removeEventListener('change', listenChange);\n document.removeEventListener('paste', listenPaste);\n };\n }\n}\n","import { AnysPlugin, getPath } from 'anys-shared';\n\nexport class AnysMonitorMouseEventPlugin extends AnysPlugin {\n options() {\n const isSupportTouch = 'ontouchend' in document;\n return {\n mouse: !isSupportTouch,\n click: true,\n mousemove: false,\n mousedown: false,\n mouseup: false,\n wheel: false,\n contextmenu: false,\n };\n }\n\n addEventListener(event, throttle) {\n if (!this.anys.options.mouse) {\n return;\n }\n\n const listener = this.createThrottleListener((e) => {\n const { innerWidth, innerHeight } = window;\n const {\n target, button,\n pageX, pageY,\n } = e;\n const log = {\n type: event,\n time: Date.now(),\n detail: {\n e: getPath(target),\n w: innerWidth,\n h: innerHeight,\n x: pageX,\n y: pageY,\n button,\n },\n };\n return log;\n }, throttle);\n document.addEventListener(event, listener, true);\n return () => document.removeEventListener(event, listener);\n }\n\n registerClick() {\n return this.addEventListener('click');\n }\n\n registerMouseup() {\n return this.addEventListener('mouseup');\n }\n\n registerMousedown() {\n return this.addEventListener('mousedown');\n }\n\n registerContextmenu() {\n return this.addEventListener('contextmenu');\n }\n\n registerMousemove() {\n return this.addEventListener('mousemove', 100);\n }\n\n registerWheel() {\n if (!this.anys.options.mouse) {\n return;\n }\n\n const type = 'wheel';\n const listener = this.createThrottleListener((e) => {\n const {\n target,\n deltaX,\n deltaY,\n deltaZ,\n deltaMode,\n } = e;\n const log = {\n type,\n time: Date.now(),\n detail: {\n e: getPath(target),\n deltaX,\n deltaY,\n deltaZ,\n mode: deltaMode,\n },\n };\n return log;\n }, 100);\n document.addEventListener(type, listener);\n return () => document.removeEventListener(type, listener);\n }\n\n createThrottleListener(createLog, throttle) {\n let ticking = 0;\n let time = 0;\n const listener = (e) => {\n if (ticking) {\n return;\n }\n\n const now = Date.now();\n if (throttle && time + throttle > now) {\n return;\n }\n\n const log = createLog(e);\n requestAnimationFrame(() => {\n this.anys.write(log);\n ticking = 0;\n time = Date.now();\n });\n\n ticking = 1;\n };\n return listener;\n }\n}\n","import { AnysPlugin } from 'anys-shared';\n\nconst enterLog = {\n type: 'window_activity.enter',\n time: Date.now(),\n};\n\nexport class AnysMonitorWindowActivityPlugin extends AnysPlugin {\n options() {\n return {\n activity: true,\n deadTimeout: 0,\n };\n }\n\n ready() {\n if (this.anys.options.activity) {\n // record right now\n this.anys.write(enterLog);\n }\n }\n\n registerActivity() {\n const onvisibilitychange = () => {\n if (document.visibilityState === 'hidden') {\n const log = {\n type: 'window_activity.focusout',\n time: Date.now(),\n };\n this.anys.write(log);\n } else {\n const log = {\n type: 'window_activity.focusin',\n time: Date.now(),\n };\n this.anys.write(log);\n }\n };\n\n // TODO 此时立即就要卸载了,应该尝试阻塞一下\n const onunload = () => {\n const log = {\n type: 'window_activity.unload',\n time: Date.now(),\n };\n this.anys.write(log);\n };\n\n window.addEventListener('beforeunload', onunload, true);\n document.addEventListener('visibilitychange', onvisibilitychange, true);\n\n return () => {\n window.removeEventListener('beforeunload', onunload);\n document.removeEventListener('visibilitychange', onvisibilitychange);\n };\n }\n\n registerDeadTimeout() {\n const { deadTimeout } = this.anys.options;\n if (!deadTimeout) {\n return;\n }\n\n let timer;\n const listener = () => {\n clearTimeout(timer);\n timer = setTimeout(() => {\n const log = {\n type: 'window_activity.dead',\n time: Date.now(),\n };\n this.anys.write(log);\n\n // @ts-ignore\n }, deadTimeout);\n };\n\n document.addEventListener('keydown', listener, true);\n document.addEventListener('mousedown', listener, true);\n document.addEventListener('touchstart', listener, true);\n document.addEventListener('touchmove', listener, true);\n document.addEventListener('mousemove', listener, true);\n document.addEventListener('scroll', listener, true);\n window.addEventListener('resize', listener, true);\n\n return () => {\n document.removeEventListener('keydown', listener);\n document.removeEventListener('mousedown', listener);\n document.removeEventListener('touchstart', listener);\n document.removeEventListener('touchmove', listener);\n document.removeEventListener('mousemove', listener);\n document.removeEventListener('scroll', listener);\n window.removeEventListener('resize', listener);\n };\n }\n}\n","import { AnysPlugin } from 'anys-shared';\n\nexport class AnysMonitorUrlPlugin extends AnysPlugin {\n options() {\n return {\n url: true,\n };\n }\n\n registerUrl() {\n const listener = () => {\n this.recordUrl();\n };\n\n window.addEventListener('hashchange', listener);\n window.addEventListener('popstate', listener);\n\n // 一启动就记录一次\n this.recordUrl();\n\n return () => {\n window.removeEventListener('hashchange', listener);\n window.removeEventListener('popstate', listener);\n };\n }\n\n recordUrl() {\n const url = window.location.href;\n const a = new URL(url);\n const path = a.pathname.replace(/^([^/])/, '/$1');\n const log = {\n type: 'url',\n time: Date.now(),\n url,\n detail: {\n uri: path + (a.search ? `?${a.search}` : ''),\n path,\n protocol: a.protocol.replace(':', ''),\n host: a.hostname,\n port: a.port,\n search: a.search,\n hash: a.hash.replace('#', ''),\n },\n };\n this.anys.write(log);\n }\n}\n","import { AnysPlugin, getPath } from 'anys-shared';\n\nexport class AnysMonitorTouchEventPlugin extends AnysPlugin {\n options() {\n const isSupportTouch = 'ontouchend' in document;\n return {\n touch: isSupportTouch,\n touchstart: isSupportTouch,\n touchend: isSupportTouch,\n touchmove: isSupportTouch,\n };\n }\n\n addEventListener(event) {\n if (!this.anys.options.touch) {\n return;\n }\n\n let ticking = 0;\n\n const listener = (e) => {\n if (ticking) {\n return;\n }\n\n const { innerWidth, innerHeight } = window;\n const {\n target, identifier, force,\n pageX, pageY,\n } = e;\n const log = {\n type: event,\n time: Date.now(),\n detail: {\n e: getPath(target),\n width: innerWidth,\n height: innerHeight,\n x: pageX,\n y: pageY,\n identifier,\n force,\n },\n };\n\n requestAnimationFrame(() => {\n this.anys.write(log);\n ticking = 0;\n });\n\n ticking = 1;\n };\n\n document.addEventListener(event, listener, true);\n\n return () => document.removeEventListener(event, listener);\n }\n\n registerTouchmove() {\n return this.addEventListener('touchmove');\n }\n\n registerTouchend() {\n return this.addEventListener('touchend');\n }\n\n registerTouchstart() {\n return this.addEventListener('touchstart');\n }\n}\n","export class AsyncQueue {\n constructor() {\n this.queue = [];\n this.status = 0;\n }\n\n push(runner) {\n let resolve; let\n reject;\n const defer = new Promise((rs, rj) => {\n resolve = rs;\n reject = rj;\n });\n const item = {\n runner,\n resolve,\n reject,\n };\n this.queue.push(item);\n\n const run = () => {\n setTimeout(() => {\n if (!this.queue.length) {\n this.status = 0;\n return;\n }\n\n const { runner: fn, resolve: rs, reject: rj } = this.queue.shift();\n fn().then(rs, rj).finally(run);\n }, 0);\n this.status = 1;\n };\n\n if (!this.status) {\n run();\n }\n\n return defer;\n }\n}\n","export class InDB {\n\t/**\n\t * InDB\n\t * @param {object} [options]\n\t * @param {string} [options.name] database name\n\t * @param {number} [options.version] database version\n\t * @param {object[]} [options.stores]\n\t * @param {string} [options.stores[].name] store name\n\t * @param {string} [options.stores[].primaryKeyPath] store primary keyPath\n\t * @param {boolean} [options.stores[].autoIncrement] is store primary keyPath autoIncrement, if true, primary key will be number\n\t * @param {boolean} [options.stores[].isKv] is store set to be Key-Value mode, if true, the store will have Storage methods, and `primaryKeyPath` `autoIncrement` not working\n\t * @param {object[]} [options.stores[].indexes]\n\t * @param {string} [options.stores[].indexes[].name] index name\n\t * @param {string} [options.stores[].indexes[].keyPath] index keyPath\n\t * @param {boolean} [options.stores[].indexes[].unique] should index value be unique\n\t * @returns\n\t */\n\tconstructor(options = {}) {\n\t\tlet { name, version = 1, stores } = options\n\t\tconst asStorage = !name\n\n\t\tif (!name) {\n\t\t\tname = '__indb__'\n\t\t}\n\n\t\tif (!stores || !Array.isArray(stores) || !stores.length) {\n\t\t\tstores = [\n\t\t\t\t{\n\t\t\t\t\tname: '__indb__',\n\t\t\t\t\tisKv: true,\n\t\t\t\t},\n\t\t\t]\n\t\t}\n\n\t\tthis.cache = {}\n\t\tthis.connection = null\n\n\t\tthis.name = name\n\t\tthis.version = version\n\t\tthis.stores = stores\n\n\t\t// update database structure\n\t\tconst request = indexedDB.open(name, version)\n\t\trequest.onupgradeneeded = (e) => {\n\t\t\t// @ts-ignore\n\t\t\tconst db = e.target.result\n\t\t\tconst existStoreNames = Array.from(db.objectStoreNames)\n\t\t\tconst passStoreNames = []\n\n\t\t\tstores.forEach((item) => {\n\t\t\t\tlet objectStore = null\n\t\t\t\tif (existStoreNames.indexOf(item.name) > -1) {\n\t\t\t\t\t// @ts-ignore\n\t\t\t\t\tobjectStore = e.target.transaction.objectStore(item.name)\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tconst keyPath = item.isKv ? 'key' : item.primaryKeyPath\n\t\t\t\t\tconst autoIncrement = item.isKv ? false : item.autoIncrement\n\t\t\t\t\tobjectStore = db.createObjectStore(item.name, { keyPath, autoIncrement })\n\t\t\t\t}\n\n\t\t\t\t// delete old indexes\n\t\t\t\tconst indexNames = objectStore.indexNames\n\t\t\t\tif (indexNames && indexNames.length) {\n\t\t\t\t\tArray.from(indexNames).forEach((item) => objectStore.deleteIndex(item))\n\t\t\t\t}\n\n\t\t\t\t// add new indexes\n\t\t\t\tif (item.indexes && item.indexes.length) {\n\t\t\t\t\titem.indexes.forEach((item) => {\n\t\t\t\t\t\tobjectStore.createIndex(item.name, item.keyPath || item.name, { unique: item.unique, multiEntry: Array.isArray(item.keyPath) })\n\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\tpassStoreNames.push(item.name)\n\t\t\t})\n\n\t\t\t// delete objectStores which is not in config information\n\t\t\t// notice, developers should backup data firstly\n\t\t\tif (existStoreNames) {\n\t\t\t\texistStoreNames.forEach((item) => {\n\t\t\t\t\tif (passStoreNames.indexOf(item) === -1) {\n\t\t\t\t\t\tdb.deleteObjectStore(item)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t\trequest.onblocked = (e) => {\n\t\t\tconsole.error(modifyError(new Error('indexedDB ' + name + ' is blocked')))\n\t\t}\n\n\t\t// use as a storage like:\n\t\t// const store = new InDB()\n\t\t// store.setItem('key', 'value')\n\t\tif (asStorage) {\n\t\t\t// @ts-ignore\n\t\t\treturn this.use(name)\n\t\t}\n\t}\n\n\tconnect() {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst request = indexedDB.open(this.name, this.version)\n\t\t\trequest.onerror = (e) => {\n\t\t\t\treject(modifyError(e))\n\t\t\t}\n\t\t\trequest.onsuccess = (e) => {\n\t\t\t\t// @ts-ignore\n\t\t\t\tresolve(e.target.result)\n\t\t\t}\n\t\t})\n\t}\n\n\t/**\n\t *\n\t * @param {string} name\n\t * @returns {InDBStore}\n\t */\n\tuse(name) {\n\t\tconst currentStore = this.stores.find(item => item.name === name)\n\n\t\tif (!currentStore) {\n\t\t\tthrow new Error(`[InDB]: store ${name} is not existing.`)\n\t\t}\n\n\t\t// use connected store\n\t\tif (this.cache[name]) {\n\t\t\treturn this.cache[name]\n\t\t}\n\n\t\tconst store = new InDBStore({\n\t\t\tdb: this,\n\t\t\tstore: currentStore,\n\t\t})\n\n\t\t// if it is a key-value store, append special methods\n\t\tif (currentStore.isKv) {\n\t\t\tObject.defineProperties(store, {\n\t\t\t\tkey: {\n\t\t\t\t\tvalue: i => store.keys().then(keys => keys && keys[i]),\n\t\t\t\t},\n\t\t\t\tgetItem: {\n\t\t\t\t\tvalue: key => store.get(key).then(obj => obj && obj.value),\n\t\t\t\t},\n\t\t\t\tsetItem: {\n\t\t\t\t\tvalue: (key, value) => store.put({ key, value }),\n\t\t\t\t},\n\t\t\t\tremoveItem: {\n\t\t\t\t\tvalue: key => store.delete(key),\n\t\t\t\t},\n\t\t\t})\n\t\t}\n\n\t\tthis.cache[name] = store\n\n\t\treturn store\n\t}\n\n\tclose() {\n\t\tthis.cache = null\n\t\tthis.stores = null\n\n\t\treturn this.connect().then((db) => {\n\t\t\tdb.close()\n\t\t})\n\t}\n\n\tstatic deleteDatabase(name) {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst request = indexedDB.deleteDatabase(name)\n\t\t\trequest.onsuccess = () => {\n\t\t\t\tresolve()\n\t\t\t}\n\t\t\trequest.onerror = (e) => {\n\t\t\t\treject(e)\n\t\t\t}\n\t\t})\n\t}\n\n\tstatic databases() {\n\t\treturn indexedDB.databases()\n\t}\n}\n\nexport default InDB\n\nclass InDBStore {\n\tconstructor(options = {}) {\n\t\tconst { store, db } = options\n\n\t\tif (typeof store !== 'object' || !store.name || typeof store.name !== 'string') {\n\t\t\tthrow new Error(`[InDBStore]: options.store should be a store config object.`)\n\t\t}\n\n\t\tif (!(db instanceof InDB)) {\n\t\t\tthrow new Error(`[InDBStore]: options.db should be an instanceof InDB.`)\n\t\t}\n\n\t\tthis.db = db\n\n\t\tthis.store = store\n\t\tthis.name = store.name\n\t\tthis.primaryKeyPath = store.isKv ? 'key' : store.primaryKeyPath\n\n\t\tthis._queue = []\n\t}\n\n\ttransaction(writable = false) {\n\t\tconst create = () => {\n\t\t\tconst name = this.name\n\t\t\tconst mode = writable ? 'readwrite' : 'readonly'\n\n\t\t\t// share the same connection\n\t\t\tconst connection = this.db.connection\n\t\t\tconst deferer = connection ? Promise.resolve(connection) : this.db.connect()\n\t\t\treturn deferer.then((db) => {\n\t\t\t\tthis.db.connection = db\n\t\t\t\tconst tx = db.transaction(name, mode)\n\t\t\t\tconst disconnect = () => {\n\t\t\t\t\tthis.db.connection = null\n\t\t\t\t\tthis._queue.shift()\n\t\t\t\t}\n\t\t\t\ttx.oncomplete = disconnect\n\t\t\t\ttx.onabort = disconnect\n\t\t\t\ttx.onerror = disconnect\n\t\t\t\treturn tx\n\t\t\t})\n\t\t}\n\n\t\tconst latest = this._queue[this._queue.length - 1]\n\t\tconst deferer = latest ? latest.then(() => create()) : create()\n\t\tthis._queue.push(deferer)\n\t\treturn deferer\n\t}\n\n\tobjectStore(writable = false) {\n\t\tconst name = this.name\n\t\treturn this.transaction(writable).then(tx => tx.objectStore(name))\n\t}\n\n\tcursor(options) {\n\t\tconst { index, range, direction, onTouch, onDone, onError, writable = false } = options\n\t\treturn this.objectStore(writable).then((objectStore) => {\n\t\t\tconst owner = index ? objectStore.index(index) : objectStore\n\t\t\tconst request = owner.openCursor(range, direction)\n\t\t\trequest.onsuccess = (e) => {\n\t\t\t\tconst cursor = e.target.result\n\t\t\t\tif (cursor) {\n\t\t\t\t\tonTouch(cursor, owner)\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tonDone(cursor, owner)\n\t\t\t\t}\n\t\t\t}\n\t\t\trequest.onerror = (e) => {\n\t\t\t\tonError(modifyError(e))\n\t\t\t}\n\t\t})\n\t}\n\n\trequest(fn, options = {}) {\n\t\tconst { writable = false } = options\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tthis.objectStore(writable).then((objectStore) => {\n\t\t\t\tconst request = fn(objectStore)\n\t\t\t\trequest.onsuccess = (e) => {\n\t\t\t\t\tconst result = e.target.result\n\t\t\t\t\tresolve(result)\n\t\t\t\t}\n\t\t\t\trequest.onerror = (e) => {\n\t\t\t\t\treject(modifyError(e))\n\t\t\t\t}\n\t\t\t})\n\t\t})\n\t}\n\n\titerate(fn, options = {}) {\n\t\tconst { index, range, writable = false, direction = 'next' } = options\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tthis.cursor({\n\t\t\t\tindex,\n\t\t\t\trange,\n\t\t\t\twritable,\n\t\t\t\tdirection,\n\t\t\t\tonTouch: (cursor, owner) => {\n\t\t\t\t\tconst next = () => cursor.continue()\n\t\t\t\t\tconst stop = () => {\n\t\t\t\t\t\t// should commit when writable is true\n\t\t\t\t\t\towner.transaction.commit()\n\t\t\t\t\t\tresolve()\n\t\t\t\t\t}\n\t\t\t\t\tfn(cursor, next, stop)\n\t\t\t\t},\n\t\t\t\tonDone: () => {\n\t\t\t\t\tresolve()\n\t\t\t\t},\n\t\t\t\tonError: (e) => {\n\t\t\t\t\treject(e)\n\t\t\t\t},\n\t\t\t})\n\t\t})\n\t}\n\n\tbatch(fns, options = {}) {\n\t\tconst { writable = true } = options\n\t\treturn this.transaction(writable).then((tx) => {\n\t\t\tconst name = this.name\n\t\t\tconst promises = []\n\t\t\tconst objectStore = tx.objectStore(name)\n\t\t\tfns.forEach((fn) => {\n\t\t\t\tconst deferer = new Promise((resolve, reject) => {\n\t\t\t\t\tconst request = fn(objectStore)\n\t\t\t\t\trequest.onsuccess = (e) => {\n\t\t\t\t\t\tconst result = e.target.result\n\t\t\t\t\t\tresolve(result)\n\t\t\t\t\t}\n\t\t\t\t\trequest.onerror = (e) => {\n\t\t\t\t\t\treject(modifyError(e))\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\tpromises.push(deferer)\n\t\t\t})\n\t\t\treturn Promise.all(promises)\n\t\t})\n\t}\n\n\t// ==========================================\n\n\t/**\n\t *\n\t * @param {string} key\n\t * @returns\n\t */\n\tget(key) {\n\t\t// single key\n\t\tif (!Array.isArray(key)) {\n\t\t\treturn this.request(objectStore => objectStore.get(key))\n\t\t}\n\n\t\t// multiple keys\n\t\tconst keys = key\n\t\tconst fns = keys.map(key => objectStore => objectStore.get(key))\n\t\treturn this.batch(fns, { writable: false })\n\t}\n\n\tkeys() {\n\t\tconst keyPath = this.primaryKeyPath\n\t\tconst results = []\n\t\treturn this.each((obj) => {\n\t\t\tconst key = parse(obj, keyPath)\n\t\t\tresults.push(key)\n\t\t}).then(() => {\n\t\t\treturn results\n\t\t})\n\t}\n\n\tall() {\n\t\tconst results = []\n\t\treturn this.each((obj) => {\n\t\t\tresults.push(obj)\n\t\t}).then(() => {\n\t\t\treturn results\n\t\t})\n\t}\n\n\tcount() {\n\t\treturn this.request(objectStore => objectStore.count())\n\t}\n\n\t// ==========================================\n\n\teach(fn) {\n\t\treturn this.iterate((cursor, next) => {\n\t\t\tconst obj = cursor.value\n\t\t\tfn(obj)\n\t\t\tnext()\n\t\t})\n\t}\n\n\treverse(fn) {\n\t\treturn this.iterate((cursor, next) => {\n\t\t\tconst obj = cursor.value\n\t\t\tfn(obj)\n\t\t\tnext()\n\t\t}, { direction: 'prev' })\n\t}\n\n\tsome(count = 10, offset = 0) {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst results = []\n\t\t\tlet i = 0\n\t\t\tlet start = offset\n\t\t\tlet end = offset + count\n\t\t\tlet direction\n\n\t\t\t// offset < 0, means begining from the latest item,\n\t\t\t// for example, offset = -1, means begining from the last item\n\t\t\tif (offset < 0) {\n\t\t\t\tdirection = 'prev'\n\t\t\t\tcount = Math.min(count, -offset)\n\t\t\t\tstart = -(offset + count) || 0\n\t\t\t\tend = start + count\n\t\t\t}\n\n\t\t\tthis.iterate((cursor, next, stop) => {\n\t\t\t\tif (i < start) {\n\t\t\t\t\ti ++\n\t\t\t\t\tnext()\n\t\t\t\t}\n\t\t\t\telse if (i < end) {\n\t\t\t\t\tresults.push(cursor.value)\n\t\t\t\t\ti ++\n\t\t\t\t\tnext()\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tstop()\n\t\t\t\t}\n\t\t\t}, { direction }).then(() => {\n\t\t\t\tif (offset < 0) {\n\t\t\t\t\tresults.reverse()\n\t\t\t\t}\n\t\t\t\tresolve(results)\n\t\t\t}).catch(reject)\n\t\t})\n\t}\n\n\tfirst() {\n\t\treturn this.some(1).then(items => items[0])\n\t}\n\n\tlast() {\n\t\treturn this.some(1, -1).then(items => items[0])\n\t}\n\n\t// =========================\n\n\t/**\n\t * find a record with given index\n\t * @param {string} key index name\n\t * @param {*} value\n\t * @returns\n\t */\n\tfind(key, value) {\n\t\treturn this.request(objectStore => objectStore.index(key).get(value))\n\t}\n\t/**\n\t * query several records with given index and compare condition\n\t * @param {string} key index name\n\t * @param {*} value\n\t * @param {string} [compare]\n\t * @returns\n\t */\n\tquery(key, value, compare) {\n\t\tconst range = (function() {\n\t\t\tswitch (compare) {\n\t\t\t\tcase '>':\n\t\t\t\t\treturn IDBKeyRange.lowerBound(value, true)\n\t\t\t\tcase '>=':\n\t\t\t\t\treturn IDBKeyRange.lowerBound(value)\n\t\t\t\tcase '<':\n\t\t\t\t\treturn IDBKeyRange.upperBound(value, true)\n\t\t\t\tcase '<=':\n\t\t\t\t\treturn IDBKeyRange.upperBound(value)\n\t\t\t\tcase '%':\n\t\t\t\tcase '!=':\n\t\t\t\tcase 'in':\n\t\t\t\t\treturn undefined\n\t\t\t\tdefault:\n\t\t\t\t\treturn IDBKeyRange.only(value)\n\t\t\t}\n\t\t}())\n\n\t\tconst results = []\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tthis.cursor({\n\t\t\t\tindex: key,\n\t\t\t\trange,\n\t\t\t\tonTouch: (cursor, owner) => {\n\t\t\t\t\tconst targetObj = cursor.value\n\t\t\t\t\tconst keyPath = owner.keyPath\n\t\t\t\t\tconst targetValue = parse(targetObj, keyPath)\n\n\t\t\t\t\tif (compare === '!=') {\n\t\t\t\t\t\tif (targetValue !== value) {\n\t\t\t\t\t\t\tresults.push(targetObj)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse if (compare === '%') {\n\t\t\t\t\t\tif (typeof targetValue == 'string' && targetValue.indexOf(value) > -1) {\n\t\t\t\t\t\t\tresults.push(targetObj)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse if (compare === 'in') {\n\t\t\t\t\t\tif (Array.isArray(value) && value.indexOf(targetValue) > -1) {\n\t\t\t\t\t\t\tresults.push(targetObj)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tresults.push(targetObj)\n\t\t\t\t\t}\n\n\t\t\t\t\tcursor.continue()\n\t\t\t\t},\n\t\t\t\tonDone: () => {\n\t\t\t\t\tresolve(results)\n\t\t\t\t},\n\t\t\t\tonError: (e) => {\n\t\t\t\t\treject(e)\n\t\t\t\t},\n\t\t\t})\n\t\t})\n\t}\n\n\t/**\n\t * query several records with conditions,\n\t * notice that, it works with iterator not with index.\n\t * @param {...object[]} rules\n\t * @param {string} rules[][].key index name or any keyPath.\n\t * @param {*} rules[][].value\n\t * @param {string=} rules[][].compare\n\t * @param {boolean=} rules[][].optional whether this condition is optional\n\t * @returns\n\t */\n\tselect(...rules) {\n\t\tconst currentStore = this.store\n\t\tconst indexes = currentStore.indexes || []\n\t\tconst indexesMapping = {}\n\t\tindexes.forEach((item) => {\n\t\t\tconst { name, keyPath } = item\n\t\t\tindexesMapping[name] = keyPath\n\t\t})\n\n\t\tconst compareAandB = function(a, b, compare) {\n\t\t\tif (a === undefined) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tswitch (compare) {\n\t\t\t\tcase '>':\n\t\t\t\t\treturn a > b\n\t\t\t\tcase '>=':\n\t\t\t\t\treturn a >= b\n\t\t\t\tcase '<':\n\t\t\t\t\treturn a < b\n\t\t\t\tcase '<=':\n\t\t\t\t\treturn a <= b\n\t\t\t\tcase '!=':\n\t\t\t\t\treturn a !== b\n\t\t\t\tcase '%':\n\t\t\t\t\treturn typeof a === 'string' && a.indexOf(b) > -1\n\t\t\t\tcase 'in':\n\t\t\t\t\treturn Array.isArray(b) && b.indexOf(a) > -1\n\t\t\t\tdefault:\n\t\t\t\t\treturn a === b\n\t\t\t}\n\t\t}\n\n\t\tconst determine = function(obj, and_conditions, or_conditions) {\n\t\t\tif (!and_conditions.length && !or_conditions.length) {\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\tfor (let i = 0, len = and_conditions.length; i < len; i ++) {\n\t\t\t\tconst { keyPath, value, compare } = and_conditions[i]\n\t\t\t\tconst current = parse(obj, keyPath)\n\t\t\t\tif (!compareAandB(current, value, compare)) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!or_conditions.length) {\n\t\t\t\treturn true\n\t\t\t}\n\n\t\t\tfor (let i = 0, len = or_conditions.length; i < len; i ++) {\n\t\t\t\tconst { keyPath, value, compare } = or_conditions[i]\n\t\t\t\tconst current = parse(obj, keyPath)\n\t\t\t\tif (compareAandB(current, value, compare)) {\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn false\n\t\t}\n\n\t\tconst groups = []\n\t\trules.forEach((conditions) => {\n\t\t\tconst or_conditions = []\n\t\t\tconst and_conditions = []\n\t\t\tfor (let i = 0, len = conditions.length; i < len; i ++) {\n\t\t\t\tconst { key, value, compare, optional } = conditions[i]\n\t\t\t\tconst keyPath = indexesMapping[key] || key // if there is not such index, use original key as keyPath\n\t\t\t\tif (optional) {\n\t\t\t\t\tor_conditions.push({ keyPath, value, compare })\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tand_conditions.push({ keyPath, value, compare })\n\t\t\t\t}\n\t\t\t}\n\t\t\tgroups.push([and_conditions, or_conditions])\n\t\t})\n\n\t\tconst isOk = (obj) => {\n\t\t\tfor (let i = 0, len = groups.length; i < len; i ++) {\n\t\t\t\tconst [and_conditions, or_conditions] = groups[i]\n\t\t\t\tconst res = determine(obj, and_conditions, or_conditions)\n\t\t\t\tif (res) {\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false\n\t\t}\n\n\t\tconst results = []\n\t\treturn this.each((obj) => {\n\t\t\tif (isOk(obj)) {\n\t\t\t\tresults.push(obj)\n\t\t\t}\n\t\t}).then(() => {\n\t\t\treturn results\n\t\t})\n\t}\n\n\t// =====================================\n\n\t/**\n\t * add a record into store\n\t * @param {*} obj\n\t * @param {string} [key]\n\t * @returns\n\t */\n\tadd(obj, key) {\n\t\tif (Array.isArray(obj)) {\n\t\t\tconst objs = obj\n\t\t\tif (objs.length < 2) {\n\t\t\t\treturn this.add(obj[0], key)\n\t\t\t}\n\n\t\t\tconst fns = objs.map(obj => objectStore => objectStore.add(obj, key))\n\t\t\treturn this.batch(fns)\n\t\t}\n\n\t\tif (!obj) {\n\t\t\treturn Promise.resolve()\n\t\t}\n\n\t\treturn this.request(objectStore => objectStore.add(obj, key), { writable: true })\n\t}\n\n\t/**\n\t *\n\t * @param {*} obj\n\t * @param {string} [key] if not pass, primaryKey will read from obj\n\t * @returns\n\t */\n\tput(obj, key) {\n\t\tif (Array.isArray(obj)) {\n\t\t\tconst objs = obj\n\t\t\tif (objs.length < 2) {\n\t\t\t\treturn this.put(objs[0], key)\n\t\t\t}\n\n\t\t\tconst fns = objs.map(obj => objectStore => objectStore.put(obj, key))\n\t\t\treturn this.batch(fns)\n\t\t}\n\n\t\tif (!obj) {\n\t\t\treturn Promise.resolve()\n\t\t}\n\n\t\treturn this.request(objectStore => objectStore.put(obj, key), { writable: true })\n\t}\n\n\tdelete(key) {\n\t\tif (Array.isArray(key)) {\n\t\t\tconst keys = key\n\t\t\tif (keys.length < 2) {\n\t\t\t\treturn this.delete(keys[0])\n\t\t\t}\n\n\t\t\tconst fns = keys.map(key => objectStore => objectStore.delete(key))\n\t\t\treturn this.batch(fns)\n\t\t}\n\n\t\tif (!key) {\n\t\t\treturn Promise.resolve()\n\t\t}\n\n\t\treturn this.request(objectStore => objectStore.delete(key), { writable: true })\n\t}\n\n\tremove(obj) {\n\t\tconst keyPath = this.primaryKeyPath\n\n\t\tif (Array.isArray(obj)) {\n\t\t\tconst objs = obj\n\t\t\tif (objs.length < 2) {\n\t\t\t\treturn this.remove(objs[0])\n\t\t\t}\n\n\t\t\tconst fns = objs.map(obj => {\n\t\t\t\tconst key = parse(obj, keyPath)\n\t\t\t\treturn objectStore => objectStore.delete(key)\n\t\t\t})\n\t\t\treturn this.batch(fns)\n\t\t}\n\n\t\tif (!obj) {\n\t\t\treturn Promise.resolve()\n\t\t}\n\n\t\tconst key = parse(obj, keyPath)\n\t\tif (!key) {\n\t\t\treturn Promise.resolve()\n\t\t}\n\n\t\treturn this.delete(key)\n\t}\n\n\tclear() {\n\t\treturn this.request(objectStore => objectStore.clear(), { writable: true })\n\t}\n}\n\nfunction makeKeyChain(path) {\n\tlet chain = path.toString().split(/\\.|\\[|\\]/).filter(item => !!item)\n\treturn chain\n}\n\nfunction parse(obj, path) {\n\tif (typeof path === 'undefined' || path === null) {\n\t return;\n\t}\n\n\tif (Array.isArray(path)) {\n\t for (let i = 0, len = path.length; i < len; i ++) {\n\t\tconst item = path[i]\n\t\tconst res = parse(obj, item)\n\t\tif (res !== undefined) {\n\t\t return res\n\t\t}\n\t }\n\t return\n\t}\n\n\tlet chain = makeKeyChain(path)\n\n\tif (!chain.length) {\n\t return obj\n\t}\n\n\tlet target = obj\n\tfor (let i = 0, len = chain.length; i < len; i ++) {\n\t let key = chain[i]\n\t if (target[key] === undefined) {\n\t\treturn\n\t }\n\t target = target[key]\n\t}\n\treturn target\n}\n\nfunction modifyError(e) {\n\tconst { message } = e\n\te.message = message.indexOf('[IndexedDB]') === -1 ? '[IndexedDB]: ' + message : message\n\treturn e\n}\n","import { AsyncQueue } from 'anys-shared';\nimport { InDB } from 'indb/es/index.js';\n\nexport class AnysStoreOfflinePlugin {\n constructor(anys) {\n this.anys = anys;\n this.queue = new AsyncQueue();\n }\n\n options() {\n return {\n namespace: new Error('options.namespace is required!'),\n /**\n * offline log will close autoReport as default,\n * developers should must invoke anys.send to send logs to server side during\n * which should use this.[offlineLogger].select to pick logs,\n * and this.[offlineLogger].remove to clear logs\n */\n autoReport: false,\n /**\n * a offline log will be delete after how long time,\n * default 2 day (48 hours)\n */\n expireTime: 3600000 * 48,\n };\n }\n\n init() {\n const storeName = 'logs';\n const idb = new InDB({\n name: this.anys.options.namespace,\n version: 2,\n stores: [\n {\n name: storeName,\n primaryKeyPath: '_id',\n autoIncrement: true,\n },\n ],\n });\n this.db = idb.use(storeName);\n }\n\n ready() {\n /**\n * clear logs which should be delete from db\n */\n const { expireTime } = this.anys.options;\n if (expireTime) {\n let offset = 0;\n const timer = setInterval(() => {\n this.queue\n .push(() => this.db.some(100, offset))\n .then((logs) => {\n if (!logs.length) {\n // @ts-ignore\n clearInterval(timer);\n return;\n }\n const curr = Date.now();\n const ids = [];\n logs.forEach((log) => {\n const { _id, time } = log;\n if (curr - time > expireTime) {\n ids.push(_id);\n }\n });\n if (ids.length) {\n this.queue.push(() => this.db.delete(ids));\n }\n offset += 100;\n offset -= ids.length;\n });\n }, 10000);\n }\n }\n\n write(data) {\n this.queue\n .push(() => this.db.add(data))\n .then((id) => {\n this.anys.emit('writeOfflineLog', { id, data });\n });\n }\n\n /**\n * select records from db\n * anys.report([\n * { key: 'time', value: Date.now() - 3600000, compare: '>' },\n * { key: 'trace', value: 'xxx' },\n * ]);\n * https://github.com/tangshuang/indb#select\n * @param {Array} message\n * @returns\n */\n read(message) {\n if (!message) {\n message = [\n { key: 'client', value: this.anys.clientId },\n { key: 'trace', value: this.anys.traceId },\n ];\n }\n else if (!Array.isArray(message)) {\n return;\n }\n else if (message.some(item => !item.key)) {\n return;\n }\n return this.select(message);\n }\n\n clear(logs) {\n return this.queue.push(() => this.db.remove(logs)).catch(() => {});\n }\n\n /**\n * select records from db\n * https://github.com/tangshuang/indb#select\n * @param {Array} conditions\n * @returns\n */\n select(conditions) {\n return this.queue.push(() => this.db.select(conditions));\n }\n\n /**\n * delete records from db\n * @param {number|Array<number>} ids\n * @returns\n */\n remove(ids) {\n return this.queue.push(() => this.db.delete(ids)).catch(() => {});\n }\n}\n","import { AnysPlugin, getPath } from 'anys-shared';\nimport { createRandomString } from 'ts-fns';\n\nexport class AnysMonitorDOMMutationPlugin extends AnysPlugin {\n init() {\n this.currentSnapshotId = '';\n this.currentMutationId = '';\n this.currentMutationNo = 0;\n }\n\n options() {\n return {\n mutation: true,\n };\n }\n\n registerMutation() {\n const observer = this.createObserver((logs) => {\n const mutationId = createRandomString(8);\n const number = this.currentMutationNo + 1;\n const log = {\n type: 'mutation',\n time: Date.now(),\n detail: logs,\n ssid: this.currentSnapshotId,\n ssno: number,\n curr: mutationId,\n prev: this.currentMutationId,\n };\n this.anys.write(log);\n this.currentMutationId = mutationId;\n this.currentMutationNo = number;\n });\n\n // record after loaded\n window.addEventListener('load', () => {\n observer.observe(document, {\n characterData: true,\n attributes: true,\n childList: true,\n subtree: true,\n });\n this.recordSnapshot();\n buildPath(document.documentElement);\n });\n\n const autoRecordWhenRefreshTrace = () => {\n this.recordSnapshot();\n };\n this.anys.on('refreshTraceId', autoRecordWhenRefreshTrace);\n\n return () => {\n observer.disconnect();\n this.anys.off('refreshTraceId', autoRecordWhenRefreshTrace);\n };\n }\n\n recordSnapshot() {\n const snapshot = createSnapshot();\n const snapshotId = createRandomString(8);\n\n const url = window.location.href;\n const a = new URL(url);\n const path = a.pathname.replace(/^([^/])/, '/$1');\n\n this.anys.write({\n type: 'snapshot',\n time: Date.now(),\n url: {\n uri: path + (a.search ? `?${a.search}` : ''),\n path,\n protocol: a.protocol.replace(':', ''),\n host: a.hostname,\n port: a.port,\n search: a.search,\n hash: a.hash.replace('#', ''),\n },\n detail: snapshot,\n ssid: snapshotId,\n });\n this.currentSnapshotId = snapshotId;\n this.currentMutationNo = 0;\n }\n\n createObserver(callback) {\n const isInIgnore = (node) => {\n if (node.hasAttribute?.('data-ignore')) {\n return true;\n }\n\n let parent = node.parentNode;\n while (parent) {\n if (parent.hasAttribute?.('data-ignore')) {\n return true;\n }\n parent = parent.parentNode;\n }\n\n return false;\n };\n\n const observer = new MutationObserver((inputs) => {\n /**\n * @type any[]\n */\n const mutations = [];\n const changes = [...inputs].reverse();\n changes.forEach((item) => {\n const { type, target, attributeName, oldValue } = item;\n\n // ignore nodes which are special\n if (isInIgnore(target)) {\n return;\n }\n\n if (type === 'attributes') {\n // @ts-ignore\n const next = target.getAttribute(attributeName);\n if (next === oldValue) {\n return;\n }\n if (mutations.find(item => item.type === type && item.target === target && item.attributeName === attributeName)) {\n return;\n }\n }\n else if (type === 'characterData') {\n // @ts-ignore\n const next = target.data;\n if (next === oldValue) {\n return;\n }\n if (mutations.find(item => item.type === type && item.target === target && item.target.data === next)) {\n return;\n }\n }\n\n mutations.push(item);\n });\n mutations.reverse();\n\n /**\n * records as logs\n */\n\n const logs = [];\n mutations.forEach((mutation) => {\n const { type, target, attributeName, oldValue } = mutation;\n const targetPath = target.path || getPath(target);\n const getRelativePath = (someNode) => {\n const somePath = getPath(someNode);\n return somePath.replace(targetPath + '/', '');\n };\n\n if (type === 'attributes') {\n const next = target.getAttribute(attributeName);\n const prev = oldValue;\n logs.push({\n type: 'attribute',\n target: targetPath,\n name: attributeName,\n next,\n prev,\n });\n }\n else if (type === 'characterData') {\n const next = target.data;\n const prev = oldValue;\n logs.push({\n type: 'text',\n target: targetPath,\n next,\n prev,\n });\n }\n else if (type === 'childList') {\n // ignore textarea inside changes\n if (target.nodeName === 'TEXTAREA') {\n return;\n }\n\n const { removedNodes, addedNodes, previousSibling, nextSibling } = mutation;\n\n const movedNodes = [];\n const remove = Array.from(removedNodes)\n .map((node) => {\n // move node\n if (document.body.contains(node)) {\n movedNodes.push({\n node,\n path: getPath(node),\n });\n return;\n }\n\n // when a node is removed after inserted immediately,\n // it will be treated as moved as previous\n\n // path relative to target\n const nodePath = node.path ? getRelativePath(node) : null;\n const before = previousSibling ? getPath(previousSibling) : null;\n const after = nextSibling ? getPath(nextSibling) : null;\n const patch = {};\n if (nodePath) {\n patch.node = nodePath;\n }\n else {\n patch.before = before;\n patch.after = after;\n }\n return patch;\n })\n .filter(Boolean);\n const move = [];\n const insert = Array.from(addedNodes)\n .map((node) => {\n // we SHOULD MUST read nextSibling's path sibling we invoke buildPath\n const sibling = node.nextSibling ? getRelativePath(node.nextSibling) : null;\n\n // move node\n // when a node is inserted and moved immediately, it will go through\n // insert -> remove -> insert\n // we treat it as\n // insert -> move\n // when remove, we create movedNode.path, so here we get it as expected\n // if a node is removed after inserted immediately but not inserted, we drop it\n const movedNode = movedNodes.find(item => item.node === node);\n if (movedNode) {\n move.push({\n node: movedNode.path,\n sibling,\n });\n return;\n }\n\n const isText = node.nodeName === '#text';\n const isComment = node.nodeName === '#comment';\n\n const text = isText ? node.data : null;\n const comment = isComment ? node.data : null;\n const html = isText || isComment ? null : clearHtml(node.outerHTML);\n\n return {\n text,\n html,\n comment,\n sibling,\n };\n })\n .filter(Boolean);\n\n logs.push({\n type: 'children',\n target: targetPath,\n remove,\n insert,\n move,\n });\n\n // rebuild node and its children's path\n buildPath(target);\n }\n });\n\n // record mutation logs\n callback(logs);\n });\n\n // build all nodes' path\n buildPath(document);\n\n return observer;\n }\n}\n\nfunction buildPath(node) {\n if (node !== document) {\n const path = getPath(node);\n node.path = path;\n }\n\n const children = node.childNodes;\n Array.from(children).forEach((el) => {\n buildPath(el);\n });\n}\n\nfunction clearHtml(html) {\n return html\n // noscript\n .replace(/<script([^]*?)>([^]*?)<\\/script>/gm, '<noscript$1></noscript>')\n .replace(/<noscript([^]*?)>([^]*?)<\\/noscript>/gm, '<noscript$1></noscript>')\n // // remove script\n // .replace(/<script([^]*?)>([^]*?)<\\/script>/gm, '')\n // remove preload script\n .replace(/<link([^]*?)as=\"script\"([^]*?)>/g, '<link$1$2>')\n .replace(/\\n\\n*\\s*\\n*\\n/gm, '\\n');\n}\n\nfunction createFormSnapshot() {\n const forms = document.querySelectorAll('input, textarea, select');\n const data = [];\n Array.from(forms).forEach((el) => {\n const target = getPath(el);\n // @ts-ignore\n const value = el.type === 'password' ? '***' : el.value;\n data.push({ el: target, value });\n });\n return data;\n}\n\nexport function createSnapshot() {\n const { name, publicId, systemId } = document.doctype;\n const doctype = { name, publicId, systemId };\n\n const content = document.documentElement.innerHTML;\n const html = clearHtml(content);\n\n const attrs = {};\n const el = document.querySelector('html');\n for (let { name, value } of el.attributes) {\n attrs[name] = value;\n }\n\n const values = createFormSnapshot();\n\n return { doctype, attrs, html, values };\n}\n","import { AnysPlugin } from 'anys-shared';\n\nexport class AnysMonitorWindowSizePlugin extends AnysPlugin {\n options() {\n return {\n size: true,\n };\n }\n\n createRecordLog() {\n const { innerWidth: width, innerHeight: height } = window;\n const log = {\n type: 'window_size',\n time: Date.now(),\n detail: { width, height },\n };\n return log;\n }\n\n registerSize() {\n let request;\n\n const listen = () => {\n clearTimeout(request);\n\n const log = this.createRecordLog();\n request = setTimeout(() => {\n this.anys.write(log);\n }, 100);\n };\n\n // 一启动就记录一次\n this.recordSize();\n\n window.addEventListener('resize', listen);\n\n return () => {\n window.removeEventListener('resize', listen);\n };\n }\n\n recordSize() {\n const log = this.createRecordLog();\n this.anys.write(log);\n }\n}\n","import { AnysPlugin, getPath } from 'anys-shared';\n\nexport class AnysMonitorScrollEventPlugin extends AnysPlugin {\n options() {\n return {\n scroll: true,\n };\n }\n\n registerScroll() {\n let ticking = 0;\n\n const listen = (e) => {\n if (ticking) {\n return;\n }\n\n const { target, bubbles } = e;\n let log;\n if (bubbles) {\n const { scrollX, scrollY } = window;\n log = {\n type: 'window_scroll',\n time: Date.now(),\n detail: { scrollX, scrollY },\n };\n }\n else {\n const { scrollLeft, scrollTop } = target;\n log = {\n type: 'scroll',\n time: Date.now(),\n target: getPath(target),\n detail: { scrollLeft, scrollTop },\n };\n }\n\n requestAnimationFrame(() => {\n this.anys.write(log);\n ticking = 0;\n });\n\n ticking = 1;\n };\n\n window.addEventListener('scroll', listen, true);\n\n return () => {\n window.removeEventListener('scroll', listen);\n };\n }\n}\n","import { AnysPlugin, ajaxPost, replaceUrlSearch } from 'anys-shared';\nimport { AnysIdentifyPlugin } from 'anys-web-plugin-identify';\nimport { AnysMonitorInputEventPlugin } from 'anys-web-plugin-monitor-input-event';\nimport { AnysMonitorMouseEventPlugin } from 'anys-web-plugin-monitor-mouse-event';\nimport { AnysMonitorWindowActivityPlugin } from 'anys-web-plugin-monitor-window-activity';\nimport { AnysMonitorUrlPlugin } from 'anys-web-plugin-monitor-url';\nimport { AnysMonitorTouchEventPlugin } from 'anys-web-plugin-monitor-touch-event';\nimport { AnysStoreOfflinePlugin } from 'anys-web-plugin-store-offline';\nimport { AnysMonitorDOMMutationPlugin } from 'anys-web-plugin-monitor-dom-mutation';\nimport { AnysMonitorWindowSizePlugin } from 'anys-web-plugin-monitor-window-size';\nimport { AnysMonitorScrollEventPlugin } from 'anys-web-plugin-monitor-scroll-event';\n\nexport class AnysOfflineTracerPlugin extends AnysPlugin {\n static dependencies = [\n AnysStoreOfflinePlugin,\n AnysMonitorUrlPlugin,\n AnysMonitorWindowSizePlugin,\n AnysMonitorDOMMutationPlugin,\n AnysIdentifyPlugin,\n AnysMonitorInputEventPlugin,\n AnysMonitorMouseEventPlugin,\n AnysMonitorWindowActivityPlugin,\n AnysMonitorTouchEventPlugin,\n AnysMonitorScrollEventPlugin,\n ];\n\n constructor(anys, [offlineStore, urlMonitor, windowSizeMonitor, DOMMutationMonitor]) {\n super(anys);\n this.offlineStore = offlineStore;\n this.urlMonitor = urlMonitor;\n this.windowSizeMonitor = windowSizeMonitor;\n this.DOMMutationMonitor = DOMMutationMonitor;\n // cache for trace logs to be send by beacon\n this.cache = {};\n }\n\n options() {\n const isSupportTouch = 'ontouchend' in document;\n return {\n touch: isSupportTouch,\n mouse: !isSupportTouch,\n click: false,\n mousedown: true,\n mousemove: true,\n mouseup: true,\n autoReport: false,\n reportUrl: new Error('options.reportUrl is required!'),\n reportInterval: 10000,\n reportParams: null,\n };\n }\n\n registerAutoReport() {\n const { clientId } = this.anys;\n const autoReportWhenRefreshTraceId = ({ prev }) => {\n // report previous trace logs\n this.anys.report([\n { key: 'client', value: clientId },\n { key: 'trace', value: prev },\n ]);\n\n // clear cache\n this.cache = {};\n\n // record new information\n this.urlMonitor.recordUrl();\n this.windowSizeMonitor.recordSize();\n this.DOMMutationMonitor.recordSnapshot();\n };\n this.anys.on('refreshTraceId', autoReportWhenRefreshTraceId);\n\n const timer = setInterval(() => {\n this.anys.report();\n }, this.anys.options.reportInterval);\n\n let isUnloaded = 0;\n const sendBeaconWhenBeforeUnload = () => {\n if (isUnloaded) {\n return;\n }\n isUnloaded = 1;\n\n const ids = Object.keys(this.cache);\n const logs = { data: Object.values(this.cache), by: 'beacon' };\n if (ids.length) {\n this.offlineStore.remove(ids); // async may not executed\n navigator.sendBeacon(this.anys.options.reportUrl, JSON.stringify(logs));\n this.cache = {};\n }\n };\n window.addEventListener('beforeunload', sendBeaconWhenBeforeUnload);\n window.addEventListener('pagehide', sendBeaconWhenBeforeUnload); // 兼容微信浏览器\n window.addEventListener('unload', sendBeaconWhenBeforeUnload);\n\n const addCacheWhenWriteLog = ({ id, data }) => {\n this.cache[id] = data;\n };\n this.anys.on('writeOfflineLog', addCacheWhenWriteLog);\n\n return () => {\n this.anys.off('refreshTraceId', autoReportWhenRefreshTraceId);\n this.anys.off('writeOfflineLog', addCacheWhenWriteLog);\n // @ts-ignore\n clearInterval(timer);\n window.removeEventListener('beforeunload', sendBeaconWhenBeforeUnload);\n };\n }\n\n /**\n * define read here, so that recorder will not send other plugins 'read' output\n * @param {*} message\n * @returns\n */\n read(message) {\n return this.offlineStore.read(message);\n }\n\n arrange(logs) {\n const groups = [];\n let i = 0;\n\n logs.forEach((item) => {\n groups[i] = groups[i] || [];\n groups[i].push(item);\n if (groups[i].length > 200) {\n i ++;\n }\n });\n\n return groups;\n }\n\n send(data) {\n const items = [];\n const ids = [];\n\n data.forEach((item) => {\n const { _id, ...info } = item;\n ids.push(_id);\n items.push(info);\n });\n\n if (!items.length) {\n return;\n }\n\n const { reportUrl, reportParams } = this.anys.options;\n const params = typeof reportParams === 'function' ? reportParams() : reportParams;\n const url = params ? replaceUrlSearch(reportUrl, params) : reportUrl;\n return ajaxPost(url, { data: items }).then(() => {\n ids.forEach((id) => {\n delete this.cache[id];\n });\n });\n }\n\n clear() {\n this.cache = {};\n }\n}\n","export function replaceUrlSearch(url, params) {\n const encode = (value) => encodeURIComponent(value);\n\n const index = url.indexOf('?');\n if (index < 0) {\n const search = Object.keys(params)\n .map((key) => `${key}=${encode(params[key])}`)\n .join('&');\n const [path, hash] = url.split('#');\n return path + '?' + search + (hash ? '#' + hash : '');\n }\n\n const [path, right] = url.split('?');\n const [search, hash] = right.split('#');\n\n const origin = search.split('&')\n .map((item) => item.split('='))\n .map((kv) => {\n const [key, ...values] = kv;\n const value = values.join('=');\n return [key, value];\n })\n .reduce((map, [key, value]) => ({ ...map, [key]: value }), {});\n Object.assign(origin, params);\n\n const newSearch = Object.keys(origin).map((key) => `${key}=${encode(origin[key])}`).join('&');\n return path + '?' + newSearch + (hash ? '#' + hash : '');\n}\n","export function ajaxPost(url, data) {\n return new Promise((resolve, reject) => {\n // @ts-ignore\n const XHR = window.__XMLHttpRequest || window.XMLHttpRequest;\n\n const http = new XHR();\n http.open('POST', url, true);\n http.onreadystatechange = function() {\n if(http.readyState == 4) {\n if (http.status == 200 || http.status === 0) {\n resolve(http.responseText);\n }\n else {\n reject(new Error(`ajax post fail with status ${http.status}`));\n }\n }\n };\n http.onerror = reject;\n http.send(JSON.stringify(data));\n });\n}\n","import { Anys } from 'anys';\nimport { AnysOfflineTracerPlugin } from './offline-tracer-plugin.js';\n\nexport const createTracer = (options = {}) => new Anys({\n namespace: 'AnysTracer',\n ...options,\n plugins: {\n ...(options.plugins || {}),\n tracer: AnysOfflineTracerPlugin,\n },\n});\n"],"names":["__webpack_require__","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","isArray","Array","isFunction","isStrict","f","strict","entire","fnBody","slice","indexOf","lastIndexOf","trim","isNativeClass","isNativeSTD","level4","topCtx","replace","isBabelTransformedClass","test","isBabelRuntimeTransformedClass","isBabelTransformedMinifiedClass","level3","protos","getOwnPropertyDescriptors","hasProtos","keys","filter","item","length","level2","hasThisInside","level1","isConstructor","createRandomString","len","arguments","undefined","CHARS","text","i","charAt","Math","floor","random","each","fn","descriptor","descriptors","forEach","set","configurable","writable","Anys","options","_this","this","_events","_queue","ins","Constructor","getPrototypeOf","constructor","_Anys$defaultOptions","_objectSpread","defaultOptions","_Anys$defaultOptions$","filters","defaultFilters","_Anys$defaultOptions$2","plugins","defaultPluings","_objectWithoutProperties","_excluded","_ref","_ref$filters","givenFilters","_ref$plugins","givenPluings","_ref$defines","defines","givenDefines","givenOptions","_excluded2","pluginOptions","pluginFilters","pluginDefines","isGivenPluginsMapping","_typeof","givenPluingList","objectValues","givenPluginMapping","map","pluginsDraft","concat","_toConsumableArray","mergePluginDeps","pluginList","Plugin","depPlugins","dependencies","dep","unshift","pluginSet","_givenPluginMapping$f","name","msg","localName","find","console","debug","error","deps","P","plugin","objectAssign","push","apply","_pluginList","requiredOption","Error","definitions","clientId","client","traceId","trace","requestId","basicLog","defineProperties","result","define","request","_basicLog","invoke","_inited","autoStart","start","_proto","on","event","callback","off","_this2","splice","emit","_len","args","_key","type","defers","_len2","_key2","res","Promise","all","then","refreshTraceId","prevTraceId","prev","next","refreshRequestId","prevRequestId","write","log","data","report","message","resolve","reject","_this3","defer","ro","re","signal","read","operators","logs","readDefers","operator","ret","arrange","arrageDefers","chunks","send","sendDefers","chunk","clear","clearDefers","_reporting","run","shift","discreteOperators","intensiveOperators","flag","bind","fns","_ref2","err","onError","onSuccess","onComplete","arg","catch","e","pipe","stop","obj1","obj2","AnysPlugin","anys","$effects","stch","methodName","toUpperCase","revoke","affect","AnysIdentifyPlugin","namespace","localStorage","getItem","setItem","sessionStorage","getPath","node","root","document","documentElement","nodeName","nodePath","path","current","parent","parentNode","findIndex","childNodes","index","toLowerCase","reverse","join","AnysMonitorInputEventPlugin","_AnysPlugin","_inherits","input","registerInput","extract","target","inputType","tagName","getAttribute","elInput","detailData","time","Date","now","el","detail","listenInput","listenChange","listenPaste","_ref3","addEventListener","removeEventListener","AnysMonitorMouseEventPlugin","mouse","click","mousemove","mousedown","mouseup","wheel","contextmenu","throttle","listener","createThrottleListener","_window","window","innerWidth","innerHeight","button","pageX","pageY","w","h","x","y","registerClick","registerMouseup","registerMousedown","registerContextmenu","registerMousemove","registerWheel","deltaX","deltaY","deltaZ","deltaMode","mode","createLog","ticking","requestAnimationFrame","enterLog","AnysMonitorWindowActivityPlugin","activity","deadTimeout","ready","registerActivity","onvisibilitychange","visibilityState","onunload","registerDeadTimeout","timer","clearTimeout","setTimeout","AnysMonitorUrlPlugin","url","registerUrl","recordUrl","location","href","a","URL","pathname","uri","search","protocol","host","hostname","port","hash","AnysMonitorTouchEventPlugin","isSupportTouch","touch","touchstart","touchend","touchmove","identifier","force","width","height","registerTouchmove","registerTouchend","registerTouchstart","AsyncQueue","queue","status","runner","rs","rj","_this$queue$shift","finally","InDB","_options$version","version","stores","asStorage","isKv","cache","connection","indexedDB","open","onupgradeneeded","db","existStoreNames","from","objectStoreNames","passStoreNames","objectStore","transaction","keyPath","primaryKeyPath","autoIncrement","createObjectStore","indexNames","deleteIndex","indexes","createIndex","unique","multiEntry","deleteObjectStore","onblocked","modifyError","use","connect","onerror","onsuccess","currentStore","store","InDBStore","put","removeItem","delete","close","deleteDatabase","databases","_createClass","_proto2","create","tx","disconnect","oncomplete","onabort","latest","deferer","cursor","range","direction","onTouch","onDone","_options$writable","owner","openCursor","_options$writable2","iterate","_this4","_options$writable3","_options$direction","continue","commit","batch","_this5","_options$writable4","promises","results","parse","count","some","_this6","offset","end","min","first","items","last","query","compare","_this7","IDBKeyRange","lowerBound","upperBound","only","targetObj","targetValue","select","indexesMapping","compareAandB","b","determine","and_conditions","or_conditions","_and_conditions$i","_or_conditions$_i","groups","rules","conditions","_conditions$i","optional","_groups$i","_slicedToArray","isOk","add","objs","remove","chain","toString","split","makeKeyChain","AnysStoreOfflinePlugin","autoReport","expireTime","init","storeName","idb","setInterval","curr","ids","_id","clearInterval","id","AnysMonitorDOMMutationPlugin","currentSnapshotId","currentMutationId","currentMutationNo","mutation","registerMutation","observer","createObserver","mutationId","number","ssid","ssno","observe","characterData","attributes","childList","subtree","recordSnapshot","buildPath","autoRecordWhenRefreshTrace","snapshot","_step","_document$doctype","doctype","publicId","systemId","html","clearHtml","innerHTML","attrs","_iterator","_createForOfIteratorHelper","querySelector","s","n","done","_step$value","values","forms","querySelectorAll","createSnapshot","snapshotId","MutationObserver","inputs","mutations","attributeName","oldValue","_node$hasAttribute","hasAttribute","_parent$hasAttribute","_parent","isInIgnore","targetPath","getRelativePath","someNode","removedNodes","addedNodes","previousSibling","nextSibling","movedNodes","body","contains","before","after","patch","Boolean","move","insert","sibling","movedNode","isText","isComment","comment","outerHTML","children","AnysMonitorWindowSizePlugin","size","createRecordLog","registerSize","listen","recordSize","AnysMonitorScrollEventPlugin","scroll","registerScroll","bubbles","scrollX","scrollY","scrollLeft","scrollTop","AnysOfflineTracerPlugin","offlineStore","urlMonitor","windowSizeMonitor","DOMMutationMonitor","reportUrl","reportInterval","reportParams","registerAutoReport","autoReportWhenRefreshTraceId","isUnloaded","sendBeaconWhenBeforeUnload","by","navigator","sendBeacon","JSON","stringify","addCacheWhenWriteLog","_ref4","info","_this$anys$options","params","encode","encodeURIComponent","_url$split2","_url$split4","_right$split2","origin","kv","_kv","_toArray","reduce","_defineProperty","assign","replaceUrlSearch","http","__XMLHttpRequest","XMLHttpRequest","onreadystatechange","readyState","responseText","ajaxPost","createTracer","tracer"],"sourceRoot":""}