From 7f888876c59b72ca1c90b73a61ab3703dbc383f0 Mon Sep 17 00:00:00 2001 From: FengFan Date: Sun, 15 Mar 2020 20:13:56 +0800 Subject: [PATCH] feat: extraAttr --- .gitignore | 1 - dist/packages/player/src/container.d.ts | 2 +- dist/replay.cjs.js | 2 +- dist/replay.cjs.js.map | 2 +- dist/replay.esm.js | 3462 ++++++++++++++++++++++- dist/replay.esm.js.map | 2 +- packages/player/src/container.ts | 17 +- packages/player/src/fixed.css | 3 + packages/player/src/ui.css | 1 - packages/virtual-dom/src/serialize.ts | 30 +- 10 files changed, 3497 insertions(+), 25 deletions(-) create mode 100644 packages/player/src/fixed.css diff --git a/.gitignore b/.gitignore index 2b709749..4139bbe3 100644 --- a/.gitignore +++ b/.gitignore @@ -102,5 +102,4 @@ typings/ # TernJS port file .tern-port - dist diff --git a/dist/packages/player/src/container.d.ts b/dist/packages/player/src/container.d.ts index a9c7f439..f710bdfc 100644 --- a/dist/packages/player/src/container.d.ts +++ b/dist/packages/player/src/container.d.ts @@ -14,5 +14,5 @@ export declare class Container { initSandbox(): void; initTemplate(): void; createContainer(): HTMLElement; - createStyle(): HTMLElement; + createStyle(s: string): HTMLElement; } diff --git a/dist/replay.cjs.js b/dist/replay.cjs.js index 9425e75f..2640d1ff 100644 --- a/dist/replay.cjs.js +++ b/dist/replay.cjs.js @@ -1,2 +1,2 @@ -"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const t=new Set;const e=new class{constructor(){this.nodeId=1,this.nodeMap=new Map,this.idMap=new WeakMap,this.createNodeId=()=>this.nodeId++}getNode(t){return this.nodeMap.get(t)}addNode(t,e=this.createNodeId()){return this.idMap.set(t,e),this.nodeMap.set(e,t),e}removeNode(t){this.nodeMap.delete(t),this.idMap.delete(this.getNode(t))}getNodeId(t){return this.idMap.get(t)}updateNode(t,e){this.idMap.set(e,t),this.nodeMap.set(t,e)}};class n{constructor(t,e,n,r){this.DBName=t,this.version=e,this.storeName=n;const o=window.indexedDB.open(t,e);o.onerror=t=>{console.error("open IndexDB on error")},o.onsuccess=t=>{this.db=o.result,r(this.db)},o.onupgradeneeded=t=>{const e=t.target.result;if(!e.objectStoreNames.contains(n)){const t=e.createObjectStore(n,{autoIncrement:!0,keyPath:"id"});t.createIndex("type","type",{unique:!1}),t.createIndex("data","data",{unique:!1}),t.createIndex("time","time",{unique:!1})}}}add(t){this.db.transaction([`${this.storeName}`],"readwrite").objectStore(`${this.storeName}`).add(t).onerror=t=>{throw new Error("write IndexDB on error")}}clear(){this.db.transaction([`${this.storeName}`],"readwrite").objectStore(`${this.storeName}`).clear()}async readAll(){const t=this.db.transaction([`${this.storeName}`],"readwrite").objectStore(`${this.storeName}`);return new Promise(e=>{t.getAll().onsuccess=t=>{const n=t.target.result;e(n)}})}async getData(){const t=await this.readAll(),[e,n,...r]=t,[{width:o,height:i},{vNode:a}]=[e.data,n.data];return{width:o,height:i,vNode:a,data:r}}}const r=new Promise(t=>{const e=new n("wr_db",1,"wr_data",()=>{t(e)})});let o={speed:null};var i;!function(t){t.SPEED="SPEED"}(i||(i={}));const a={frame:0,length:0,curTime:0,startTime:0,endTime:0};var s;!function(t){t.FORWARD="FORWARD",t.BACKWARD="BACKWARD",t.INFO="INFO"}(s||(s={}));var c="object"==typeof global&&global&&global.Object===Object&&global,u="object"==typeof self&&self&&self.Object===Object&&self,d=c||u||Function("return this")(),l=d.Symbol,h=Object.prototype,p=h.hasOwnProperty,f=h.toString,b=l?l.toStringTag:void 0;var y=Object.prototype.toString;var v=l?l.toStringTag:void 0;function g(t){return null==t?void 0===t?"[object Undefined]":"[object Null]":v&&v in Object(t)?function(t){var e=p.call(t,b),n=t[b];try{t[b]=void 0;var r=!0}catch(t){}var o=f.call(t);return r&&(e?t[b]=n:delete t[b]),o}(t):function(t){return y.call(t)}(t)}function m(t){return null!=t&&"object"==typeof t}var w=Array.isArray;function _(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}var j=/^\s+|\s+$/g,O=/^[-+]0x[0-9a-f]+$/i,x=/^0b[01]+$/i,E=/^0o[0-7]+$/i,N=parseInt;function D(t){if("number"==typeof t)return t;if(function(t){return"symbol"==typeof t||m(t)&&"[object Symbol]"==g(t)}(t))return NaN;if(_(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=_(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=t.replace(j,"");var n=x.test(t);return n||E.test(t)?N(t.slice(2),n?2:8):O.test(t)?NaN:+t}function T(t){if(!_(t))return!1;var e=g(t);return"[object Function]"==e||"[object GeneratorFunction]"==e||"[object AsyncFunction]"==e||"[object Proxy]"==e}var A,S=d["__core-js_shared__"],I=(A=/[^.]+$/.exec(S&&S.keys&&S.keys.IE_PROTO||""))?"Symbol(src)_1."+A:"";var M=Function.prototype.toString;function L(t){if(null!=t){try{return M.call(t)}catch(t){}try{return t+""}catch(t){}}return""}var P=/^\[object .+?Constructor\]$/,C=Function.prototype,k=Object.prototype,F=C.toString,U=k.hasOwnProperty,B=RegExp("^"+F.call(U).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function R(t){return!(!_(t)||(e=t,I&&I in e))&&(T(t)?B:P).test(L(t));var e}function z(t,e){var n=function(t,e){return null==t?void 0:t[e]}(t,e);return R(n)?n:void 0}var W=z(d,"WeakMap"),V=/^(?:0|[1-9]\d*)$/;function q(t,e){var n=typeof t;return!!(e=null==e?9007199254740991:e)&&("number"==n||"symbol"!=n&&V.test(t))&&t>-1&&t%1==0&&t-1&&t%1==0&&t<=9007199254740991}var G=Object.prototype;function K(t){return m(t)&&"[object Arguments]"==g(t)}var X=Object.prototype,Y=X.hasOwnProperty,Z=X.propertyIsEnumerable,J=K(function(){return arguments}())?K:function(t){return m(t)&&Y.call(t,"callee")&&!Z.call(t,"callee")};var Q="object"==typeof exports&&exports&&!exports.nodeType&&exports,tt=Q&&"object"==typeof module&&module&&!module.nodeType&&module,et=tt&&tt.exports===Q?d.Buffer:void 0,nt=(et?et.isBuffer:void 0)||function(){return!1},rt={};rt["[object Float32Array]"]=rt["[object Float64Array]"]=rt["[object Int8Array]"]=rt["[object Int16Array]"]=rt["[object Int32Array]"]=rt["[object Uint8Array]"]=rt["[object Uint8ClampedArray]"]=rt["[object Uint16Array]"]=rt["[object Uint32Array]"]=!0,rt["[object Arguments]"]=rt["[object Array]"]=rt["[object ArrayBuffer]"]=rt["[object Boolean]"]=rt["[object DataView]"]=rt["[object Date]"]=rt["[object Error]"]=rt["[object Function]"]=rt["[object Map]"]=rt["[object Number]"]=rt["[object Object]"]=rt["[object RegExp]"]=rt["[object Set]"]=rt["[object String]"]=rt["[object WeakMap]"]=!1;var ot,it="object"==typeof exports&&exports&&!exports.nodeType&&exports,at=it&&"object"==typeof module&&module&&!module.nodeType&&module,st=at&&at.exports===it&&c.process,ct=function(){try{var t=at&&at.require&&at.require("util").types;return t||st&&st.binding&&st.binding("util")}catch(t){}}(),ut=ct&&ct.isTypedArray,dt=ut?(ot=ut,function(t){return ot(t)}):function(t){return m(t)&&H(t.length)&&!!rt[g(t)]},lt=Object.prototype.hasOwnProperty;function ht(t,e){var n=w(t),r=!n&&J(t),o=!n&&!r&&nt(t),i=!n&&!r&&!o&&dt(t),a=n||r||o||i,s=a?function(t,e){for(var n=-1,r=Array(t);++n-1},Ot.prototype.set=function(t,e){var n=this.__data__,r=_t(n,t);return r<0?(++this.size,n.push([t,e])):n[r][1]=e,this};var xt=z(d,"Map");function Et(t,e){var n,r,o=t.__data__;return("string"==(r=typeof(n=e))||"number"==r||"symbol"==r||"boolean"==r?"__proto__"!==n:null===n)?o["string"==typeof e?"string":"hash"]:o.map}function Nt(t){var e=-1,n=null==t?0:t.length;for(this.clear();++es))return!1;var u=i.get(t);if(u&&i.get(e))return u==e;var d=-1,l=!0,h=2&n?new Vt:void 0;for(i.set(t,e),i.set(e,t);++d=e||n<0||l&&t-u>=i}function y(){var t=te();if(b(t))return v(t);s=setTimeout(y,function(t){var n=e-(t-c);return l?ne(n,i-(t-u)):n}(t))}function v(t){return s=void 0,h&&r?p(t):(r=o=void 0,a)}function g(){var t=te(),n=b(t);if(r=arguments,o=this,c=t,n){if(void 0===s)return f(c);if(l)return clearTimeout(s),s=setTimeout(y,e),p(c)}return void 0===s&&(s=setTimeout(y,e)),a}return e=D(e)||0,_(n)&&(d=!!n.leading,i=(l="maxWait"in n)?ee(D(n.maxWait)||0,e):i,h="trailing"in n?!!n.trailing:h),g.cancel=function(){void 0!==s&&clearTimeout(s),u=0,r=c=o=s=void 0},g.flush=function(){return void 0===s?a:v(te())},g}function oe(t,e,n){var r=!0,o=!0;if("function"!=typeof t)throw new TypeError("Expected a function");return _(n)&&(r="leading"in n?!!n.leading:r,o="trailing"in n?!!n.trailing:o),re(t,e,{leading:r,maxWait:e,trailing:o})}const ie=function(t,e={}){let n=e;const r={all:[]};return{subscribe:function(...t){let e,n="all";"string"==typeof t[0]?(n=t[0],e=t[1]):e=t[0],r[n]||(r[n]=[]),r[n].push(e)},dispatch:function(e){const o=n;if(n=t(n,e),!e)return void(r.all&&r.all.forEach(t=>t(n)));const a=function(t){const e={player:Object.keys(i),progress:Object.keys(s)};for(let[n,r]of Object.entries(e))if(r.includes(t))return n;return null}(e.type);return a&&r[a]?r[a].forEach(t=>{var e,r;e=n[a],r=o[a],Qt(e,r)||t(n[a])}):void 0},getState:function(){return n}}}(function(t){const e=Object.keys(t);return function(n,r){const o={};for(let i=0;i{const e={},n=t.attributes;return t.checked&&(e.checked="true"),n&&n.length?Object.values(n).reduce((t,e)=>{const{name:n,value:r}=e;return t[n]=r,t},e):e},se=(t,n)=>{if(t.nodeType===Node.TEXT_NODE)return null;if("SCRIPT"===t.tagName)return null;const r=((t,n)=>{const r=t.tagName.toLocaleLowerCase().trim();return{id:e.createNodeId(),attrs:ae(t),tag:r,children:[],extra:{isSVG:n||"svg"===r}}})(t,n),{id:o}=r;return e.addNode(t,o),n=n||r.extra.isSVG,t.childNodes.forEach(t=>{if(t.nodeType===Node.ELEMENT_NODE){const e=se(t,n);e&&r.children.push(e)}else if(t.nodeType===Node.TEXT_NODE&&t.nodeValue){const e=ce(t.nodeValue);e&&r.children.push(e)}}),r},ce=t=>t.replace(/\r\n/g,"").replace(/\n/g,""),ue=t=>{const{head:n,body:r}=t;return{id:e.createNodeId(),tag:"html",attrs:{},children:[se(n),se(r)],extra:{isSVG:!1}}};function de(t,e,n){if("style"!==e){if(!/^on\w+$/.test(e))return t.setAttribute(e,!0===n?"":String(n))}else if(n)if("string"==typeof n)t.style.cssText=n;else if(null!==n&&"object"==typeof n)for(const[e,r]of Object.entries(n))t.style[e]=r}function le(t,n){if(null==t)return null;if("string"==typeof t)return function(t,e){let n;return n=document.createTextNode(t),n}(t);const r=function(t){const{id:n,extra:r}=t,{isSVG:o}=r;let i;const a=(s=t.tag,{script:"noscript"}[s]||s);var s;i=o?document.createElementNS("http://www.w3.org/2000/svg",a):document.createElement(a);return e.updateNode(n,i),i}(t);return(t.children&&t.children.length||r.childNodes&&r.childNodes.length)&&function(t,e){const n=[];t.children.slice().forEach(t=>{let r=n.pop();r=le(t),r&&e.appendChild(r)})}(t,r),function(t,e){const{attrs:n}=t;for(const[t,r]of Object.entries(n))de(e,t,r)}(t,r),r}var he,pe,fe,be;!function(t){t.WINDOW="WINDOW",t.DOM="DOM",t.MOUSE="MOUSE",t.DOM_UPDATE="DOM_UPDATE",t.FORM_EL_UPDATE="FORM_EL_UPDATE"}(he||(he={})),function(t){t.ATTR="ATTR",t.INPUT="INPUT",t.CHANGE="CHANGE",t.FOCUS="FOCUS",t.BLUR="BLUR"}(pe||(pe={})),function(t){t.MOVE="MOVE",t.CLICK="click"}(fe||(fe={})),function(t){t.ADD="ADD",t.DELETE="DELETE",t.MOVE="MOVE"}(be||(be={}));const ye={windowSnapshot:function(t){const e=window.location.href;var n=window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth,r=window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight;t({type:he.WINDOW,data:{width:n,height:r,href:e},time:Date.now().toString()})},DOMSnapshot:function(t){t({type:he.DOM,data:{vNode:ue(document)},time:Date.now().toString()})},mouseObserve:function(n){!function(){const e=oe(t=>{n({type:he.MOUSE,data:{type:fe.MOVE,x:t.x,y:t.y},time:Date.now().toString()})},100,{trailing:!0});document.addEventListener("mousemove",e),t.add(()=>{document.removeEventListener("mousemove",e)})}(),function(){const r=oe(t=>{n({type:he.MOUSE,data:{type:fe.CLICK,id:e.getNodeId(t.target),x:t.x,y:t.y},time:Date.now().toString()})},250);t.add(()=>{document.removeEventListener("click",r)}),document.addEventListener("click",r)}()},DOMObserve:function(n){const r=new MutationObserver(t=>{const r=[];t.forEach(t=>{const{target:n,addedNodes:o,removedNodes:i,type:a,nextSibling:s,attributeName:c}=t,u=(d=a,function(t){r.push({mType:d,data:t})});var d;switch(a){case"attributes":if(c){const t=n.getAttribute(c);u({nodeId:e.getNodeId(n),value:t,attr:c})}break;case"characterData":const t=n.parentNode;u({parentId:e.getNodeId(t),value:n.nodeValue,pos:t.childNodes.length>0?[...t.childNodes].indexOf(n):null});break;case"childList":o.length&&o.forEach(t=>{let r,o;if(t.nodeType===Node.TEXT_NODE){r=t.nodeValue;const n=Array.from(t.parentNode.childNodes).indexOf(t);u({type:be.ADD,parentId:e.getNodeId(t.parentNode),value:t.textContent,pos:n})}else{o=se(t);const r=t.parentNode;u({type:be.ADD,parentId:e.getNodeId(n),vNode:o,pos:r.childNodes.length>0?[...r.childNodes].indexOf(t):null})}}),i.length&&i.forEach(t=>{u({type:be.DELETE,parentId:e.getNodeId(n),nodeId:e.getNodeId(t)||null})})}}),r.length&&n({type:he.DOM_UPDATE,data:{mutations:r},time:Date.now().toString()})});r.observe(document.body,{attributeOldValue:!0,attributes:!0,characterData:!0,characterDataOldValue:!0,childList:!0,subtree:!0}),t.add(()=>{r.disconnect()})},formElementObserve:function(n){!function(n){const r=["input","change","focus","blur"];function o(t){switch(t.type){case"input":case"change":n({type:he.FORM_EL_UPDATE,data:{type:pe.INPUT,id:e.getNodeId(t.target),value:t.target.value},time:Date.now().toString()});break;case"focus":n({type:he.FORM_EL_UPDATE,data:{type:pe.FOCUS,id:e.getNodeId(t.target)},time:Date.now().toString()});break;case"blur":n({type:he.FORM_EL_UPDATE,data:{type:pe.BLUR,id:e.getNodeId(t.target)},time:Date.now().toString()})}}r.map(t=>e=>{document.addEventListener(t,e,{once:!1,passive:!0,capture:!0})}).forEach(t=>t(o)),t.add(()=>{r.forEach(t=>{document.removeEventListener(t,o,!0)})})}(n),function(n){function r(t,r){n({type:he.FORM_EL_UPDATE,data:{type:pe.ATTR,id:e.getNodeId(this),key:t,value:r},time:Date.now().toString()})}[[HTMLInputElement.prototype,"value"],[HTMLInputElement.prototype,"checked"],[HTMLSelectElement.prototype,"value"],[HTMLTextAreaElement.prototype,"value"]].map(e=>()=>{const[n,o]=e,i=Object.getOwnPropertyDescriptor(n,o);Object.defineProperty(n,o,{set:function(t){setTimeout(()=>{r.call(this,o,t)}),i&&i.set&&i.set.call(this,t)}}),t.add(()=>{i&&Object.defineProperty(n,o,i)})}).concat([]).forEach(t=>t())}(n)}},ve={uninstall:()=>{Array.from(t.values()).forEach(t=>t())}};class ge{constructor(t){this.vNode=t.vNode,this.width=t.width,this.height=t.height,this.init()}init(){this.initTemplate(),this.initSandbox()}initSandbox(){this.sandBox=this.container.querySelector("#wr-sandbox"),this.sandBox.style.width=this.width+"px",this.sandBox.style.height=this.height+"px";const t=this.sandBox.contentWindow.document;t.replaceChild(le(this.vNode),t.documentElement)}initTemplate(){document.head.appendChild(this.createStyle()),document.body.appendChild(this.createContainer())}createContainer(){const t=(new DOMParser).parseFromString('
\n
\n
\n \n
\n
\n
\n \n \n \n \n \n
\n
\n
\n
\n
\n
\n
\n
\n \n \n \n
\n
\n
\n',"text/html").body.firstChild;return t.style.width=this.width+"px",t.style.height=this.height+"px",t.style.position="relative",t.style.margin="0 auto",this.container=t}createStyle(){return(new DOMParser).parseFromString("","text/html").head.firstChild}}class me{constructor(t){this.container=t,this.init()}init(){this.controller=this.container.querySelector(".wr-keyboard"),this.pauseBtn=this.controller.querySelector(".pause"),this.playBtn=this.controller.querySelector(".play"),this.controller.addEventListener("click",t=>{if(t.target&&"button"===t.target.type){const e=Number(t.target.getAttribute("speed"));this.speed=e,ie.dispatch({type:i.SPEED,data:{speed:e}})}}),ie.subscribe("player",t=>{this.paly(t.speed),this.setSpeed(t.speed)})}paly(t){0!==t?(this.pauseBtn.removeAttribute("disabled"),this.playBtn.setAttribute("disabled","")):(this.playBtn.removeAttribute("disabled"),this.pauseBtn.setAttribute("disabled",""))}setSpeed(t){const e=this.container.querySelectorAll(".speed");[...e].forEach(t=>{t.removeAttribute("disabled")});const n=1===t?0:8===t?1:16===t?2:-1;n>-1&&e[n].setAttribute("disabled","")}}function we(t){const{type:n,data:r}=t;switch(n){case he.MOUSE:const{x:t,y:n,type:o}=r;o===fe.MOVE?this.pointer.move(t,n):o===fe.CLICK&&this.pointer.click(t,n);break;case he.DOM_UPDATE:const{mutations:i}=r;i.forEach(t=>{const{mType:n,data:r}=t,{value:o,attr:i,type:a,parentId:s,pos:c,nodeId:u,vNode:d}=r;switch(n){case"attributes":e.getNode(u).setAttribute(i,o);break;case"characterData":const t=e.getNode(s);if(null!==c){const e=t.childNodes[c];t.replaceChild(document.createTextNode(o),e)}else t.innerText=o;break;case"childList":const n=e.getNode(s),r=e.getNode(u)||le(d);if(a===be.DELETE)r&&n.removeChild(r);else if(be.ADD)if(o){const t=document.createTextNode(o);n.childNodes.length?n.replaceChild(t,n.childNodes[c]):n.appendChild(t)}else n.insertBefore(r,n.childNodes[c])}});break;case he.FORM_EL_UPDATE:const{id:a,key:s,type:c,value:u}=r,d=e.getNode(a);c===pe.INPUT?d.value=u:c===pe.FOCUS?d.focus():c===pe.BLUR?d.blur():c===pe.ATTR&&(d[s]=u)}}class _e{constructor(t,e,n){this.speed=0,this.index=0,this.frameIndex=0,this.lastPercentage=0,this.data=t,this.pointer=e,this.progress=n,ie.subscribe("player",t=>{this.progressState=ie.getState().progress;const e=t.speed;this.speed=e,e>0?this.play(e):this.pause(),this.frames=this.getAccuratelyFrame()})}play(t){cancelAnimationFrame(this.requestID),this.requestID=requestAnimationFrame(function n(){const r=Date.now()-e;if(this.frameIndex>0&&!this.frames[this.frameIndex+1])return void this.stop();this.startTime||(this.startTime=Number(this.frames[this.frameIndex]));const o=this.startTime+r*t,i=Number(this.frames[this.frameIndex+1]);if(o>=i){this.frameIndex++;const t=this.frameIndex/this.frames.length*100;t-this.lastPercentage>this.getPercentInterval()&&(this.progress.updateProgress(t),this.lastPercentage=t),this.data[this.index]&&o>+this.data[this.index].time&&(this.execFrame.call(this,this.data[this.index]),this.index++)}this.requestID=requestAnimationFrame(n.bind(this))}.bind(this));const e=Date.now();this.startTime=0}pause(){cancelAnimationFrame(this.requestID),ie.dispatch({type:i.SPEED,data:{speed:0}})}stop(){this.index=0,this.pause()}execFrame(t){we.call(this,t)}getPercentInterval(){return.08*this.speed+.2}getAccuratelyFrame(t=50){this.progressState=ie.getState().progress;const{startTime:e,endTime:n}=this.progressState,r=+n+500,o=[];for(let n=+e;n{this.pointer.removeAttribute("active")},20)}}class Oe{constructor(t){this.totalDistance=0,this.progress=t.querySelector(".wr-progress"),this.thumb=this.progress.querySelector(".wr-thumb"),this.slider=this.progress.querySelector(".wr-slider-bar")}updateProgress(t){this.thumb.style.left=t+"%"}}class xe{constructor(t,e){this.container=t,this.data=e,this.initComponent()}initComponent(){this.keyboard=new me(this.container),this.progress=new Oe(this.container),this.pointer=new je,this.player=new _e(this.data,this.pointer,this.progress)}}exports.DB=r,exports.record=({emitter:t}={})=>(function(t){[...Object.values(ye)].forEach(e=>{e(t)})}(t),ve),exports.replay=async function(){const t=await r,{width:e,height:n,vNode:o,data:a}=await t.getData(),c=new ge({vNode:o,width:e,height:n});new xe(c.container,a),ie.dispatch({type:s.INFO,data:{frame:0,curTime:a[0].time,startTime:a[0].time,endTime:a[a.length-1].time,length:a.length}}),ie.dispatch({type:i.SPEED,data:{speed:1}})}; +"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const t=new Set;const e=new class{constructor(){this.nodeId=1,this.nodeMap=new Map,this.idMap=new WeakMap,this.createNodeId=()=>this.nodeId++}getNode(t){return this.nodeMap.get(t)}addNode(t,e=this.createNodeId()){return this.idMap.set(t,e),this.nodeMap.set(e,t),e}removeNode(t){this.nodeMap.delete(t),this.idMap.delete(this.getNode(t))}getNodeId(t){return this.idMap.get(t)}updateNode(t,e){this.idMap.set(e,t),this.nodeMap.set(t,e)}};class n{constructor(t,e,n,r){this.DBName=t,this.version=e,this.storeName=n;const o=window.indexedDB.open(t,e);o.onerror=t=>{console.error("open IndexDB on error")},o.onsuccess=t=>{this.db=o.result,r(this.db)},o.onupgradeneeded=t=>{const e=t.target.result;if(!e.objectStoreNames.contains(n)){const t=e.createObjectStore(n,{autoIncrement:!0,keyPath:"id"});t.createIndex("type","type",{unique:!1}),t.createIndex("data","data",{unique:!1}),t.createIndex("time","time",{unique:!1})}}}add(t){this.db.transaction([`${this.storeName}`],"readwrite").objectStore(`${this.storeName}`).add(t).onerror=t=>{throw new Error("write IndexDB on error")}}clear(){this.db.transaction([`${this.storeName}`],"readwrite").objectStore(`${this.storeName}`).clear()}async readAll(){const t=this.db.transaction([`${this.storeName}`],"readwrite").objectStore(`${this.storeName}`);return new Promise(e=>{t.getAll().onsuccess=t=>{const n=t.target.result;e(n)}})}async getData(){const t=await this.readAll(),[e,n,...r]=t,[{width:o,height:i},{vNode:a}]=[e.data,n.data];return{width:o,height:i,vNode:a,data:r}}}const r=new Promise(t=>{const e=new n("wr_db",1,"wr_data",()=>{t(e)})});let o={speed:null};var i;!function(t){t.SPEED="SPEED"}(i||(i={}));const a={frame:0,length:0,curTime:0,startTime:0,endTime:0};var s;!function(t){t.FORWARD="FORWARD",t.BACKWARD="BACKWARD",t.INFO="INFO"}(s||(s={}));var c="object"==typeof global&&global&&global.Object===Object&&global,u="object"==typeof self&&self&&self.Object===Object&&self,d=c||u||Function("return this")(),l=d.Symbol,h=Object.prototype,p=h.hasOwnProperty,f=h.toString,b=l?l.toStringTag:void 0;var y=Object.prototype.toString;var v=l?l.toStringTag:void 0;function g(t){return null==t?void 0===t?"[object Undefined]":"[object Null]":v&&v in Object(t)?function(t){var e=p.call(t,b),n=t[b];try{t[b]=void 0;var r=!0}catch(t){}var o=f.call(t);return r&&(e?t[b]=n:delete t[b]),o}(t):function(t){return y.call(t)}(t)}function m(t){return null!=t&&"object"==typeof t}var w=Array.isArray;function _(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}var j=/^\s+|\s+$/g,x=/^[-+]0x[0-9a-f]+$/i,O=/^0b[01]+$/i,E=/^0o[0-7]+$/i,N=parseInt;function D(t){if("number"==typeof t)return t;if(function(t){return"symbol"==typeof t||m(t)&&"[object Symbol]"==g(t)}(t))return NaN;if(_(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=_(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=t.replace(j,"");var n=O.test(t);return n||E.test(t)?N(t.slice(2),n?2:8):x.test(t)?NaN:+t}function T(t){if(!_(t))return!1;var e=g(t);return"[object Function]"==e||"[object GeneratorFunction]"==e||"[object AsyncFunction]"==e||"[object Proxy]"==e}var A,S=d["__core-js_shared__"],I=(A=/[^.]+$/.exec(S&&S.keys&&S.keys.IE_PROTO||""))?"Symbol(src)_1."+A:"";var M=Function.prototype.toString;function L(t){if(null!=t){try{return M.call(t)}catch(t){}try{return t+""}catch(t){}}return""}var P=/^\[object .+?Constructor\]$/,C=Function.prototype,k=Object.prototype,F=C.toString,U=k.hasOwnProperty,B=RegExp("^"+F.call(U).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function R(t){return!(!_(t)||(e=t,I&&I in e))&&(T(t)?B:P).test(L(t));var e}function z(t,e){var n=function(t,e){return null==t?void 0:t[e]}(t,e);return R(n)?n:void 0}var W=z(d,"WeakMap"),V=/^(?:0|[1-9]\d*)$/;function q(t,e){var n=typeof t;return!!(e=null==e?9007199254740991:e)&&("number"==n||"symbol"!=n&&V.test(t))&&t>-1&&t%1==0&&t-1&&t%1==0&&t<=9007199254740991}var G=Object.prototype;function K(t){return m(t)&&"[object Arguments]"==g(t)}var X=Object.prototype,Y=X.hasOwnProperty,Z=X.propertyIsEnumerable,J=K(function(){return arguments}())?K:function(t){return m(t)&&Y.call(t,"callee")&&!Z.call(t,"callee")};var Q="object"==typeof exports&&exports&&!exports.nodeType&&exports,tt=Q&&"object"==typeof module&&module&&!module.nodeType&&module,et=tt&&tt.exports===Q?d.Buffer:void 0,nt=(et?et.isBuffer:void 0)||function(){return!1},rt={};rt["[object Float32Array]"]=rt["[object Float64Array]"]=rt["[object Int8Array]"]=rt["[object Int16Array]"]=rt["[object Int32Array]"]=rt["[object Uint8Array]"]=rt["[object Uint8ClampedArray]"]=rt["[object Uint16Array]"]=rt["[object Uint32Array]"]=!0,rt["[object Arguments]"]=rt["[object Array]"]=rt["[object ArrayBuffer]"]=rt["[object Boolean]"]=rt["[object DataView]"]=rt["[object Date]"]=rt["[object Error]"]=rt["[object Function]"]=rt["[object Map]"]=rt["[object Number]"]=rt["[object Object]"]=rt["[object RegExp]"]=rt["[object Set]"]=rt["[object String]"]=rt["[object WeakMap]"]=!1;var ot,it="object"==typeof exports&&exports&&!exports.nodeType&&exports,at=it&&"object"==typeof module&&module&&!module.nodeType&&module,st=at&&at.exports===it&&c.process,ct=function(){try{var t=at&&at.require&&at.require("util").types;return t||st&&st.binding&&st.binding("util")}catch(t){}}(),ut=ct&&ct.isTypedArray,dt=ut?(ot=ut,function(t){return ot(t)}):function(t){return m(t)&&H(t.length)&&!!rt[g(t)]},lt=Object.prototype.hasOwnProperty;function ht(t,e){var n=w(t),r=!n&&J(t),o=!n&&!r&&nt(t),i=!n&&!r&&!o&&dt(t),a=n||r||o||i,s=a?function(t,e){for(var n=-1,r=Array(t);++n-1},xt.prototype.set=function(t,e){var n=this.__data__,r=_t(n,t);return r<0?(++this.size,n.push([t,e])):n[r][1]=e,this};var Ot=z(d,"Map");function Et(t,e){var n,r,o=t.__data__;return("string"==(r=typeof(n=e))||"number"==r||"symbol"==r||"boolean"==r?"__proto__"!==n:null===n)?o["string"==typeof e?"string":"hash"]:o.map}function Nt(t){var e=-1,n=null==t?0:t.length;for(this.clear();++es))return!1;var u=i.get(t);if(u&&i.get(e))return u==e;var d=-1,l=!0,h=2&n?new Vt:void 0;for(i.set(t,e),i.set(e,t);++d=e||n<0||l&&t-u>=i}function y(){var t=te();if(b(t))return v(t);s=setTimeout(y,function(t){var n=e-(t-c);return l?ne(n,i-(t-u)):n}(t))}function v(t){return s=void 0,h&&r?p(t):(r=o=void 0,a)}function g(){var t=te(),n=b(t);if(r=arguments,o=this,c=t,n){if(void 0===s)return f(c);if(l)return clearTimeout(s),s=setTimeout(y,e),p(c)}return void 0===s&&(s=setTimeout(y,e)),a}return e=D(e)||0,_(n)&&(d=!!n.leading,i=(l="maxWait"in n)?ee(D(n.maxWait)||0,e):i,h="trailing"in n?!!n.trailing:h),g.cancel=function(){void 0!==s&&clearTimeout(s),u=0,r=c=o=s=void 0},g.flush=function(){return void 0===s?a:v(te())},g}function oe(t,e,n){var r=!0,o=!0;if("function"!=typeof t)throw new TypeError("Expected a function");return _(n)&&(r="leading"in n?!!n.leading:r,o="trailing"in n?!!n.trailing:o),re(t,e,{leading:r,maxWait:e,trailing:o})}const ie=function(t,e={}){let n=e;const r={all:[]};return{subscribe:function(...t){let e,n="all";"string"==typeof t[0]?(n=t[0],e=t[1]):e=t[0],r[n]||(r[n]=[]),r[n].push(e)},dispatch:function(e){const o=n;if(n=t(n,e),!e)return void(r.all&&r.all.forEach(t=>t(n)));const a=function(t){const e={player:Object.keys(i),progress:Object.keys(s)};for(let[n,r]of Object.entries(e))if(r.includes(t))return n;return null}(e.type);return a&&r[a]?r[a].forEach(t=>{var e,r;e=n[a],r=o[a],Qt(e,r)||t(n[a])}):void 0},getState:function(){return n}}}(function(t){const e=Object.keys(t);return function(n,r){const o={};for(let i=0;i{const e={},n=t.attributes;return t.checked&&(e.checked="true"),n&&n.length?Object.values(n).reduce((t,e)=>{const[n,r]=se(e);return n&&(t[n]=r),t},e):e},se=t=>{let{name:e,value:n}=t;if("href"===e||"src"===e)if(/^\/(?!\/)/.test(n)){n=location.origin+n}else if(n.startsWith("#/"))return[];return[e,n]},ce=(t,n)=>{if(t.nodeType===Node.TEXT_NODE)return null;if("SCRIPT"===t.tagName)return null;const r=((t,n)=>{const r=t.tagName.toLocaleLowerCase().trim();return{id:e.createNodeId(),attrs:ae(t),tag:r,children:[],extra:{isSVG:n||"svg"===r}}})(t,n),{id:o}=r;return e.addNode(t,o),n=n||r.extra.isSVG,t.childNodes.forEach(t=>{if(t.nodeType===Node.ELEMENT_NODE){const e=ce(t,n);e&&r.children.push(e)}else if(t.nodeType===Node.TEXT_NODE&&t.nodeValue){const e=ue(t.nodeValue);e&&r.children.push(e)}}),r},ue=t=>t.replace(/\r\n/g,"").replace(/\n/g,""),de=t=>{const{head:n,body:r}=t;return{id:e.createNodeId(),tag:"html",attrs:{},children:[ce(n),ce(r)],extra:{isSVG:!1}}};function le(t,e,n){if("style"!==e){if(!/^on\w+$/.test(e))return t.setAttribute(e,!0===n?"":String(n))}else if(n)if("string"==typeof n)t.style.cssText=n;else if(null!==n&&"object"==typeof n)for(const[e,r]of Object.entries(n))t.style[e]=r}function he(t,n){if(null==t)return null;if("string"==typeof t)return function(t,e){let n;return n=document.createTextNode(t),n}(t);const r=function(t){const{id:n,extra:r}=t,{isSVG:o}=r;let i;const a=(s=t.tag,{script:"noscript"}[s]||s);var s;i=o?document.createElementNS("http://www.w3.org/2000/svg",a):document.createElement(a);return e.updateNode(n,i),i}(t);return(t.children&&t.children.length||r.childNodes&&r.childNodes.length)&&function(t,e){const n=[];t.children.slice().forEach(t=>{let r=n.pop();r=he(t),r&&e.appendChild(r)})}(t,r),function(t,e){const{attrs:n}=t;for(const[t,r]of Object.entries(n))le(e,t,r)}(t,r),r}var pe,fe,be,ye;!function(t){t.WINDOW="WINDOW",t.DOM="DOM",t.MOUSE="MOUSE",t.DOM_UPDATE="DOM_UPDATE",t.FORM_EL_UPDATE="FORM_EL_UPDATE"}(pe||(pe={})),function(t){t.ATTR="ATTR",t.INPUT="INPUT",t.CHANGE="CHANGE",t.FOCUS="FOCUS",t.BLUR="BLUR"}(fe||(fe={})),function(t){t.MOVE="MOVE",t.CLICK="click"}(be||(be={})),function(t){t.ADD="ADD",t.DELETE="DELETE",t.MOVE="MOVE"}(ye||(ye={}));const ve={windowSnapshot:function(t){const e=window.location.href;var n=window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth,r=window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight;t({type:pe.WINDOW,data:{width:n,height:r,href:e},time:Date.now().toString()})},DOMSnapshot:function(t){t({type:pe.DOM,data:{vNode:de(document)},time:Date.now().toString()})},mouseObserve:function(n){!function(){const e=oe(t=>{n({type:pe.MOUSE,data:{type:be.MOVE,x:t.x,y:t.y},time:Date.now().toString()})},100,{trailing:!0});document.addEventListener("mousemove",e),t.add(()=>{document.removeEventListener("mousemove",e)})}(),function(){const r=oe(t=>{n({type:pe.MOUSE,data:{type:be.CLICK,id:e.getNodeId(t.target),x:t.x,y:t.y},time:Date.now().toString()})},250);t.add(()=>{document.removeEventListener("click",r)}),document.addEventListener("click",r)}()},DOMObserve:function(n){const r=new MutationObserver(t=>{const r=[];t.forEach(t=>{const{target:n,addedNodes:o,removedNodes:i,type:a,nextSibling:s,attributeName:c}=t,u=(d=a,function(t){r.push({mType:d,data:t})});var d;switch(a){case"attributes":if(c){const t=n.getAttribute(c);u({nodeId:e.getNodeId(n),value:t,attr:c})}break;case"characterData":const t=n.parentNode;u({parentId:e.getNodeId(t),value:n.nodeValue,pos:t.childNodes.length>0?[...t.childNodes].indexOf(n):null});break;case"childList":o.length&&o.forEach(t=>{let r,o;if(t.nodeType===Node.TEXT_NODE){r=t.nodeValue;const n=Array.from(t.parentNode.childNodes).indexOf(t);u({type:ye.ADD,parentId:e.getNodeId(t.parentNode),value:t.textContent,pos:n})}else{o=ce(t);const r=t.parentNode;u({type:ye.ADD,parentId:e.getNodeId(n),vNode:o,pos:r.childNodes.length>0?[...r.childNodes].indexOf(t):null})}}),i.length&&i.forEach(t=>{u({type:ye.DELETE,parentId:e.getNodeId(n),nodeId:e.getNodeId(t)||null})})}}),r.length&&n({type:pe.DOM_UPDATE,data:{mutations:r},time:Date.now().toString()})});r.observe(document.body,{attributeOldValue:!0,attributes:!0,characterData:!0,characterDataOldValue:!0,childList:!0,subtree:!0}),t.add(()=>{r.disconnect()})},formElementObserve:function(n){!function(n){const r=["input","change","focus","blur"];function o(t){switch(t.type){case"input":case"change":n({type:pe.FORM_EL_UPDATE,data:{type:fe.INPUT,id:e.getNodeId(t.target),value:t.target.value},time:Date.now().toString()});break;case"focus":n({type:pe.FORM_EL_UPDATE,data:{type:fe.FOCUS,id:e.getNodeId(t.target)},time:Date.now().toString()});break;case"blur":n({type:pe.FORM_EL_UPDATE,data:{type:fe.BLUR,id:e.getNodeId(t.target)},time:Date.now().toString()})}}r.map(t=>e=>{document.addEventListener(t,e,{once:!1,passive:!0,capture:!0})}).forEach(t=>t(o)),t.add(()=>{r.forEach(t=>{document.removeEventListener(t,o,!0)})})}(n),function(n){function r(t,r){n({type:pe.FORM_EL_UPDATE,data:{type:fe.ATTR,id:e.getNodeId(this),key:t,value:r},time:Date.now().toString()})}[[HTMLInputElement.prototype,"value"],[HTMLInputElement.prototype,"checked"],[HTMLSelectElement.prototype,"value"],[HTMLTextAreaElement.prototype,"value"]].map(e=>()=>{const[n,o]=e,i=Object.getOwnPropertyDescriptor(n,o);Object.defineProperty(n,o,{set:function(t){setTimeout(()=>{r.call(this,o,t)}),i&&i.set&&i.set.call(this,t)}}),t.add(()=>{i&&Object.defineProperty(n,o,i)})}).concat([]).forEach(t=>t())}(n)}},ge={uninstall:()=>{Array.from(t.values()).forEach(t=>t())}};class me{constructor(t){this.vNode=t.vNode,this.width=t.width,this.height=t.height,this.init()}init(){this.initTemplate(),this.initSandbox()}initSandbox(){this.sandBox=this.container.querySelector("#wr-sandbox"),this.sandBox.style.width=this.width+"px",this.sandBox.style.height=this.height+"px";const t=this.sandBox.contentWindow.document,e=he(this.vNode);if(e){const n=e.firstChild;n&&n.appendChild(this.createStyle('input[type="checkbox"] {\n pointer-events: none;\n}\n')),t.replaceChild(e,t.documentElement)}}insertFixed(){}initTemplate(){document.head.appendChild(this.createStyle("body {\n margin: 0;\n}\n\n#wr-sandbox {\n background: white;\n vertical-align: top;\n border: 0;\n}\n\n#wr-player {\n position: relative;\n}\n\n#wr-pointer {\n width: 10px;\n height: 10px;\n position: absolute;\n transition: all .2s\n}\n\n#wr-pointer[active] svg {\n fill: red;\n transform: scale3d(1.2, 1.2, 1.2);\n}\n\n.wr-container {\n background: grey;\n}\n\n.wr-panel {\n width: 100%;\n box-sizing: border-box;\n padding: 10px;\n height: 40px;\n position: absolute;\n left: 0;\n bottom: 0;\n background: darkgray;\n}\n\n.wr-keyboard {\n float: left;\n width: 200px;\n}\n\n.wr-progress {\n margin-left: 200px;\n height: 20px;\n overflow: hidden;\n width: calc(100% - 200px);\n}\n\n.wr-slider-bar {\n position: relative;\n padding: 0 5px;\n width: calc(100% - 22px);\n height: 5px;\n margin: 7.5px 0;\n background: white;\n border-radius: 2.5px;\n}\n\n.wr-thumb {\n width: 12px;\n height: 12px;\n box-sizing: border-box;\n border: 1px solid white;\n background: black;\n border-radius: 100%;\n cursor: pointer;\n position: absolute;\n left: 0%;\n transform: translateY(-3px);\n z-index: 10;\n transition: left .01s linear;\n}\n")),document.body.appendChild(this.createContainer())}createContainer(){const t=(new DOMParser).parseFromString('
\n
\n
\n \n
\n
\n
\n \n \n \n \n \n
\n
\n
\n
\n
\n
\n
\n
\n \n \n \n
\n
\n
\n',"text/html").body.firstChild;return t.style.width=this.width+"px",t.style.height=this.height+"px",t.style.position="relative",t.style.margin="0 auto",t.style.overflow="hidden",this.container=t}createStyle(t){return(new DOMParser).parseFromString(``,"text/html").head.firstChild}}class we{constructor(t){this.container=t,this.init()}init(){this.controller=this.container.querySelector(".wr-keyboard"),this.pauseBtn=this.controller.querySelector(".pause"),this.playBtn=this.controller.querySelector(".play"),this.controller.addEventListener("click",t=>{if(t.target&&"button"===t.target.type){const e=Number(t.target.getAttribute("speed"));this.speed=e,ie.dispatch({type:i.SPEED,data:{speed:e}})}}),ie.subscribe("player",t=>{this.paly(t.speed),this.setSpeed(t.speed)})}paly(t){0!==t?(this.pauseBtn.removeAttribute("disabled"),this.playBtn.setAttribute("disabled","")):(this.playBtn.removeAttribute("disabled"),this.pauseBtn.setAttribute("disabled",""))}setSpeed(t){const e=this.container.querySelectorAll(".speed");[...e].forEach(t=>{t.removeAttribute("disabled")});const n=1===t?0:8===t?1:16===t?2:-1;n>-1&&e[n].setAttribute("disabled","")}}function _e(t){const{type:n,data:r}=t;switch(n){case pe.MOUSE:const{x:t,y:n,type:o}=r;o===be.MOVE?this.pointer.move(t,n):o===be.CLICK&&this.pointer.click(t,n);break;case pe.DOM_UPDATE:const{mutations:i}=r;i.forEach(t=>{const{mType:n,data:r}=t,{value:o,attr:i,type:a,parentId:s,pos:c,nodeId:u,vNode:d}=r;switch(n){case"attributes":e.getNode(u).setAttribute(i,o);break;case"characterData":const t=e.getNode(s);if(null!==c){const e=t.childNodes[c];t.replaceChild(document.createTextNode(o),e)}else t.innerText=o;break;case"childList":const n=e.getNode(s),r=e.getNode(u)||he(d);if(a===ye.DELETE)r&&n.removeChild(r);else if(ye.ADD)if(o){const t=document.createTextNode(o);n.childNodes.length?n.replaceChild(t,n.childNodes[c]):n.appendChild(t)}else n.insertBefore(r,n.childNodes[c])}});break;case pe.FORM_EL_UPDATE:const{id:a,key:s,type:c,value:u}=r,d=e.getNode(a);c===fe.INPUT?d.value=u:c===fe.FOCUS?d.focus():c===fe.BLUR?d.blur():c===fe.ATTR&&(d[s]=u)}}class je{constructor(t,e,n){this.speed=0,this.index=0,this.frameIndex=0,this.lastPercentage=0,this.data=t,this.pointer=e,this.progress=n,ie.subscribe("player",t=>{this.progressState=ie.getState().progress;const e=t.speed;this.speed=e,e>0?this.play(e):this.pause(),this.frames=this.getAccuratelyFrame()})}play(t){cancelAnimationFrame(this.requestID),this.requestID=requestAnimationFrame(function n(){const r=Date.now()-e;if(this.frameIndex>0&&!this.frames[this.frameIndex+1])return void this.stop();this.startTime||(this.startTime=Number(this.frames[this.frameIndex]));const o=this.startTime+r*t,i=Number(this.frames[this.frameIndex+1]);if(o>=i){this.frameIndex++;const t=this.frameIndex/this.frames.length*100;t-this.lastPercentage>this.getPercentInterval()&&(this.progress.updateProgress(t),this.lastPercentage=t),this.data[this.index]&&o>+this.data[this.index].time&&(this.execFrame.call(this,this.data[this.index]),this.index++)}this.requestID=requestAnimationFrame(n.bind(this))}.bind(this));const e=Date.now();this.startTime=0}pause(){cancelAnimationFrame(this.requestID),ie.dispatch({type:i.SPEED,data:{speed:0}})}stop(){this.index=0,this.pause()}execFrame(t){_e.call(this,t)}getPercentInterval(){return.08*this.speed+.2}getAccuratelyFrame(t=50){this.progressState=ie.getState().progress;const{startTime:e,endTime:n}=this.progressState,r=+n+500,o=[];for(let n=+e;n{this.pointer.removeAttribute("active")},20)}}class Oe{constructor(t){this.totalDistance=0,this.progress=t.querySelector(".wr-progress"),this.thumb=this.progress.querySelector(".wr-thumb"),this.slider=this.progress.querySelector(".wr-slider-bar")}updateProgress(t){this.thumb.style.left=t+"%"}}class Ee{constructor(t,e){this.container=t,this.data=e,this.initComponent()}initComponent(){this.keyboard=new we(this.container),this.progress=new Oe(this.container),this.pointer=new xe,this.player=new je(this.data,this.pointer,this.progress)}}exports.DB=r,exports.record=({emitter:t}={})=>(function(t){[...Object.values(ve)].forEach(e=>{e(t)})}(t),ge),exports.replay=async function(){const t=await r,{width:e,height:n,vNode:o,data:a}=await t.getData(),c=new me({vNode:o,width:e,height:n});new Ee(c.container,a),ie.dispatch({type:s.INFO,data:{frame:0,curTime:a[0].time,startTime:a[0].time,endTime:a[a.length-1].time,length:a.length}}),window.onload=()=>{ie.dispatch({type:i.SPEED,data:{speed:1}})}}; //# sourceMappingURL=replay.cjs.js.map diff --git a/dist/replay.cjs.js.map b/dist/replay.cjs.js.map index 4c25b892..310a8115 100644 --- a/dist/replay.cjs.js.map +++ b/dist/replay.cjs.js.map @@ -1 +1 @@ -{"version":3,"file":"replay.cjs.js","sources":["../packages/utils/src/store/listener.ts","../packages/utils/src/store/node.ts","../packages/utils/src/store/data.ts","../packages/utils/src/redux/reducers/player.ts","../packages/utils/src/redux/reducers/progress.ts","../node_modules/lodash-es/_freeGlobal.js","../node_modules/lodash-es/_root.js","../node_modules/lodash-es/_Symbol.js","../node_modules/lodash-es/_getRawTag.js","../node_modules/lodash-es/_objectToString.js","../node_modules/lodash-es/_baseGetTag.js","../node_modules/lodash-es/isObjectLike.js","../node_modules/lodash-es/isArray.js","../node_modules/lodash-es/isObject.js","../node_modules/lodash-es/toNumber.js","../node_modules/lodash-es/isSymbol.js","../node_modules/lodash-es/isFunction.js","../node_modules/lodash-es/_coreJsData.js","../node_modules/lodash-es/_isMasked.js","../node_modules/lodash-es/_toSource.js","../node_modules/lodash-es/_baseIsNative.js","../node_modules/lodash-es/_getNative.js","../node_modules/lodash-es/_getValue.js","../node_modules/lodash-es/_WeakMap.js","../node_modules/lodash-es/_isIndex.js","../node_modules/lodash-es/eq.js","../node_modules/lodash-es/isLength.js","../node_modules/lodash-es/_isPrototype.js","../node_modules/lodash-es/_baseIsArguments.js","../node_modules/lodash-es/isArguments.js","../node_modules/lodash-es/isBuffer.js","../node_modules/lodash-es/stubFalse.js","../node_modules/lodash-es/_baseIsTypedArray.js","../node_modules/lodash-es/_nodeUtil.js","../node_modules/lodash-es/_baseUnary.js","../node_modules/lodash-es/isTypedArray.js","../node_modules/lodash-es/_arrayLikeKeys.js","../node_modules/lodash-es/_baseTimes.js","../node_modules/lodash-es/_nativeKeys.js","../node_modules/lodash-es/_overArg.js","../node_modules/lodash-es/_baseKeys.js","../node_modules/lodash-es/keys.js","../node_modules/lodash-es/isArrayLike.js","../node_modules/lodash-es/_nativeCreate.js","../node_modules/lodash-es/_hashGet.js","../node_modules/lodash-es/_hashHas.js","../node_modules/lodash-es/_Hash.js","../node_modules/lodash-es/_assocIndexOf.js","../node_modules/lodash-es/_hashClear.js","../node_modules/lodash-es/_hashDelete.js","../node_modules/lodash-es/_hashSet.js","../node_modules/lodash-es/_listCacheDelete.js","../node_modules/lodash-es/_ListCache.js","../node_modules/lodash-es/_listCacheClear.js","../node_modules/lodash-es/_listCacheGet.js","../node_modules/lodash-es/_listCacheHas.js","../node_modules/lodash-es/_listCacheSet.js","../node_modules/lodash-es/_Map.js","../node_modules/lodash-es/_getMapData.js","../node_modules/lodash-es/_isKeyable.js","../node_modules/lodash-es/_MapCache.js","../node_modules/lodash-es/_mapCacheClear.js","../node_modules/lodash-es/_mapCacheDelete.js","../node_modules/lodash-es/_mapCacheGet.js","../node_modules/lodash-es/_mapCacheHas.js","../node_modules/lodash-es/_mapCacheSet.js","../node_modules/lodash-es/_Stack.js","../node_modules/lodash-es/_stackClear.js","../node_modules/lodash-es/_stackDelete.js","../node_modules/lodash-es/_stackGet.js","../node_modules/lodash-es/_stackHas.js","../node_modules/lodash-es/_stackSet.js","../node_modules/lodash-es/_getSymbols.js","../node_modules/lodash-es/_arrayFilter.js","../node_modules/lodash-es/stubArray.js","../node_modules/lodash-es/_getAllKeys.js","../node_modules/lodash-es/_baseGetAllKeys.js","../node_modules/lodash-es/_arrayPush.js","../node_modules/lodash-es/_DataView.js","../node_modules/lodash-es/_Promise.js","../node_modules/lodash-es/_Set.js","../node_modules/lodash-es/_getTag.js","../node_modules/lodash-es/_Uint8Array.js","../node_modules/lodash-es/_SetCache.js","../node_modules/lodash-es/_arraySome.js","../node_modules/lodash-es/_setCacheAdd.js","../node_modules/lodash-es/_setCacheHas.js","../node_modules/lodash-es/_equalArrays.js","../node_modules/lodash-es/_cacheHas.js","../node_modules/lodash-es/_mapToArray.js","../node_modules/lodash-es/_setToArray.js","../node_modules/lodash-es/_equalByTag.js","../node_modules/lodash-es/_equalObjects.js","../node_modules/lodash-es/_baseIsEqualDeep.js","../node_modules/lodash-es/_baseIsEqual.js","../node_modules/lodash-es/now.js","../node_modules/lodash-es/debounce.js","../node_modules/lodash-es/throttle.js","../packages/utils/src/redux/index.ts","../packages/utils/src/redux/create-store.ts","../node_modules/lodash-es/isEqual.js","../packages/utils/src/redux/combine-reducers.ts","../packages/virtual-dom/src/serialize.ts","../packages/virtual-dom/src/dom.ts","../packages/virtual-dom/src/deserialize.ts","../packages/snapshot/src/types.ts","../packages/snapshot/src/snapshot.ts","../packages/record/src/record.ts","../packages/player/src/container.ts","../packages/player/src/keyboard.ts","../packages/player/src/dom.ts","../packages/player/src/player.ts","../packages/player/src/pointer.ts","../packages/player/src/progress.ts","../packages/player/src/panel.ts","../packages/player/src/index.ts"],"sourcesContent":["export const listenerStore = new Set()\n","class NodeStore {\n private nodeId = 1\n private nodeMap: Map = new Map()\n private idMap: WeakMap = new WeakMap()\n\n public createNodeId = () => this.nodeId++\n\n public getNode(id: number) {\n return this.nodeMap.get(id)\n }\n\n public addNode(node: Node, id: number = this.createNodeId()) {\n this.idMap.set(node, id)\n this.nodeMap.set(id, node)\n return id\n }\n\n public removeNode(id: number) {\n this.nodeMap.delete(id)\n this.idMap.delete(this.getNode(id) as Node)\n }\n\n public getNodeId(node: Node) {\n return this.idMap.get(node)\n }\n\n public updateNode(id: number, node: Node) {\n this.idMap.set(node, id)\n this.nodeMap.set(id, node)\n }\n}\n\nexport const nodeStore = new NodeStore()\n","import { SnapshotData, WindowSnapshotData, DOMSnapshotData } from '@WebReplay/snapshot'\n\nexport class IndexDBOperator {\n db: IDBDatabase\n DBName: string\n version: number\n storeName: string\n\n constructor(DBName: string, version: number, storeName: string, callback: (db: IDBDatabase) => void) {\n this.DBName = DBName\n this.version = version\n this.storeName = storeName\n\n const request = window.indexedDB.open(DBName, version)\n request.onerror = e => {\n console.error('open IndexDB on error')\n }\n\n request.onsuccess = e => {\n this.db = request.result\n\n // this.clear()\n\n callback(this.db)\n }\n\n request.onupgradeneeded = e => {\n const db = e.target!.result\n\n if (!db.objectStoreNames.contains(storeName)) {\n const objectStore = db.createObjectStore(storeName, { autoIncrement: true, keyPath: 'id' })\n objectStore.createIndex('type', 'type', { unique: false })\n objectStore.createIndex('data', 'data', { unique: false })\n objectStore.createIndex('time', 'time', { unique: false })\n }\n }\n }\n\n add(data: SnapshotData) {\n const request = this.db\n .transaction([`${this.storeName}`], 'readwrite')\n .objectStore(`${this.storeName}`)\n .add(data)\n\n request.onerror = e => {\n throw new Error('write IndexDB on error')\n }\n }\n\n clear() {\n const objectStore = this.db.transaction([`${this.storeName}`], 'readwrite').objectStore(`${this.storeName}`)\n objectStore.clear()\n }\n\n async readAll(): Promise {\n const objectStore = this.db.transaction([`${this.storeName}`], 'readwrite').objectStore(`${this.storeName}`)\n return new Promise(resolve => {\n objectStore.getAll().onsuccess = event => {\n const result = event!.target!.result as SnapshotData[]\n resolve(result)\n }\n })\n }\n\n async getData() {\n const all = await this.readAll()\n\n const [window, virtualNode, ...data] = all\n const [{ width, height }, { vNode }] = [window.data, virtualNode.data] as [WindowSnapshotData, DOMSnapshotData]\n\n return {\n width,\n height,\n vNode,\n data\n }\n }\n}\n\nexport const DBPromise: Promise = new Promise(resolve => {\n const indexDB = new IndexDBOperator('wr_db', 1, 'wr_data', () => {\n resolve(indexDB)\n })\n})\n","import { State } from '../create-store'\n\nlet initState = {\n speed: null\n}\n\nexport enum PlayerTypes {\n SPEED = 'SPEED'\n}\n\nexport type PlayerState = typeof PlayerTypes\n\nexport default function playerReducer(state: State, action: any) {\n if (!state) {\n state = initState\n }\n if (!action) {\n return state\n }\n const { type, data } = action\n\n switch (type) {\n case PlayerTypes.SPEED:\n return {\n ...state,\n ...data\n }\n default:\n return state\n }\n}\n","import { State } from '../create-store'\n\nconst initState = {\n frame: 0,\n length: 0,\n curTime: 0,\n startTime: 0,\n endTime: 0\n}\n\nexport type ProgressState = typeof initState\n\nexport enum ProgressTypes {\n FORWARD = 'FORWARD',\n BACKWARD = 'BACKWARD',\n INFO = 'INFO'\n}\n\nexport default function progressReducer(state: State, action?: any) {\n if (!state) {\n state = initState\n }\n\n if (!action) {\n return state\n }\n\n const { type, data } = action\n\n switch (type) {\n case ProgressTypes.FORWARD:\n return {\n ...state,\n frame: data.frame,\n curTime: data.curTime\n }\n case ProgressTypes.BACKWARD:\n return {\n ...state,\n frame: data.frame\n }\n case ProgressTypes.INFO:\n return {\n ...state,\n ...data\n }\n default:\n return state\n }\n}\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nexport default freeGlobal;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nexport default root;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nexport default Symbol;\n","import Symbol from './_Symbol.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nexport default getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nexport default objectToString;\n","import Symbol from './_Symbol.js';\nimport getRawTag from './_getRawTag.js';\nimport objectToString from './_objectToString.js';\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nexport default baseGetTag;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nexport default isObjectLike;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nexport default isArray;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nexport default isObject;\n","import isObject from './isObject.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nexport default toNumber;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nexport default isSymbol;\n","import baseGetTag from './_baseGetTag.js';\nimport isObject from './isObject.js';\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nexport default isFunction;\n","import root from './_root.js';\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nexport default coreJsData;\n","import coreJsData from './_coreJsData.js';\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nexport default isMasked;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nexport default toSource;\n","import isFunction from './isFunction.js';\nimport isMasked from './_isMasked.js';\nimport isObject from './isObject.js';\nimport toSource from './_toSource.js';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nexport default baseIsNative;\n","import baseIsNative from './_baseIsNative.js';\nimport getValue from './_getValue.js';\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nexport default getNative;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nexport default getValue;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nexport default WeakMap;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\nexport default isIndex;\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\nexport default eq;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nexport default isLength;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\nexport default isPrototype;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nexport default baseIsArguments;\n","import baseIsArguments from './_baseIsArguments.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\nexport default isArguments;\n","import root from './_root.js';\nimport stubFalse from './stubFalse.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nexport default isBuffer;\n","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nexport default stubFalse;\n","import baseGetTag from './_baseGetTag.js';\nimport isLength from './isLength.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nexport default baseIsTypedArray;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\nexport default nodeUtil;\n","/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\nexport default baseUnary;\n","import baseIsTypedArray from './_baseIsTypedArray.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nexport default isTypedArray;\n","import baseTimes from './_baseTimes.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isIndex from './_isIndex.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default arrayLikeKeys;\n","/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\nexport default baseTimes;\n","import overArg from './_overArg.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nexport default nativeKeys;\n","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\nexport default overArg;\n","import isPrototype from './_isPrototype.js';\nimport nativeKeys from './_nativeKeys.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default baseKeys;\n","import arrayLikeKeys from './_arrayLikeKeys.js';\nimport baseKeys from './_baseKeys.js';\nimport isArrayLike from './isArrayLike.js';\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nexport default keys;\n","import isFunction from './isFunction.js';\nimport isLength from './isLength.js';\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\nexport default isArrayLike;\n","import getNative from './_getNative.js';\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nexport default nativeCreate;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nexport default hashGet;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nexport default hashHas;\n","import hashClear from './_hashClear.js';\nimport hashDelete from './_hashDelete.js';\nimport hashGet from './_hashGet.js';\nimport hashHas from './_hashHas.js';\nimport hashSet from './_hashSet.js';\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nexport default Hash;\n","import eq from './eq.js';\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\nexport default assocIndexOf;\n","import nativeCreate from './_nativeCreate.js';\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\nexport default hashClear;\n","/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\nexport default hashDelete;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\nexport default hashSet;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\nexport default listCacheDelete;\n","import listCacheClear from './_listCacheClear.js';\nimport listCacheDelete from './_listCacheDelete.js';\nimport listCacheGet from './_listCacheGet.js';\nimport listCacheHas from './_listCacheHas.js';\nimport listCacheSet from './_listCacheSet.js';\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nexport default ListCache;\n","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\nexport default listCacheClear;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\nexport default listCacheGet;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\nexport default listCacheHas;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\nexport default listCacheSet;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nexport default Map;\n","import isKeyable from './_isKeyable.js';\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\nexport default getMapData;\n","/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\nexport default isKeyable;\n","import mapCacheClear from './_mapCacheClear.js';\nimport mapCacheDelete from './_mapCacheDelete.js';\nimport mapCacheGet from './_mapCacheGet.js';\nimport mapCacheHas from './_mapCacheHas.js';\nimport mapCacheSet from './_mapCacheSet.js';\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nexport default MapCache;\n","import Hash from './_Hash.js';\nimport ListCache from './_ListCache.js';\nimport Map from './_Map.js';\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\nexport default mapCacheClear;\n","import getMapData from './_getMapData.js';\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\nexport default mapCacheDelete;\n","import getMapData from './_getMapData.js';\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\nexport default mapCacheGet;\n","import getMapData from './_getMapData.js';\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\nexport default mapCacheHas;\n","import getMapData from './_getMapData.js';\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\nexport default mapCacheSet;\n","import ListCache from './_ListCache.js';\nimport stackClear from './_stackClear.js';\nimport stackDelete from './_stackDelete.js';\nimport stackGet from './_stackGet.js';\nimport stackHas from './_stackHas.js';\nimport stackSet from './_stackSet.js';\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\nexport default Stack;\n","import ListCache from './_ListCache.js';\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n}\n\nexport default stackClear;\n","/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n}\n\nexport default stackDelete;\n","/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\nexport default stackGet;\n","/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\nexport default stackHas;\n","import ListCache from './_ListCache.js';\nimport Map from './_Map.js';\nimport MapCache from './_MapCache.js';\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n}\n\nexport default stackSet;\n","import arrayFilter from './_arrayFilter.js';\nimport stubArray from './stubArray.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n};\n\nexport default getSymbols;\n","/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n}\n\nexport default arrayFilter;\n","/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\nexport default stubArray;\n","import baseGetAllKeys from './_baseGetAllKeys.js';\nimport getSymbols from './_getSymbols.js';\nimport keys from './keys.js';\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\n\nexport default getAllKeys;\n","import arrayPush from './_arrayPush.js';\nimport isArray from './isArray.js';\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\nexport default baseGetAllKeys;\n","/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\nexport default arrayPush;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nexport default DataView;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nexport default Promise;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nexport default Set;\n","import DataView from './_DataView.js';\nimport Map from './_Map.js';\nimport Promise from './_Promise.js';\nimport Set from './_Set.js';\nimport WeakMap from './_WeakMap.js';\nimport baseGetTag from './_baseGetTag.js';\nimport toSource from './_toSource.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n setTag = '[object Set]',\n weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\nexport default getTag;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nexport default Uint8Array;\n","import MapCache from './_MapCache.js';\nimport setCacheAdd from './_setCacheAdd.js';\nimport setCacheHas from './_setCacheHas.js';\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\nexport default SetCache;\n","/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\nfunction arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n}\n\nexport default arraySome;\n","/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\nexport default setCacheAdd;\n","/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\nexport default setCacheHas;\n","import SetCache from './_SetCache.js';\nimport arraySome from './_arraySome.js';\nimport cacheHas from './_cacheHas.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(array);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n}\n\nexport default equalArrays;\n","/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\nexport default cacheHas;\n","/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\nexport default mapToArray;\n","/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\nexport default setToArray;\n","import Symbol from './_Symbol.js';\nimport Uint8Array from './_Uint8Array.js';\nimport eq from './eq.js';\nimport equalArrays from './_equalArrays.js';\nimport mapToArray from './_mapToArray.js';\nimport setToArray from './_setToArray.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n}\n\nexport default equalByTag;\n","import getAllKeys from './_getAllKeys.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n}\n\nexport default equalObjects;\n","import Stack from './_Stack.js';\nimport equalArrays from './_equalArrays.js';\nimport equalByTag from './_equalByTag.js';\nimport equalObjects from './_equalObjects.js';\nimport getTag from './_getTag.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\nexport default baseIsEqualDeep;\n","import baseIsEqualDeep from './_baseIsEqualDeep.js';\nimport isObjectLike from './isObjectLike.js';\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\nexport default baseIsEqual;\n","import root from './_root.js';\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nexport default now;\n","import isObject from './isObject.js';\nimport now from './now.js';\nimport toNumber from './toNumber.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nexport default debounce;\n","import debounce from './debounce.js';\nimport isObject from './isObject.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\nfunction throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n}\n\nexport default throttle;\n","import { createStore } from './create-store'\nimport { combineReducers } from './combine-reducers'\n\nimport progressReducer from './reducers/progress'\nimport playerReducer from './reducers/player'\n\nconst reducer = combineReducers({\n player: playerReducer,\n progress: progressReducer\n})\n\nexport { PlayerTypes, PlayerState } from './reducers/player'\nexport { ProgressTypes, ProgressState } from './reducers/progress'\n\nexport const reduxStore = createStore(reducer)\n","import { PlayerTypes } from './reducers/player'\nimport { ProgressTypes } from './reducers/progress'\nimport { isEqual } from 'lodash-es'\n\nexport type State = { [key: string]: any }\n\nexport function createStore(reducer: (state: State, action: any) => State, initState: State = {}) {\n let state = initState\n\n const topics = {\n all: []\n } as { [key: string]: Function[] }\n\n function subscribe(type: string, listener: (state: State) => void): void\n function subscribe(listener: (state: State) => void): void\n\n function subscribe(...args: any): void {\n let type = 'all'\n let listener\n if (typeof args[0] === 'string') {\n type = args[0]\n listener = args[1]\n } else {\n listener = args[0]\n }\n if (!topics[type]) {\n topics[type] = []\n }\n topics[type].push(listener)\n }\n\n function dispatch(action?: { type: string; data?: any }) {\n const oldState = state\n state = reducer(state, action)\n\n if (!action) {\n // dispatch all\n if (topics['all']) {\n topics['all'].forEach(listener => listener(state))\n }\n return\n }\n\n const topicName = getTypeInTopics(action.type)\n if (topicName && topics[topicName]) {\n return topics[topicName].forEach(listener => {\n if (!isEqual(state[topicName], oldState[topicName])) {\n listener(state[topicName])\n }\n })\n }\n }\n\n function getState() {\n return state\n }\n\n function getTypeInTopics(type: string) {\n const topics = {\n player: Object.keys(PlayerTypes),\n progress: Object.keys(ProgressTypes)\n } as { [key: string]: string[] }\n\n for (let [key, enums] of Object.entries(topics)) {\n if (enums.includes(type)) {\n return key\n }\n }\n return null\n }\n\n return {\n subscribe,\n dispatch,\n getState\n }\n}\n","import baseIsEqual from './_baseIsEqual.js';\n\n/**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\nfunction isEqual(value, other) {\n return baseIsEqual(value, other);\n}\n\nexport default isEqual;\n","import { State } from './create-store'\n\nexport type Action = { type: string; state: State }\nexport type Reducer = (state: State, action?: Action) => State\n\nexport function combineReducers(reducers: { [key: string]: Reducer }) {\n const reducerKeys = Object.keys(reducers)\n return function combination(state: State, action?: Action) {\n const nextState = {} as State\n\n for (let i = 0; i < reducerKeys.length; i++) {\n const key = reducerKeys[i] // reducer name\n\n const reducer = reducers[key]\n\n const previousStateForKey = state[key]\n\n const nextStateForKey = reducer(previousStateForKey, action)\n\n nextState[key] = nextStateForKey\n }\n return nextState\n }\n}\n","import { VNode } from './types'\nimport { nodeStore } from '@WebReplay/utils'\n\nconst getVNodeByEl = (el: Element, isSVG?: boolean): VNode => {\n const tagName = el.tagName.toLocaleLowerCase().trim()\n return {\n id: nodeStore.createNodeId(),\n attrs: getAttr(el as HTMLElement & { checked: boolean }),\n tag: tagName,\n children: [] as VNode[],\n extra: { isSVG: isSVG || tagName === 'svg' }\n }\n}\n\nconst getAttr = (el: HTMLElement & { checked: boolean }) => {\n const resAttr: { [key: string]: string } = {}\n const attrs = el.attributes\n\n if (el.checked) {\n resAttr.checked = 'true'\n }\n\n if (attrs && attrs.length) {\n return Object.values(attrs).reduce((ret: any, attr) => {\n // const [name, value] = extraAttr(attr)\n const { name, value } = attr\n ret[name] = value\n return ret\n }, resAttr)\n }\n return resAttr\n}\n\n// const extraAttr = (attr: Attr) => {\n// let { name, value } = attr\n// if (name === 'href' || name === 'src') {\n// if (/^\\/(?!\\/)/.test(value)) {\n// const host = `https://github.com`\n// value = host + value\n// }\n// }\n// return [name, value]\n// }\n\nexport const createElement = (el: Element, inheritSVG?: boolean): VNode | null => {\n if (el.nodeType === Node.TEXT_NODE) {\n return null\n }\n if (el.tagName === 'SCRIPT') {\n return null\n }\n const vNode = getVNodeByEl(el, inheritSVG)\n const { id } = vNode\n nodeStore.addNode(el, id)\n inheritSVG = inheritSVG || vNode.extra.isSVG\n el.childNodes.forEach((node: Element) => {\n if (node.nodeType === Node.ELEMENT_NODE) {\n const child = createElement(node, inheritSVG)\n if (child) {\n vNode.children.push(child)\n }\n } else if (node.nodeType === Node.TEXT_NODE) {\n if (node.nodeValue) {\n const text = trimNodeText(node.nodeValue)\n if (text) {\n vNode.children.push(text)\n }\n }\n }\n })\n return vNode\n}\n\nconst trimNodeText = (nodeValue: string) => {\n return nodeValue.replace(/\\r\\n/g, '').replace(/\\n/g, '')\n}\n\nconst convertHTML = (doc: Document) => {\n const { head, body } = doc\n return {\n id: nodeStore.createNodeId(),\n tag: 'html',\n attrs: {},\n children: [createElement(head), createElement(body)],\n extra: { isSVG: false }\n }\n}\n\nexport const virtualDOM = {\n createElement,\n convertHTML\n}\n","export function setAttribute(node: HTMLElement, name: string, value: string | boolean): void {\n if (name === 'style') {\n if (value) {\n if (typeof value === 'string') {\n node.style.cssText = value\n } else if (value !== null && typeof value === 'object') {\n for (const [k, v] of Object.entries(value)) {\n node.style[k as any] = v as any\n }\n }\n }\n return\n }\n\n if (/^on\\w+$/.test(name)) {\n return\n }\n\n return node.setAttribute(name, value === true ? '' : String(value))\n}\n","import { setAttribute } from './dom'\nimport { nodeStore } from '@WebReplay/utils'\nimport { VNode } from './types'\n\nexport function convertVNode(vNode: VNode | string | null, node: Element | null): Element | null {\n if (vNode === null || vNode === undefined) {\n return null\n }\n if (typeof vNode === 'string') {\n return createText(vNode, node)\n }\n const output = createNode(vNode)\n if ((vNode.children && vNode.children.length) || (output.childNodes && output.childNodes.length)) {\n travel(vNode, output)\n }\n createAttributes(vNode, output)\n return output\n}\n\nfunction travel(vNode: VNode, node: Element): void {\n const nodeChildren: Element[] = []\n const vNodeChildren = vNode.children.slice()\n vNodeChildren.forEach(vChild => {\n let child = nodeChildren.pop() as Element | null\n child = convertVNode(vChild, child)\n if (child) {\n node.appendChild(child)\n }\n })\n}\n\nfunction createAttributes(vNode: VNode, node: Element): void {\n const { attrs } = vNode\n for (const [name, val] of Object.entries(attrs)) {\n setAttribute(node as HTMLElement, name, val)\n }\n}\n\nfunction createNode(vNode: VNode): Element {\n const { id, extra } = vNode\n const { isSVG } = extra\n let output: Element\n const tagName = transformTagName(vNode.tag)\n if (isSVG) {\n output = document.createElementNS('http://www.w3.org/2000/svg', tagName)\n } else {\n output = document.createElement(tagName)\n }\n\n nodeStore.updateNode(id, output)\n return output\n}\n\nfunction transformTagName(tag: string) {\n const tagMap: { [key: string]: string } = {\n script: 'noscript'\n }\n const tagName = tagMap[tag] || tag\n return tagName\n}\n\nfunction createText(textNode: string, node: Element | null | null): Element | null {\n let output: Element | Node\n output = document.createTextNode(textNode)\n return output as Element\n}\n","import { VNode } from '@WebReplay/virtual-dom'\n\nexport enum SnapshotType {\n 'WINDOW' = 'WINDOW',\n 'DOM' = 'DOM',\n 'MOUSE' = 'MOUSE',\n 'DOM_UPDATE' = 'DOM_UPDATE',\n 'FORM_EL_UPDATE' = 'FORM_EL_UPDATE'\n}\n\nexport enum FormElementEvent {\n 'ATTR' = 'ATTR',\n 'INPUT' = 'INPUT',\n 'CHANGE' = 'CHANGE',\n 'FOCUS' = 'FOCUS',\n 'BLUR' = 'BLUR'\n}\nexport enum MouseEventType {\n 'MOVE' = 'MOVE',\n 'CLICK' = 'click'\n}\n\nexport interface WindowSnapshot {\n type: SnapshotType.WINDOW\n data: WindowSnapshotData\n time: string\n}\nexport interface WindowSnapshotData {\n width: number\n height: number\n href: string\n}\n\nexport interface DOMSnapshot {\n type: SnapshotType.DOM\n data: DOMSnapshotData\n time: string\n}\n\nexport interface DOMSnapshotData {\n vNode: VNode\n}\nexport interface MouseSnapshot {\n type: SnapshotType.MOUSE\n data: MouseSnapshotData\n time: string\n}\nexport interface MouseSnapshotData {\n type: MouseEventType\n x: number\n y: number\n id?: number\n}\nexport interface DOMObserve {\n type: SnapshotType.DOM_UPDATE\n data: DOMObserveData\n time: string\n}\nexport interface DOMObserveData {\n mutations: DOMObserveMutations[]\n}\nexport interface DOMObserveMutations {\n mType: 'attributes' | 'characterData' | 'childList'\n data: ChildListUpdateData | CharacterDataUpdateData | AttributesUpdateData\n}\n\nexport interface AttributesUpdateData {\n nodeId: number\n value: string\n attr: string\n}\n\nexport interface CharacterDataUpdateData {\n parentId: number\n value: string\n}\n\nexport interface ChildListUpdateData {\n type: ChildListUpdateDataType\n parentId: number\n nodeId: number\n pos: number\n value?: string\n vNode: VNode\n}\nexport enum ChildListUpdateDataType {\n 'ADD' = 'ADD',\n 'DELETE' = 'DELETE',\n 'MOVE' = 'MOVE'\n}\n\nexport interface FormElementObserve {\n type: SnapshotType.FORM_EL_UPDATE\n data: FormElementObserveData\n time: string\n}\n\nexport interface FormElementObserveData {\n type: FormElementEvent\n id: number\n key?: string\n value?: string\n}\n\nexport type SnapshotEvent = (e: T) => void\n\nexport type SnapshotData = FormElementObserve | DOMObserve | MouseSnapshot | DOMSnapshot | WindowSnapshot\n","import { virtualDOM, createElement, convertVNode } from '@WebReplay/virtual-dom'\nimport {\n SnapshotType,\n WindowSnapshot,\n DOMSnapshot,\n SnapshotEvent,\n MouseSnapshot,\n DOMObserve,\n FormElementObserve,\n FormElementEvent,\n MouseEventType,\n AttributesUpdateData,\n CharacterDataUpdateData,\n DOMObserveMutations,\n ChildListUpdateData,\n ChildListUpdateDataType\n} from './types'\nimport { throttle } from 'lodash-es'\nimport { nodeStore, listenerStore } from '@WebReplay/utils'\nimport { VNode } from '@WebReplay/virtual-dom'\n\nfunction windowSnapshot(emit: SnapshotEvent) {\n const href = window.location.href\n var width = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth\n var height = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight\n\n emit({\n type: SnapshotType.WINDOW,\n data: {\n width,\n height,\n href\n },\n time: Date.now().toString()\n })\n}\n\nfunction DOMSnapshot(emit: SnapshotEvent) {\n emit({\n type: SnapshotType.DOM,\n data: {\n vNode: virtualDOM.convertHTML(document) as VNode\n },\n time: Date.now().toString()\n })\n}\n\nfunction mouseObserve(emit: SnapshotEvent) {\n function mouseMove() {\n const evt = (e: MouseEvent) => {\n emit({\n type: SnapshotType.MOUSE,\n data: {\n type: MouseEventType.MOVE,\n x: e.x,\n y: e.y\n },\n time: Date.now().toString()\n })\n }\n const name = 'mousemove'\n const listenerHandle = throttle(evt, 100, {\n trailing: true\n })\n\n document.addEventListener(name, listenerHandle)\n\n listenerStore.add(() => {\n document.removeEventListener(name, listenerHandle)\n })\n }\n\n function mouseClick() {\n const evt = (e: MouseEvent) => {\n emit({\n type: SnapshotType.MOUSE,\n data: {\n type: MouseEventType.CLICK,\n id: nodeStore.getNodeId(e.target as Element),\n x: e.x,\n y: e.y\n },\n time: Date.now().toString()\n })\n }\n\n const name = 'click'\n const listenerHandle = throttle(evt, 250)\n listenerStore.add(() => {\n document.removeEventListener(name, listenerHandle)\n })\n document.addEventListener(name, listenerHandle)\n }\n\n mouseMove()\n mouseClick()\n}\n\nfunction DOMObserve(emit: SnapshotEvent) {\n const mutationCallback: MutationCallback = (records: MutationRecord[]) => {\n const mutations: DOMObserveMutations[] = []\n function addMutation(mType: 'attributes' | 'characterData' | 'childList') {\n return function(data: any) {\n mutations.push({\n mType,\n data\n })\n }\n }\n records.forEach((record: MutationRecord) => {\n const { target, addedNodes, removedNodes, type, nextSibling, attributeName } = record\n\n const joinData = addMutation(type)\n\n switch (type) {\n case 'attributes':\n if (attributeName) {\n const curAttrValue = (target as Element).getAttribute(attributeName)\n joinData({\n nodeId: nodeStore.getNodeId(target),\n value: curAttrValue,\n attr: attributeName\n } as AttributesUpdateData)\n }\n break\n case 'characterData':\n const parent = target.parentNode!\n joinData({\n parentId: nodeStore.getNodeId(parent),\n value: target.nodeValue,\n pos: parent.childNodes.length > 0 ? [...parent.childNodes].indexOf(target as ChildNode) : null\n } as CharacterDataUpdateData)\n break\n case 'childList':\n if (addedNodes.length) {\n addedNodes.forEach(node => {\n let text\n let vNode: any\n if (node.nodeType === Node.TEXT_NODE) {\n text = node.nodeValue\n const pos = Array.from(node.parentNode!.childNodes).indexOf(node as ChildNode)\n joinData({\n type: ChildListUpdateDataType.ADD,\n parentId: nodeStore.getNodeId(node.parentNode!),\n value: node.textContent,\n pos\n } as ChildListUpdateData)\n } else {\n // reset element for remove reference\n vNode = createElement(node as HTMLElement)\n // convertVNode(vNode, null)\n const parent = node.parentNode!\n joinData({\n type: ChildListUpdateDataType.ADD,\n parentId: nodeStore.getNodeId(target),\n vNode,\n pos:\n parent.childNodes.length > 0\n ? [...parent.childNodes].indexOf(node as ChildNode)\n : null\n } as ChildListUpdateData)\n }\n })\n }\n if (removedNodes.length) {\n removedNodes.forEach(node => {\n joinData({\n type: ChildListUpdateDataType.DELETE,\n parentId: nodeStore.getNodeId(target) as number,\n nodeId: nodeStore.getNodeId(node) || null\n } as ChildListUpdateData)\n })\n }\n break\n default:\n break\n }\n })\n\n if (mutations.length) {\n emit({\n type: SnapshotType.DOM_UPDATE,\n data: {\n mutations\n },\n time: Date.now().toString()\n })\n }\n }\n\n const observer = new MutationObserver(mutationCallback)\n observer.observe(document.body, {\n attributeOldValue: true,\n attributes: true,\n characterData: true,\n characterDataOldValue: true,\n childList: true,\n subtree: true\n })\n\n listenerStore.add(() => {\n observer.disconnect()\n })\n}\n\nfunction formElementObserve(emit: SnapshotEvent) {\n listenInputs(emit)\n kidnapInputs(emit) // for sys write in input\n}\n\nfunction listenInputs(emit: SnapshotEvent) {\n const eventTypes = ['input', 'change', 'focus', 'blur']\n\n eventTypes\n .map(type => (fn: (e: InputEvent) => void) => {\n document.addEventListener(type, fn, { once: false, passive: true, capture: true })\n })\n .forEach(handle => handle(handleFn))\n\n listenerStore.add(() => {\n eventTypes.forEach(type => {\n document.removeEventListener(type, handleFn, true)\n })\n })\n\n function handleFn(e: InputEvent) {\n const eventType = e.type\n\n switch (eventType) {\n case 'input':\n case 'change':\n emit({\n type: SnapshotType.FORM_EL_UPDATE,\n data: {\n type: FormElementEvent.INPUT,\n id: nodeStore.getNodeId(e.target as Node)!,\n value: (e.target as HTMLInputElement).value\n },\n time: Date.now().toString()\n })\n break\n case 'focus':\n emit({\n type: SnapshotType.FORM_EL_UPDATE,\n data: {\n type: FormElementEvent.FOCUS,\n id: nodeStore.getNodeId(e.target as Node)!\n },\n time: Date.now().toString()\n })\n break\n case 'blur':\n emit({\n type: SnapshotType.FORM_EL_UPDATE,\n data: {\n type: FormElementEvent.BLUR,\n id: nodeStore.getNodeId(e.target as Node)!\n },\n time: Date.now().toString()\n })\n break\n default:\n break\n }\n }\n}\n\nfunction kidnapInputs(emit: SnapshotEvent) {\n const elementList: [HTMLElement, string][] = [\n [HTMLInputElement.prototype, 'value'],\n [HTMLInputElement.prototype, 'checked'],\n [HTMLSelectElement.prototype, 'value'],\n [HTMLTextAreaElement.prototype, 'value']\n ]\n\n const handles = elementList.map(item => {\n return () => {\n const [target, key] = item\n const original = Object.getOwnPropertyDescriptor(target, key)\n Object.defineProperty(target, key, {\n set: function(value: string | boolean) {\n setTimeout(() => {\n handleEvent.call(this, key, value)\n })\n if (original && original.set) {\n original.set.call(this, value)\n }\n }\n })\n\n listenerStore.add(() => {\n if (original) {\n Object.defineProperty(target, key, original)\n }\n })\n }\n })\n\n handles.concat([]).forEach(handle => handle())\n\n function handleEvent(this: HTMLElement, key: string, value: string) {\n emit({\n type: SnapshotType.FORM_EL_UPDATE,\n data: {\n type: FormElementEvent.ATTR,\n id: nodeStore.getNodeId(this)!,\n key,\n value\n },\n time: Date.now().toString()\n })\n }\n}\n\nexport const snapshots = {\n windowSnapshot,\n DOMSnapshot,\n mouseObserve,\n DOMObserve,\n formElementObserve\n}\n","import { snapshots, SnapshotData } from '@WebReplay/snapshot'\nimport { RecordOptions } from './types'\nimport { listenerStore } from '@WebReplay/utils'\n\nconst ctrl = {\n uninstall: () => {\n Array.from(listenerStore.values()).forEach(un => un())\n }\n}\n\nexport const record = ({ emitter }: RecordOptions = {}) => {\n recordAll(emitter)\n return ctrl\n}\n\nfunction recordAll(emitter?: (e: SnapshotData) => void) {\n const recordTasks: Function[] = [...Object.values(snapshots)]\n\n recordTasks.forEach(task => {\n task(emitter)\n })\n}\n","import { VNode, convertVNode } from '@WebReplay/virtual-dom'\nimport HTML from './ui.html'\nimport STYLE from './ui.css'\n\nexport class Container {\n container: HTMLElement\n sandBox: HTMLIFrameElement\n\n vNode: VNode\n width: number\n height: number\n\n constructor(params: { vNode: VNode; width: number; height: number }) {\n this.vNode = params.vNode\n this.width = params.width\n this.height = params.height\n this.init()\n }\n\n init() {\n this.initTemplate()\n this.initSandbox()\n }\n\n initSandbox() {\n this.sandBox = this.container.querySelector('#wr-sandbox') as HTMLIFrameElement\n this.sandBox.style.width = this.width + 'px'\n this.sandBox.style.height = this.height + 'px'\n const sandBoxDoc = (this.sandBox.contentWindow as Window).document\n sandBoxDoc.replaceChild(convertVNode(this.vNode, null)!, sandBoxDoc.documentElement)\n }\n\n initTemplate() {\n document.head.appendChild(this.createStyle())\n document.body.appendChild(this.createContainer())\n }\n\n createContainer() {\n const parser = new DOMParser()\n const element = parser.parseFromString(HTML, 'text/html').body.firstChild as HTMLElement\n element.style.width = this.width + 'px'\n element.style.height = this.height + 'px'\n element.style.position = 'relative'\n element.style.margin = '0 auto'\n return (this.container = element)\n }\n\n createStyle() {\n const parser = new DOMParser()\n const style = parser.parseFromString(``, 'text/html').head.firstChild as HTMLElement\n return style\n }\n}\n","// import { Redux } from '@WebReplay/utils'\n\nimport { reduxStore } from '@WebReplay/utils'\nimport { PlayerTypes } from '@WebReplay/utils'\n\nexport class KeyboardComponent {\n container: HTMLElement\n controller: HTMLElement\n\n pauseBtn: HTMLElement\n playBtn: HTMLElement\n\n speed: number\n\n constructor(container: HTMLElement) {\n this.container = container\n this.init()\n }\n\n init() {\n this.controller = this.container.querySelector('.wr-keyboard') as HTMLElement\n this.pauseBtn = this.controller.querySelector('.pause') as HTMLButtonElement\n this.playBtn = this.controller.querySelector('.play') as HTMLButtonElement\n this.controller.addEventListener('click', (e: MouseEvent & { target: HTMLElement & { type: string } }) => {\n if (e.target && e.target.type === 'button') {\n const speed = Number((e.target as HTMLElement).getAttribute('speed'))\n this.speed = speed\n reduxStore.dispatch({\n type: PlayerTypes.SPEED,\n data: {\n speed\n }\n })\n }\n })\n\n reduxStore.subscribe('player', state => {\n this.paly(state.speed)\n this.setSpeed(state.speed)\n })\n }\n\n paly(speed: number) {\n if (speed !== 0) {\n this.pauseBtn.removeAttribute('disabled')\n this.playBtn.setAttribute('disabled', '')\n } else {\n this.playBtn.removeAttribute('disabled')\n this.pauseBtn.setAttribute('disabled', '')\n }\n }\n\n setSpeed(speed: number) {\n const speedNodes = this.container.querySelectorAll('.speed') as NodeListOf\n ;[...speedNodes].forEach(node => {\n node.removeAttribute('disabled')\n })\n\n const index = speed === 1 ? 0 : speed === 8 ? 1 : speed === 16 ? 2 : -1\n if (index > -1) {\n speedNodes[index].setAttribute('disabled', '')\n }\n }\n}\n","import {\n SnapshotData,\n MouseSnapshotData,\n DOMObserveData,\n FormElementObserveData,\n SnapshotType,\n MouseEventType,\n DOMObserveMutations,\n ChildListUpdateData,\n CharacterDataUpdateData,\n AttributesUpdateData,\n FormElementEvent,\n ChildListUpdateDataType\n} from '@WebReplay/snapshot'\nimport { PlayerComponent } from './player'\nimport { nodeStore } from '@WebReplay/utils'\nimport { convertVNode } from '@WebReplay/virtual-dom'\n\nexport function updateDom(this: PlayerComponent, snapshot: SnapshotData) {\n const { type, data } = snapshot\n switch (type) {\n case SnapshotType.MOUSE:\n const { x, y, type } = data as MouseSnapshotData\n if (type === MouseEventType.MOVE) {\n this.pointer.move(x, y)\n } else if (type === MouseEventType.CLICK) {\n this.pointer.click(x, y)\n }\n break\n case SnapshotType.DOM_UPDATE:\n const { mutations } = data as DOMObserveData\n mutations.forEach((mutate: DOMObserveMutations) => {\n const { mType, data } = mutate\n const { value, attr, type, parentId, pos, nodeId, vNode } = data as ChildListUpdateData &\n (CharacterDataUpdateData & AttributesUpdateData)\n switch (mType) {\n case 'attributes':\n const targetEl = nodeStore.getNode(nodeId) as HTMLElement\n targetEl.setAttribute(attr, value)\n break\n case 'characterData':\n const parentEl = nodeStore.getNode(parentId) as HTMLElement\n if (pos !== null) {\n const target = parentEl.childNodes[pos as number]\n parentEl.replaceChild(document.createTextNode(value), target)\n } else {\n parentEl.innerText = value\n }\n break\n case 'childList':\n const parentNode = nodeStore.getNode(parentId) as HTMLElement\n const targetNode = (nodeStore.getNode(nodeId) as Element) || convertVNode(vNode, null)\n if (type === ChildListUpdateDataType.DELETE) {\n if (targetNode) {\n parentNode!.removeChild(targetNode)\n }\n } else if (ChildListUpdateDataType.ADD) {\n if (value) {\n // it's a TextNode\n const textNode = document.createTextNode(value)\n if (parentNode.childNodes.length) {\n parentNode.replaceChild(textNode, parentNode.childNodes[pos])\n } else {\n parentNode!.appendChild(textNode)\n }\n } else {\n // it's a ElementNode\n parentNode.insertBefore(targetNode, parentNode.childNodes[pos])\n }\n }\n break\n }\n })\n\n break\n case SnapshotType.FORM_EL_UPDATE:\n const { id, key, type: formType, value } = data as FormElementObserveData\n const node = nodeStore.getNode(id) as HTMLFormElement\n if (formType === FormElementEvent.INPUT) {\n node.value = value\n } else if (formType === FormElementEvent.FOCUS) {\n node.focus()\n } else if (formType === FormElementEvent.BLUR) {\n node.blur()\n } else if (formType === FormElementEvent.ATTR) {\n node[key!] = value\n }\n break\n }\n}\n","import { PointerComponent } from './pointer'\nimport { SnapshotData } from '@WebReplay/snapshot'\nimport { updateDom } from './dom'\nimport { reduxStore, PlayerTypes, ProgressState } from '@WebReplay/utils'\nimport { ProgressComponent } from './progress'\n\nexport class PlayerComponent {\n data: SnapshotData[]\n speed = 0\n index = 0\n frameIndex = 0\n lastPercentage = 0\n frames: number[]\n requestID: number\n startTime: number\n pointer: PointerComponent\n progress: ProgressComponent\n progressState: ProgressState\n\n constructor(data: SnapshotData[], pointer: PointerComponent, progress: ProgressComponent) {\n this.data = data\n this.pointer = pointer\n this.progress = progress\n\n reduxStore.subscribe('player', state => {\n this.progressState = reduxStore.getState()['progress']\n const speed = state.speed\n this.speed = speed\n if (speed > 0) {\n this.play(speed)\n } else {\n this.pause()\n }\n this.frames = this.getAccuratelyFrame()\n })\n }\n\n play(speed: number) {\n cancelAnimationFrame(this.requestID)\n this.requestID = requestAnimationFrame(loop.bind(this))\n\n const initTime = Date.now()\n this.startTime = 0\n\n function loop(this: PlayerComponent) {\n const timeStamp = Date.now() - initTime\n if (this.frameIndex > 0 && !this.frames[this.frameIndex + 1]) {\n this.stop()\n return\n }\n if (!this.startTime) {\n this.startTime = Number(this.frames[this.frameIndex])\n }\n\n const currTime = this.startTime + timeStamp * speed\n const nextTime = Number(this.frames[this.frameIndex + 1])\n\n if (currTime >= nextTime) {\n this.frameIndex++\n\n const progress = (this.frameIndex / this.frames.length) * 100\n\n if (progress - this.lastPercentage > this.getPercentInterval()) {\n this.progress.updateProgress(progress)\n this.lastPercentage = progress\n }\n\n if (this.data[this.index] && currTime > +this.data[this.index].time) {\n this.execFrame.call(this, this.data[this.index])\n this.index++\n }\n }\n\n this.requestID = requestAnimationFrame(loop.bind(this))\n }\n }\n\n pause() {\n cancelAnimationFrame(this.requestID)\n reduxStore.dispatch({\n type: PlayerTypes.SPEED,\n data: {\n speed: 0\n }\n })\n }\n\n stop() {\n this.index = 0\n this.pause()\n }\n\n execFrame(this: PlayerComponent, snapshot: SnapshotData) {\n updateDom.call(this, snapshot)\n }\n\n getPercentInterval() {\n const k = 0.08\n const b = 0.2\n return this.speed * k + b\n }\n\n getAccuratelyFrame(interval = 50) {\n this.progressState = reduxStore.getState()['progress']\n const { startTime, endTime } = this.progressState\n\n const delay = 500\n const s = +startTime\n const e = +endTime + delay\n\n const result: number[] = []\n\n for (let i = s; i < e; i += interval) {\n result.push(i)\n }\n result.push(e)\n return result\n }\n}\n","export class PointerComponent {\n x = 0\n y = 0\n\n pointer: HTMLElement\n constructor() {\n this.initPointer()\n }\n\n initPointer() {\n this.pointer = document.getElementById('wr-pointer') as HTMLElement\n this.move(0, 0)\n }\n\n move(x: number, y: number) {\n this.x = x\n this.y = y\n this.pointer.style.left = this.x + 'px'\n this.pointer.style.top = this.y + 'px'\n }\n\n click(x: number, y: number) {\n this.move(x, y)\n this.pointer.setAttribute('active', '')\n setTimeout(() => {\n this.pointer.removeAttribute('active')\n }, 20)\n }\n}\n","import { ProgressState } from '@WebReplay/utils'\n\nexport class ProgressComponent {\n progress: HTMLElement\n thumb: HTMLElement\n slider: HTMLElement\n speed: number\n rafId: number\n\n progressState: ProgressState\n\n totalDistance = 0\n constructor(c: HTMLElement) {\n this.progress = c.querySelector('.wr-progress')! as HTMLElement\n this.thumb = this.progress.querySelector('.wr-thumb') as HTMLElement\n this.slider = this.progress.querySelector('.wr-slider-bar') as HTMLElement\n }\n\n updateProgress(percentage: number) {\n this.thumb.style.left = percentage + '%'\n }\n}\n","import { KeyboardComponent } from './keyboard'\nimport { PlayerComponent } from './player'\nimport { PointerComponent } from './pointer'\nimport { SnapshotData } from '@WebReplay/snapshot'\nimport { ProgressComponent } from './progress'\n\nexport class Panel {\n container: HTMLElement\n data: SnapshotData[]\n\n keyboard: KeyboardComponent\n progress: ProgressComponent\n pointer: PointerComponent\n player: PlayerComponent\n\n constructor(container: HTMLElement, data: SnapshotData[]) {\n this.container = container\n this.data = data\n this.initComponent()\n }\n\n initComponent() {\n this.keyboard = new KeyboardComponent(this.container)\n this.progress = new ProgressComponent(this.container)\n this.pointer = new PointerComponent()\n this.player = new PlayerComponent(this.data, this.pointer, this.progress)\n }\n}\n","import { DBPromise, ProgressTypes, PlayerTypes, reduxStore } from '@WebReplay/utils'\nimport { Container } from './container'\nimport { Panel } from './panel'\n\nexport async function replay() {\n const indexDB = await DBPromise\n const { width, height, vNode, data } = await indexDB.getData()\n\n const c = new Container({ vNode, width, height })\n new Panel(c.container, data)\n\n reduxStore.dispatch({\n type: ProgressTypes.INFO,\n data: {\n frame: 0,\n curTime: data[0].time,\n startTime: data[0].time,\n endTime: data[data.length - 1].time,\n length: data.length\n }\n })\n\n reduxStore.dispatch({\n type: PlayerTypes.SPEED,\n data: { speed: 1 }\n })\n}\n"],"names":["listenerStore","Set","nodeStore","[object Object]","this","Map","WeakMap","nodeId","id","nodeMap","get","node","createNodeId","idMap","set","delete","getNode","IndexDBOperator","DBName","version","storeName","callback","request","window","indexedDB","open","onerror","e","console","error","onsuccess","db","result","onupgradeneeded","target","objectStoreNames","contains","objectStore","createObjectStore","autoIncrement","keyPath","createIndex","unique","data","transaction","add","Error","clear","Promise","resolve","getAll","event","all","readAll","virtualNode","width","height","vNode","DBPromise","indexDB","initState","speed","PlayerTypes","frame","length","curTime","startTime","endTime","ProgressTypes","freeGlobal","global","Object","freeSelf","self","root","Function","Symbol","objectProto","prototype","hasOwnProperty","nativeObjectToString","toString","symToStringTag","toStringTag","undefined","baseGetTag","value","isOwn","call","tag","unmasked","getRawTag","objectToString","isObjectLike","isArray","Array","isObject","type","reTrim","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","parseInt","toNumber","isSymbol","other","valueOf","replace","isBinary","test","slice","isFunction","uid","coreJsData","maskSrcKey","exec","keys","IE_PROTO","funcToString","toSource","func","reIsHostCtor","funcProto","reIsNative","RegExp","baseIsNative","getNative","object","key","getValue","reIsUint","isIndex","eq","isLength","baseIsArguments","propertyIsEnumerable","isArguments","arguments","freeExports","exports","nodeType","freeModule","module","Buffer","isBuffer","typedArrayTags","freeProcess","process","nodeUtil","types","require","binding","nodeIsTypedArray","isTypedArray","arrayLikeKeys","inherited","isArr","isArg","isBuff","isType","skipIndexes","n","iteratee","index","baseTimes","String","push","nativeKeys","transform","arg","overArg","baseKeys","Ctor","constructor","nativeCreate","Hash","entries","entry","assocIndexOf","array","__data__","size","has","splice","ListCache","pop","getMapData","map","MapCache","hash","string","Stack","pairs","LARGE_ARRAY_SIZE","nativeGetSymbols","getOwnPropertySymbols","getSymbols","predicate","resIndex","arrayFilter","symbol","getAllKeys","keysFunc","symbolsFunc","values","offset","arrayPush","baseGetAllKeys","DataView","dataViewCtorString","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","getTag","ArrayBuffer","ctorString","Uint8Array","SetCache","arraySome","equalArrays","bitmask","customizer","equalFunc","stack","isPartial","arrLength","othLength","stacked","seen","arrValue","othValue","compared","othIndex","mapToArray","forEach","setToArray","symbolProto","symbolValueOf","baseIsEqualDeep","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","byteLength","byteOffset","buffer","name","message","convert","equalByTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","objProps","objLength","skipCtor","objValue","objCtor","othCtor","equalObjects","baseIsEqual","now","Date","nativeMax","Math","max","nativeMin","min","debounce","wait","options","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","TypeError","invokeFunc","time","args","thisArg","apply","leadingEdge","setTimeout","timerExpired","shouldInvoke","timeSinceLastCall","trailingEdge","timeWaiting","remainingWait","debounced","isInvoking","clearTimeout","cancel","flush","throttle","reduxStore","reducer","state","topics","subscribe","listener","dispatch","action","oldState","topicName","player","progress","enums","includes","getTypeInTopics","getState","createStore","reducers","reducerKeys","nextState","i","nextStateForKey","combineReducers","SPEED","FORWARD","BACKWARD","INFO","getAttr","el","resAttr","attrs","attributes","checked","reduce","ret","attr","createElement","inheritSVG","Node","TEXT_NODE","tagName","isSVG","toLocaleLowerCase","trim","children","extra","getVNodeByEl","addNode","childNodes","ELEMENT_NODE","child","nodeValue","text","trimNodeText","virtualDOM","doc","head","body","setAttribute","style","cssText","k","v","convertVNode","textNode","output","document","createTextNode","createText","script","createElementNS","updateNode","createNode","nodeChildren","vChild","appendChild","travel","val","createAttributes","SnapshotType","FormElementEvent","MouseEventType","ChildListUpdateDataType","snapshots","windowSnapshot","emit","href","location","innerWidth","documentElement","clientWidth","innerHeight","clientHeight","WINDOW","DOMSnapshot","DOM","mouseObserve","listenerHandle","MOUSE","MOVE","x","y","addEventListener","removeEventListener","mouseMove","CLICK","getNodeId","mouseClick","DOMObserve","observer","MutationObserver","records","mutations","record","addedNodes","removedNodes","nextSibling","attributeName","joinData","mType","curAttrValue","getAttribute","parent","parentNode","parentId","pos","indexOf","from","ADD","textContent","DELETE","DOM_UPDATE","observe","attributeOldValue","characterData","characterDataOldValue","childList","subtree","disconnect","formElementObserve","eventTypes","handleFn","FORM_EL_UPDATE","INPUT","FOCUS","BLUR","fn","once","passive","capture","handle","listenInputs","handleEvent","ATTR","HTMLInputElement","HTMLSelectElement","HTMLTextAreaElement","item","original","getOwnPropertyDescriptor","defineProperty","concat","kidnapInputs","ctrl","uninstall","un","Container","params","init","initTemplate","initSandbox","sandBox","container","querySelector","sandBoxDoc","contentWindow","replaceChild","createStyle","createContainer","element","DOMParser","parseFromString","firstChild","position","margin","KeyboardComponent","controller","pauseBtn","playBtn","Number","paly","setSpeed","removeAttribute","speedNodes","querySelectorAll","updateDom","snapshot","pointer","move","click","mutate","parentEl","innerText","targetNode","removeChild","insertBefore","formType","focus","blur","PlayerComponent","progressState","play","pause","frames","getAccuratelyFrame","cancelAnimationFrame","requestID","requestAnimationFrame","loop","timeStamp","initTime","frameIndex","stop","currTime","nextTime","lastPercentage","getPercentInterval","updateProgress","execFrame","bind","interval","PointerComponent","initPointer","getElementById","left","top","ProgressComponent","c","thumb","slider","percentage","Panel","initComponent","keyboard","emitter","task","recordAll","async","getData"],"mappings":"oEAAO,MAAMA,EAAgB,IAAIC,ICgC1B,MAAMC,EAAY,IAhCzB,MAAAC,cACYC,YAAS,EACTA,aAA6B,IAAIC,IACjCD,WAA+B,IAAIE,QAEpCF,kBAAe,IAAMA,KAAKG,SAE1BJ,QAAQK,GACX,OAAOJ,KAAKK,QAAQC,IAAIF,GAGrBL,QAAQQ,EAAYH,EAAaJ,KAAKQ,gBAGzC,OAFAR,KAAKS,MAAMC,IAAIH,EAAMH,GACrBJ,KAAKK,QAAQK,IAAIN,EAAIG,GACdH,EAGJL,WAAWK,GACdJ,KAAKK,QAAQM,OAAOP,GACpBJ,KAAKS,MAAME,OAAOX,KAAKY,QAAQR,IAG5BL,UAAUQ,GACb,OAAOP,KAAKS,MAAMH,IAAIC,GAGnBR,WAAWK,EAAYG,GAC1BP,KAAKS,MAAMC,IAAIH,EAAMH,GACrBJ,KAAKK,QAAQK,IAAIN,EAAIG,WC1BhBM,EAMTd,YAAYe,EAAgBC,EAAiBC,EAAmBC,GAC5DjB,KAAKc,OAASA,EACdd,KAAKe,QAAUA,EACff,KAAKgB,UAAYA,EAEjB,MAAME,EAAUC,OAAOC,UAAUC,KAAKP,EAAQC,GAC9CG,EAAQI,QAAUC,IACdC,QAAQC,MAAM,0BAGlBP,EAAQQ,UAAYH,IAChBvB,KAAK2B,GAAKT,EAAQU,OAIlBX,EAASjB,KAAK2B,KAGlBT,EAAQW,gBAAkBN,IACtB,MAAMI,EAAKJ,EAAEO,OAAQF,OAErB,IAAKD,EAAGI,iBAAiBC,SAAShB,GAAY,CAC1C,MAAMiB,EAAcN,EAAGO,kBAAkBlB,EAAW,CAAEmB,eAAe,EAAMC,QAAS,OACpFH,EAAYI,YAAY,OAAQ,OAAQ,CAAEC,QAAQ,IAClDL,EAAYI,YAAY,OAAQ,OAAQ,CAAEC,QAAQ,IAClDL,EAAYI,YAAY,OAAQ,OAAQ,CAAEC,QAAQ,MAK9DvC,IAAIwC,GACgBvC,KAAK2B,GAChBa,YAAY,CAAC,GAAGxC,KAAKgB,aAAc,aACnCiB,YAAY,GAAGjC,KAAKgB,aACpByB,IAAIF,GAEDjB,QAAUC,IACd,MAAM,IAAImB,MAAM,2BAIxB3C,QACwBC,KAAK2B,GAAGa,YAAY,CAAC,GAAGxC,KAAKgB,aAAc,aAAaiB,YAAY,GAAGjC,KAAKgB,aACpF2B,QAGhB5C,gBACI,MAAMkC,EAAcjC,KAAK2B,GAAGa,YAAY,CAAC,GAAGxC,KAAKgB,aAAc,aAAaiB,YAAY,GAAGjC,KAAKgB,aAChG,OAAO,IAAI4B,QAAQC,IACfZ,EAAYa,SAASpB,UAAYqB,IAC7B,MAAMnB,EAASmB,EAAOjB,OAAQF,OAC9BiB,EAAQjB,MAKpB7B,gBACI,MAAMiD,QAAYhD,KAAKiD,WAEhB9B,EAAQ+B,KAAgBX,GAAQS,IAChCG,MAAEA,EAAKC,OAAEA,IAAUC,MAAEA,IAAW,CAAClC,EAAOoB,KAAMW,EAAYX,MAEjE,MAAO,CACHY,MAAAA,EACAC,OAAAA,EACAC,MAAAA,EACAd,KAAAA,UAKCe,EAAsC,IAAIV,QAAQC,IAC3D,MAAMU,EAAU,IAAI1C,EAAgB,QAAS,EAAG,UAAW,KACvDgC,EAAQU,OC/EhB,IAAIC,EAAY,CACZC,MAAO,MAGX,IAAYC,GAAZ,SAAYA,GACRA,gBADJ,CAAYA,IAAAA,OCJZ,MAAMF,EAAY,CACdG,MAAO,EACPC,OAAQ,EACRC,QAAS,EACTC,UAAW,EACXC,QAAS,GAKb,IAAYC,GAAZ,SAAYA,GACRA,oBACAA,sBACAA,cAHJ,CAAYA,IAAAA,OCXZ,IAAIC,EAA8B,iBAAVC,QAAsBA,QAAUA,OAAOC,SAAWA,QAAUD,OCEhFE,EAA0B,iBAARC,MAAoBA,MAAQA,KAAKF,SAAWA,QAAUE,KAGxEC,EAAOL,GAAcG,GAAYG,SAAS,cAATA,GCHjCC,EAASF,EAAKE,OCAdC,EAAcN,OAAOO,UAGrBC,EAAiBF,EAAYE,eAO7BC,EAAuBH,EAAYI,SAGnCC,EAAiBN,EAASA,EAAOO,iBAAcC,ECfnD,IAOIJ,EAPcT,OAAOO,UAOcG,SCHvC,IAIIC,EAAiBN,EAASA,EAAOO,iBAAcC,EASnD,SAASC,EAAWC,GAClB,OAAa,MAATA,OACeF,IAAVE,EAdQ,qBADL,gBAiBJJ,GAAkBA,KAAkBX,OAAOe,GFGrD,SAAmBA,GACjB,IAAIC,EAAQR,EAAeS,KAAKF,EAAOJ,GACnCO,EAAMH,EAAMJ,GAEhB,IACEI,EAAMJ,QAAkBE,EACxB,IAAIM,GAAW,EACf,MAAO/D,IAET,IAAIK,EAASgD,EAAqBQ,KAAKF,GAQvC,OAPII,IACEH,EACFD,EAAMJ,GAAkBO,SAEjBH,EAAMJ,IAGVlD,EEnBH2D,CAAUL,GDNhB,SAAwBA,GACtB,OAAON,EAAqBQ,KAAKF,GCM7BM,CAAeN,GCArB,SAASO,EAAaP,GACpB,OAAgB,MAATA,GAAiC,iBAATA,ECFjC,IAAIQ,EAAUC,MAAMD,QCEpB,SAASE,EAASV,GAChB,IAAIW,SAAcX,EAClB,OAAgB,MAATA,IAA0B,UAARW,GAA4B,YAARA,GCvB/C,IAGIC,EAAS,aAGTC,EAAa,qBAGbC,EAAa,aAGbC,EAAY,cAGZC,EAAeC,SAyBnB,SAASC,EAASlB,GAChB,GAAoB,iBAATA,EACT,OAAOA,EAET,GCzBF,SAAkBA,GAChB,MAAuB,iBAATA,GACXO,EAAaP,IArBF,mBAqBYD,EAAWC,GDuBjCmB,CAASnB,GACX,OA7CM,IA+CR,GAAIU,EAASV,GAAQ,CACnB,IAAIoB,EAAgC,mBAAjBpB,EAAMqB,QAAwBrB,EAAMqB,UAAYrB,EACnEA,EAAQU,EAASU,GAAUA,EAAQ,GAAMA,EAE3C,GAAoB,iBAATpB,EACT,OAAiB,IAAVA,EAAcA,GAASA,EAEhCA,EAAQA,EAAMsB,QAAQV,EAAQ,IAC9B,IAAIW,EAAWT,EAAWU,KAAKxB,GAC/B,OAAQuB,GAAYR,EAAUS,KAAKxB,GAC/BgB,EAAahB,EAAMyB,MAAM,GAAIF,EAAW,EAAI,GAC3CV,EAAWW,KAAKxB,GA1Db,KA0D6BA,EEpCvC,SAAS0B,EAAW1B,GAClB,IAAKU,EAASV,GACZ,OAAO,EAIT,IAAIG,EAAMJ,EAAWC,GACrB,MA5BY,qBA4BLG,GA3BI,8BA2BcA,GA7BZ,0BA6B6BA,GA1B7B,kBA0BgDA,EC9B/D,ICCMwB,EDDFC,EAAaxC,EAAK,sBCAlByC,GACEF,EAAM,SAASG,KAAKF,GAAcA,EAAWG,MAAQH,EAAWG,KAAKC,UAAY,KACvE,iBAAmBL,EAAO,GCJ1C,IAGIM,EAHY5C,SAASG,UAGIG,SAS7B,SAASuC,EAASC,GAChB,GAAY,MAARA,EAAc,CAChB,IACE,OAAOF,EAAa/B,KAAKiC,GACzB,MAAO9F,IACT,IACE,OAAQ8F,EAAO,GACf,MAAO9F,KAEX,MAAO,GCbT,IAGI+F,EAAe,8BAGfC,EAAYhD,SAASG,UACrBD,EAAcN,OAAOO,UAGrByC,EAAeI,EAAU1C,SAGzBF,EAAiBF,EAAYE,eAG7B6C,EAAaC,OAAO,IACtBN,EAAa/B,KAAKT,GAAgB6B,QAjBjB,sBAiBuC,QACvDA,QAAQ,yDAA0D,SAAW,KAWhF,SAASkB,EAAaxC,GACpB,SAAKU,EAASV,KFxBEmC,EEwBiBnC,EFvBxB6B,GAAeA,KAAcM,ME0BxBT,EAAW1B,GAASsC,EAAaF,GAChCZ,KAAKU,EAASlC,IF5B/B,IAAkBmC,EGJlB,SAASM,EAAUC,EAAQC,GACzB,IAAI3C,ECJN,SAAkB0C,EAAQC,GACxB,OAAiB,MAAVD,OAAiB5C,EAAY4C,EAAOC,GDG/BC,CAASF,EAAQC,GAC7B,OAAOH,EAAaxC,GAASA,OAAQF,EETvC,IAAI9E,EAAUyH,EAAUrD,EAAM,WCA1ByD,EAAW,mBAUf,SAASC,EAAQ9C,EAAOtB,GACtB,IAAIiC,SAAcX,EAGlB,SAFAtB,EAAmB,MAAVA,EAfY,iBAewBA,KAGlC,UAARiC,GACU,UAARA,GAAoBkC,EAASrB,KAAKxB,KAChCA,GAAS,GAAKA,EAAQ,GAAK,GAAKA,EAAQtB,ECWjD,SAASqE,EAAG/C,EAAOoB,GACjB,OAAOpB,IAAUoB,GAAUpB,GAAUA,GAASoB,GAAUA,ECJ1D,SAAS4B,EAAShD,GAChB,MAAuB,iBAATA,GACZA,GAAS,GAAKA,EAAQ,GAAK,GAAKA,GA9Bb,iBCAvB,IAAIT,EAAcN,OAAOO,UCYzB,SAASyD,EAAgBjD,GACvB,OAAOO,EAAaP,IAVR,sBAUkBD,EAAWC,GCV3C,IAAIT,EAAcN,OAAOO,UAGrBC,EAAiBF,EAAYE,eAG7ByD,EAAuB3D,EAAY2D,qBAoBnCC,EAAcF,EAAgB,WAAa,OAAOG,UAApB,IAAsCH,EAAkB,SAASjD,GACjG,OAAOO,EAAaP,IAAUP,EAAeS,KAAKF,EAAO,YACtDkD,EAAqBhD,KAAKF,EAAO,WC5BtC,IAAIqD,EAAgC,iBAAXC,SAAuBA,UAAYA,QAAQC,UAAYD,QAG5EE,GAAaH,GAAgC,iBAAVI,QAAsBA,SAAWA,OAAOF,UAAYE,OAMvFC,GAHgBF,IAAcA,GAAWF,UAAYD,EAG5BjE,EAAKsE,YAAS5D,EAsBvC6D,IAnBiBD,GAASA,GAAOC,cAAW7D,ICHhD,WACE,OAAO,GCkBL8D,GAAiB,GACrBA,GAZiB,yBAYYA,GAXZ,yBAYjBA,GAXc,sBAWYA,GAVX,uBAWfA,GAVe,uBAUYA,GATZ,uBAUfA,GATsB,8BASYA,GARlB,wBAShBA,GARgB,yBAQY,EAC5BA,GAjCc,sBAiCYA,GAhCX,kBAiCfA,GApBqB,wBAoBYA,GAhCnB,oBAiCdA,GApBkB,qBAoBYA,GAhChB,iBAiCdA,GAhCe,kBAgCYA,GA/Bb,qBAgCdA,GA/Ba,gBA+BYA,GA9BT,mBA+BhBA,GA9BgB,mBA8BYA,GA7BZ,mBA8BhBA,GA7Ba,gBA6BYA,GA5BT,mBA6BhBA,GA5BiB,qBA4BY,EC1C7B,ICImBzB,GDJfkB,GAAgC,iBAAXC,SAAuBA,UAAYA,QAAQC,UAAYD,QAG5EE,GAAaH,IAAgC,iBAAVI,QAAsBA,SAAWA,OAAOF,UAAYE,OAMvFI,GAHgBL,IAAcA,GAAWF,UAAYD,IAGtBtE,EAAW+E,QAG1CC,GAAY,WACd,IAEE,IAAIC,EAAQR,IAAcA,GAAWS,SAAWT,GAAWS,QAAQ,QAAQD,MAE3E,OAAIA,GAKGH,IAAeA,GAAYK,SAAWL,GAAYK,QAAQ,QACjE,MAAO7H,QErBP8H,GAAmBJ,IAAYA,GAASK,aAmBxCA,GAAeD,IDjBAhC,GCiB6BgC,GDhBvC,SAASnE,GACd,OAAOmC,GAAKnC,KF6ChB,SAA0BA,GACxB,OAAOO,EAAaP,IAClBgD,EAAShD,EAAMtB,WAAakF,GAAe7D,EAAWC,KI7CtDP,GAHcR,OAAOO,UAGQC,eAUjC,SAAS4E,GAAcrE,EAAOsE,GAC5B,IAAIC,EAAQ/D,EAAQR,GAChBwE,GAASD,GAASpB,EAAYnD,GAC9ByE,GAAUF,IAAUC,GAASb,GAAS3D,GACtC0E,GAAUH,IAAUC,IAAUC,GAAUL,GAAapE,GACrD2E,EAAcJ,GAASC,GAASC,GAAUC,EAC1ChI,EAASiI,EClBf,SAAmBC,EAAGC,GAIpB,IAHA,IAAIC,GAAS,EACTpI,EAAS+D,MAAMmE,KAEVE,EAAQF,GACflI,EAAOoI,GAASD,EAASC,GAE3B,OAAOpI,EDWoBqI,CAAU/E,EAAMtB,OAAQsG,QAAU,GACzDtG,EAAShC,EAAOgC,OAEpB,IAAK,IAAIiE,KAAO3C,GACTsE,IAAa7E,GAAeS,KAAKF,EAAO2C,IACvCgC,IAEQ,UAAPhC,GAEC8B,IAAkB,UAAP9B,GAA0B,UAAPA,IAE9B+B,IAAkB,UAAP/B,GAA0B,cAAPA,GAA8B,cAAPA,IAEtDG,EAAQH,EAAKjE,KAElBhC,EAAOuI,KAAKtC,GAGhB,OAAOjG,EE1CT,IAAIwI,GCKJ,SAAiB/C,EAAMgD,GACrB,OAAO,SAASC,GACd,OAAOjD,EAAKgD,EAAUC,KDPTC,CAAQpG,OAAO8C,KAAM9C,QEIlCQ,GAHcR,OAAOO,UAGQC,eASjC,SAAS6F,GAAS5C,GAChB,GbNI6C,GADevF,EaOF0C,IbNG1C,EAAMwF,YAGnBxF,KAFqB,mBAARuF,GAAsBA,EAAK/F,WAAcD,GaM3D,OAAO2F,GAAWxC,GbRtB,IAAqB1C,EACfuF,EaSA7I,EAAS,GACb,IAAK,IAAIiG,KAAO1D,OAAOyD,GACjBjD,GAAeS,KAAKwC,EAAQC,IAAe,eAAPA,GACtCjG,EAAOuI,KAAKtC,GAGhB,OAAOjG,ECMT,SAASqF,GAAKW,GACZ,OCJgB,OADG1C,EDKA0C,ICJKM,EAAShD,EAAMtB,UAAYgD,EAAW1B,GDIjCqE,GAAc3B,GAAU4C,GAAS5C,GCLhE,IAAqB1C,ECzBrB,IAAIyF,GAAehD,EAAUxD,OAAQ,UCArC,IAMIQ,GAHcR,OAAOO,UAGQC,eCNjC,IAGIA,GAHcR,OAAOO,UAGQC,eCOjC,SAASiG,GAAKC,GACZ,IAAIb,GAAS,EACTpG,EAAoB,MAAXiH,EAAkB,EAAIA,EAAQjH,OAG3C,IADA5D,KAAK2C,UACIqH,EAAQpG,GAAQ,CACvB,IAAIkH,EAAQD,EAAQb,GACpBhK,KAAKU,IAAIoK,EAAM,GAAIA,EAAM,KCV7B,SAASC,GAAaC,EAAOnD,GAE3B,IADA,IAAIjE,EAASoH,EAAMpH,OACZA,KACL,GAAIqE,EAAG+C,EAAMpH,GAAQ,GAAIiE,GACvB,OAAOjE,EAGX,OAAQ,EDQVgH,GAAKlG,UAAU/B,MEhBf,WACE3C,KAAKiL,SAAWN,GAAeA,GAAa,MAAQ,GACpD3K,KAAKkL,KAAO,GFedN,GAAKlG,UAAkB,OGhBvB,SAAoBmD,GAClB,IAAIjG,EAAS5B,KAAKmL,IAAItD,WAAe7H,KAAKiL,SAASpD,GAEnD,OADA7H,KAAKkL,MAAQtJ,EAAS,EAAI,EACnBA,GHcTgJ,GAAKlG,UAAUpE,IFPf,SAAiBuH,GACf,IAAItF,EAAOvC,KAAKiL,SAChB,GAAIN,GAAc,CAChB,IAAI/I,EAASW,EAAKsF,GAClB,MArBiB,8BAqBVjG,OAA4BoD,EAAYpD,EAEjD,OAAO+C,GAAeS,KAAK7C,EAAMsF,GAAOtF,EAAKsF,QAAO7C,GEEtD4F,GAAKlG,UAAUyG,IDXf,SAAiBtD,GACf,IAAItF,EAAOvC,KAAKiL,SAChB,OAAON,QAA8B3F,IAAdzC,EAAKsF,GAAsBlD,GAAeS,KAAK7C,EAAMsF,ICU9E+C,GAAKlG,UAAUhE,IIdf,SAAiBmH,EAAK3C,GACpB,IAAI3C,EAAOvC,KAAKiL,SAGhB,OAFAjL,KAAKkL,MAAQlL,KAAKmL,IAAItD,GAAO,EAAI,EACjCtF,EAAKsF,GAAQ8C,SAA0B3F,IAAVE,EAfV,4BAekDA,EAC9DlF,MChBT,IAGIoL,GAHazF,MAAMjB,UAGC0G,OCOxB,SAASC,GAAUR,GACjB,IAAIb,GAAS,EACTpG,EAAoB,MAAXiH,EAAkB,EAAIA,EAAQjH,OAG3C,IADA5D,KAAK2C,UACIqH,EAAQpG,GAAQ,CACvB,IAAIkH,EAAQD,EAAQb,GACpBhK,KAAKU,IAAIoK,EAAM,GAAIA,EAAM,KAK7BO,GAAU3G,UAAU/B,MClBpB,WACE3C,KAAKiL,SAAW,GAChBjL,KAAKkL,KAAO,GDiBdG,GAAU3G,UAAkB,ODT5B,SAAyBmD,GACvB,IAAItF,EAAOvC,KAAKiL,SACZjB,EAAQe,GAAaxI,EAAMsF,GAE/B,QAAImC,EAAQ,KAIRA,GADYzH,EAAKqB,OAAS,EAE5BrB,EAAK+I,MAELF,GAAOhG,KAAK7C,EAAMyH,EAAO,KAEzBhK,KAAKkL,MACA,ICJTG,GAAU3G,UAAUpE,IEhBpB,SAAsBuH,GACpB,IAAItF,EAAOvC,KAAKiL,SACZjB,EAAQe,GAAaxI,EAAMsF,GAE/B,OAAOmC,EAAQ,OAAIhF,EAAYzC,EAAKyH,GAAO,IFa7CqB,GAAU3G,UAAUyG,IGjBpB,SAAsBtD,GACpB,OAAOkD,GAAa/K,KAAKiL,SAAUpD,IAAQ,GHiB7CwD,GAAU3G,UAAUhE,IIjBpB,SAAsBmH,EAAK3C,GACzB,IAAI3C,EAAOvC,KAAKiL,SACZjB,EAAQe,GAAaxI,EAAMsF,GAQ/B,OANImC,EAAQ,KACRhK,KAAKkL,KACP3I,EAAK4H,KAAK,CAACtC,EAAK3C,KAEhB3C,EAAKyH,GAAO,GAAK9E,EAEZlF,MClBT,IAAIC,GAAM0H,EAAUrD,EAAM,OCM1B,SAASiH,GAAWC,EAAK3D,GACvB,ICJiB3C,EACbW,EDGAtD,EAAOiJ,EAAIP,SACf,OCHgB,WADZpF,SADaX,EDKA2C,KCHmB,UAARhC,GAA4B,UAARA,GAA4B,WAARA,EACrD,cAAVX,EACU,OAAVA,GDED3C,EAAmB,iBAAPsF,EAAkB,SAAW,QACzCtF,EAAKiJ,IEDX,SAASC,GAASZ,GAChB,IAAIb,GAAS,EACTpG,EAAoB,MAAXiH,EAAkB,EAAIA,EAAQjH,OAG3C,IADA5D,KAAK2C,UACIqH,EAAQpG,GAAQ,CACvB,IAAIkH,EAAQD,EAAQb,GACpBhK,KAAKU,IAAIoK,EAAM,GAAIA,EAAM,KAK7BW,GAAS/G,UAAU/B,MCdnB,WACE3C,KAAKkL,KAAO,EACZlL,KAAKiL,SAAW,CACdS,KAAQ,IAAId,GACZY,IAAO,IAAKvL,IAAOoL,IACnBM,OAAU,IAAIf,KDUlBa,GAAS/G,UAAkB,OEf3B,SAAwBmD,GACtB,IAAIjG,EAAS2J,GAAWvL,KAAM6H,GAAa,OAAEA,GAE7C,OADA7H,KAAKkL,MAAQtJ,EAAS,EAAI,EACnBA,GFaT6J,GAAS/G,UAAUpE,IGhBnB,SAAqBuH,GACnB,OAAO0D,GAAWvL,KAAM6H,GAAKvH,IAAIuH,IHgBnC4D,GAAS/G,UAAUyG,IIjBnB,SAAqBtD,GACnB,OAAO0D,GAAWvL,KAAM6H,GAAKsD,IAAItD,IJiBnC4D,GAAS/G,UAAUhE,IKjBnB,SAAqBmH,EAAK3C,GACxB,IAAI3C,EAAOgJ,GAAWvL,KAAM6H,GACxBqD,EAAO3I,EAAK2I,KAIhB,OAFA3I,EAAK7B,IAAImH,EAAK3C,GACdlF,KAAKkL,MAAQ3I,EAAK2I,MAAQA,EAAO,EAAI,EAC9BlL,MCJT,SAAS4L,GAAMf,GACb,IAAItI,EAAOvC,KAAKiL,SAAW,IAAII,GAAUR,GACzC7K,KAAKkL,KAAO3I,EAAK2I,KAInBU,GAAMlH,UAAU/B,MCXhB,WACE3C,KAAKiL,SAAW,IAAII,GACpBrL,KAAKkL,KAAO,GDUdU,GAAMlH,UAAkB,OEZxB,SAAqBmD,GACnB,IAAItF,EAAOvC,KAAKiL,SACZrJ,EAASW,EAAa,OAAEsF,GAG5B,OADA7H,KAAKkL,KAAO3I,EAAK2I,KACVtJ,GFQTgK,GAAMlH,UAAUpE,IGbhB,SAAkBuH,GAChB,OAAO7H,KAAKiL,SAAS3K,IAAIuH,IHa3B+D,GAAMlH,UAAUyG,IIdhB,SAAkBtD,GAChB,OAAO7H,KAAKiL,SAASE,IAAItD,IJc3B+D,GAAMlH,UAAUhE,IKPhB,SAAkBmH,EAAK3C,GACrB,IAAI3C,EAAOvC,KAAKiL,SAChB,GAAI1I,aAAgB8I,GAAW,CAC7B,IAAIQ,EAAQtJ,EAAK0I,SACjB,IAAKhL,IAAQ4L,EAAMjI,OAASkI,IAG1B,OAFAD,EAAM1B,KAAK,CAACtC,EAAK3C,IACjBlF,KAAKkL,OAAS3I,EAAK2I,KACZlL,KAETuC,EAAOvC,KAAKiL,SAAW,IAAIQ,GAASI,GAItC,OAFAtJ,EAAK7B,IAAImH,EAAK3C,GACdlF,KAAKkL,KAAO3I,EAAK2I,KACVlL,MC1BT,IAGIoI,GAHcjE,OAAOO,UAGc0D,qBAGnC2D,GAAmB5H,OAAO6H,sBAS1BC,GAAcF,GAA+B,SAASnE,GACxD,OAAc,MAAVA,EACK,IAETA,EAASzD,OAAOyD,GCdlB,SAAqBoD,EAAOkB,GAM1B,IALA,IAAIlC,GAAS,EACTpG,EAAkB,MAAToH,EAAgB,EAAIA,EAAMpH,OACnCuI,EAAW,EACXvK,EAAS,KAEJoI,EAAQpG,GAAQ,CACvB,IAAIsB,EAAQ8F,EAAMhB,GACdkC,EAAUhH,EAAO8E,EAAOgB,KAC1BpJ,EAAOuK,KAAcjH,GAGzB,OAAOtD,EDGAwK,CAAYL,GAAiBnE,IAAS,SAASyE,GACpD,OAAOjE,GAAqBhD,KAAKwC,EAAQyE,QEP7C,WACE,MAAO,ICRT,SAASC,GAAW1E,GAClB,OCEF,SAAwBA,EAAQ2E,EAAUC,GACxC,IAAI5K,EAAS2K,EAAS3E,GACtB,OAAOlC,EAAQkC,GAAUhG,ECR3B,SAAmBoJ,EAAOyB,GAKxB,IAJA,IAAIzC,GAAS,EACTpG,EAAS6I,EAAO7I,OAChB8I,EAAS1B,EAAMpH,SAEVoG,EAAQpG,GACfoH,EAAM0B,EAAS1C,GAASyC,EAAOzC,GAEjC,OAAOgB,EDA2B2B,CAAU/K,EAAQ4K,EAAY5E,IDJzDgF,CAAehF,EAAQX,GAAMgF,IGRtC,IAAIY,GAAWlF,EAAUrD,EAAM,YCA3B1B,GAAU+E,EAAUrD,EAAM,WCA1BzE,GAAM8H,EAAUrD,EAAM,OCctBwI,GAAqB1F,EAASyF,IAC9BE,GAAgB3F,EAASnH,IACzB+M,GAAoB5F,EAASxE,IAC7BqK,GAAgB7F,EAASvH,IACzBqN,GAAoB9F,EAASlH,GAS7BiN,GAASlI,GAGR4H,IAnBa,qBAmBDM,GAAO,IAAIN,GAAS,IAAIO,YAAY,MAChDnN,IA1BQ,gBA0BDkN,GAAO,IAAIlN,KAClB2C,IAzBY,oBAyBDuK,GAAOvK,GAAQC,YAC1BhD,IAzBQ,gBAyBDsN,GAAO,IAAItN,KAClBK,GAzBY,oBAyBDiN,GAAO,IAAIjN,MACzBiN,GAAS,SAASjI,GAChB,IAAItD,EAASqD,EAAWC,GACpBuF,EA/BQ,mBA+BD7I,EAAsBsD,EAAMwF,iBAAc1F,EACjDqI,EAAa5C,EAAOrD,EAASqD,GAAQ,GAEzC,GAAI4C,EACF,OAAQA,GACN,KAAKP,GAAoB,MA/Bf,oBAgCV,KAAKC,GAAe,MAtCf,eAuCL,KAAKC,GAAmB,MArCf,mBAsCT,KAAKC,GAAe,MArCf,eAsCL,KAAKC,GAAmB,MArCf,mBAwCb,OAAOtL,IAIX,OAAeuL,GCtDXG,GAAahJ,EAAKgJ,WCStB,SAASC,GAASd,GAChB,IAAIzC,GAAS,EACTpG,EAAmB,MAAV6I,EAAiB,EAAIA,EAAO7I,OAGzC,IADA5D,KAAKiL,SAAW,IAAIQ,KACXzB,EAAQpG,GACf5D,KAAKyC,IAAIgK,EAAOzC,ICRpB,SAASwD,GAAUxC,EAAOkB,GAIxB,IAHA,IAAIlC,GAAS,EACTpG,EAAkB,MAAToH,EAAgB,EAAIA,EAAMpH,SAE9BoG,EAAQpG,GACf,GAAIsI,EAAUlB,EAAMhB,GAAQA,EAAOgB,GACjC,OAAO,EAGX,OAAO,EDITuC,GAAS7I,UAAUjC,IAAM8K,GAAS7I,UAAUyF,KEV5C,SAAqBjF,GAEnB,OADAlF,KAAKiL,SAASvK,IAAIwE,EAbC,6BAcZlF,MFSTuN,GAAS7I,UAAUyG,IGfnB,SAAqBjG,GACnB,OAAOlF,KAAKiL,SAASE,IAAIjG,ICW3B,SAASuI,GAAYzC,EAAO1E,EAAOoH,EAASC,EAAYC,EAAWC,GACjE,IAAIC,EAjBqB,EAiBTJ,EACZK,EAAY/C,EAAMpH,OAClBoK,EAAY1H,EAAM1C,OAEtB,GAAImK,GAAaC,KAAeF,GAAaE,EAAYD,GACvD,OAAO,EAGT,IAAIE,EAAUJ,EAAMvN,IAAI0K,GACxB,GAAIiD,GAAWJ,EAAMvN,IAAIgG,GACvB,OAAO2H,GAAW3H,EAEpB,IAAI0D,GAAS,EACTpI,GAAS,EACTsM,EA9BuB,EA8BfR,EAAoC,IAAIH,QAAWvI,EAM/D,IAJA6I,EAAMnN,IAAIsK,EAAO1E,GACjBuH,EAAMnN,IAAI4F,EAAO0E,KAGRhB,EAAQ+D,GAAW,CAC1B,IAAII,EAAWnD,EAAMhB,GACjBoE,EAAW9H,EAAM0D,GAErB,GAAI2D,EACF,IAAIU,EAAWP,EACXH,EAAWS,EAAUD,EAAUnE,EAAO1D,EAAO0E,EAAO6C,GACpDF,EAAWQ,EAAUC,EAAUpE,EAAOgB,EAAO1E,EAAOuH,GAE1D,QAAiB7I,IAAbqJ,EAAwB,CAC1B,GAAIA,EACF,SAEFzM,GAAS,EACT,MAGF,GAAIsM,GACF,IAAKV,GAAUlH,GAAO,SAAS8H,EAAUE,GACnC,GCrDazG,EDqDOyG,GAANJ,ECpDX/C,IAAItD,KDqDFsG,IAAaC,GAAYR,EAAUO,EAAUC,EAAUV,EAASC,EAAYE,IAC/E,OAAOK,EAAK/D,KAAKmE,GCvD/B,IAAyBzG,KDyDX,CACNjG,GAAS,EACT,YAEG,GACDuM,IAAaC,IACXR,EAAUO,EAAUC,EAAUV,EAASC,EAAYE,GACpD,CACLjM,GAAS,EACT,OAKJ,OAFAiM,EAAc,OAAE7C,GAChB6C,EAAc,OAAEvH,GACT1E,EExET,SAAS2M,GAAW/C,GAClB,IAAIxB,GAAS,EACTpI,EAAS+D,MAAM6F,EAAIN,MAKvB,OAHAM,EAAIgD,SAAQ,SAAStJ,EAAO2C,GAC1BjG,IAASoI,GAAS,CAACnC,EAAK3C,MAEnBtD,ECPT,SAAS6M,GAAW/N,GAClB,IAAIsJ,GAAS,EACTpI,EAAS+D,MAAMjF,EAAIwK,MAKvB,OAHAxK,EAAI8N,SAAQ,SAAStJ,GACnBtD,IAASoI,GAAS9E,KAEbtD,ECNT,IAkBI8M,GAAclK,EAASA,EAAOE,eAAYM,EAC1C2J,GAAgBD,GAAcA,GAAYnI,aAAUvB,ECxBxD,IAMIL,GAHcR,OAAOO,UAGQC,eCCjC,IAWIA,GAHcR,OAAOO,UAGQC,eAgBjC,SAASiK,GAAgBhH,EAAQtB,EAAOoH,EAASC,EAAYC,EAAWC,GACtE,IAAIgB,EAAWnJ,EAAQkC,GACnBkH,EAAWpJ,EAAQY,GACnByI,EAASF,EA1BA,iBA0BsB1B,GAAOvF,GACtCoH,EAASF,EA3BA,iBA2BsB3B,GAAO7G,GAKtC2I,EA/BU,oBA4BdF,EA9BY,sBA8BHA,EA5BK,kBA4B2BA,GAIrCG,EAhCU,oBA6BdF,EA/BY,sBA+BHA,EA7BK,kBA6B2BA,GAIrCG,EAAYJ,GAAUC,EAE1B,GAAIG,GAAatG,GAASjB,GAAS,CACjC,IAAKiB,GAASvC,GACZ,OAAO,EAETuI,GAAW,EACXI,GAAW,EAEb,GAAIE,IAAcF,EAEhB,OADApB,IAAUA,EAAQ,IAAIjC,IACdiD,GAAYvF,GAAa1B,GAC7B6F,GAAY7F,EAAQtB,EAAOoH,EAASC,EAAYC,EAAWC,GFdnE,SAAoBjG,EAAQtB,EAAOjB,EAAKqI,EAASC,EAAYC,EAAWC,GACtE,OAAQxI,GACN,IAzBc,oBA0BZ,GAAKuC,EAAOwH,YAAc9I,EAAM8I,YAC3BxH,EAAOyH,YAAc/I,EAAM+I,WAC9B,OAAO,EAETzH,EAASA,EAAO0H,OAChBhJ,EAAQA,EAAMgJ,OAEhB,IAlCiB,uBAmCf,QAAK1H,EAAOwH,YAAc9I,EAAM8I,aAC3BxB,EAAU,IAAIN,GAAW1F,GAAS,IAAI0F,GAAWhH,KAKxD,IAnDU,mBAoDV,IAnDU,gBAoDV,IAjDY,kBAoDV,OAAO2B,GAAIL,GAAStB,GAEtB,IAxDW,iBAyDT,OAAOsB,EAAO2H,MAAQjJ,EAAMiJ,MAAQ3H,EAAO4H,SAAWlJ,EAAMkJ,QAE9D,IAxDY,kBAyDZ,IAvDY,kBA2DV,OAAO5H,GAAWtB,EAAQ,GAE5B,IAjES,eAkEP,IAAImJ,EAAUlB,GAEhB,IAjES,eAkEP,IAAIT,EA5EiB,EA4ELJ,EAGhB,GAFA+B,IAAYA,EAAUhB,IAElB7G,EAAOsD,MAAQ5E,EAAM4E,OAAS4C,EAChC,OAAO,EAGT,IAAIG,EAAUJ,EAAMvN,IAAIsH,GACxB,GAAIqG,EACF,OAAOA,GAAW3H,EAEpBoH,GAtFuB,EAyFvBG,EAAMnN,IAAIkH,EAAQtB,GAClB,IAAI1E,EAAS6L,GAAYgC,EAAQ7H,GAAS6H,EAAQnJ,GAAQoH,EAASC,EAAYC,EAAWC,GAE1F,OADAA,EAAc,OAAEjG,GACThG,EAET,IAnFY,kBAoFV,GAAI+M,GACF,OAAOA,GAAcvJ,KAAKwC,IAAW+G,GAAcvJ,KAAKkB,GAG9D,OAAO,EE/CDoJ,CAAW9H,EAAQtB,EAAOyI,EAAQrB,EAASC,EAAYC,EAAWC,GAExE,KArDyB,EAqDnBH,GAAiC,CACrC,IAAIiC,EAAeV,GAAYtK,GAAeS,KAAKwC,EAAQ,eACvDgI,EAAeV,GAAYvK,GAAeS,KAAKkB,EAAO,eAE1D,GAAIqJ,GAAgBC,EAAc,CAChC,IAAIC,EAAeF,EAAe/H,EAAO1C,QAAU0C,EAC/CkI,EAAeF,EAAetJ,EAAMpB,QAAUoB,EAGlD,OADAuH,IAAUA,EAAQ,IAAIjC,IACfgC,EAAUiC,EAAcC,EAAcpC,EAASC,EAAYE,IAGtE,QAAKsB,IAGLtB,IAAUA,EAAQ,IAAIjC,IDtDxB,SAAsBhE,EAAQtB,EAAOoH,EAASC,EAAYC,EAAWC,GACnE,IAAIC,EAtBqB,EAsBTJ,EACZqC,EAAWzD,GAAW1E,GACtBoI,EAAYD,EAASnM,OAIzB,GAAIoM,GAHW1D,GAAWhG,GACD1C,SAEMkK,EAC7B,OAAO,EAGT,IADA,IAAI9D,EAAQgG,EACLhG,KAAS,CACd,IAAInC,EAAMkI,EAAS/F,GACnB,KAAM8D,EAAYjG,KAAOvB,EAAQ3B,GAAeS,KAAKkB,EAAOuB,IAC1D,OAAO,EAIX,IAAIoG,EAAUJ,EAAMvN,IAAIsH,GACxB,GAAIqG,GAAWJ,EAAMvN,IAAIgG,GACvB,OAAO2H,GAAW3H,EAEpB,IAAI1E,GAAS,EACbiM,EAAMnN,IAAIkH,EAAQtB,GAClBuH,EAAMnN,IAAI4F,EAAOsB,GAGjB,IADA,IAAIqI,EAAWnC,IACN9D,EAAQgG,GAAW,CAE1B,IAAIE,EAAWtI,EADfC,EAAMkI,EAAS/F,IAEXoE,EAAW9H,EAAMuB,GAErB,GAAI8F,EACF,IAAIU,EAAWP,EACXH,EAAWS,EAAU8B,EAAUrI,EAAKvB,EAAOsB,EAAQiG,GACnDF,EAAWuC,EAAU9B,EAAUvG,EAAKD,EAAQtB,EAAOuH,GAGzD,UAAmB7I,IAAbqJ,EACG6B,IAAa9B,GAAYR,EAAUsC,EAAU9B,EAAUV,EAASC,EAAYE,GAC7EQ,GACD,CACLzM,GAAS,EACT,MAEFqO,IAAaA,EAAkB,eAAPpI,GAE1B,GAAIjG,IAAWqO,EAAU,CACvB,IAAIE,EAAUvI,EAAO8C,YACjB0F,EAAU9J,EAAMoE,YAGhByF,GAAWC,GACV,gBAAiBxI,GAAU,gBAAiBtB,KACzB,mBAAX6J,GAAyBA,aAAmBA,GACjC,mBAAXC,GAAyBA,aAAmBA,KACvDxO,GAAS,GAKb,OAFAiM,EAAc,OAAEjG,GAChBiG,EAAc,OAAEvH,GACT1E,ECNAyO,CAAazI,EAAQtB,EAAOoH,EAASC,EAAYC,EAAWC,IC9DrE,SAASyC,GAAYpL,EAAOoB,EAAOoH,EAASC,EAAYE,GACtD,OAAI3I,IAAUoB,IAGD,MAATpB,GAA0B,MAAToB,IAAmBb,EAAaP,KAAWO,EAAaa,GACpEpB,GAAUA,GAASoB,GAAUA,EAE/BsI,GAAgB1J,EAAOoB,EAAOoH,EAASC,EAAY2C,GAAazC,ICNzE,IAAI0C,GAAM,WACR,OAAOjM,EAAKkM,KAAKD,OCXfE,GAAYC,KAAKC,IACjBC,GAAYF,KAAKG,IAwDrB,SAASC,GAASzJ,EAAM0J,EAAMC,GAC5B,IAAIC,EACAC,EACAC,EACAvP,EACAwP,EACAC,EACAC,EAAiB,EACjBC,GAAU,EACVC,GAAS,EACTC,GAAW,EAEf,GAAmB,mBAARpK,EACT,MAAM,IAAIqK,UAzEQ,uBAmFpB,SAASC,EAAWC,GAClB,IAAIC,EAAOZ,EACPa,EAAUZ,EAKd,OAHAD,EAAWC,OAAWlM,EACtBsM,EAAiBM,EACjBhQ,EAASyF,EAAK0K,MAAMD,EAASD,GAI/B,SAASG,EAAYJ,GAMnB,OAJAN,EAAiBM,EAEjBR,EAAUa,WAAWC,EAAcnB,GAE5BQ,EAAUI,EAAWC,GAAQhQ,EAatC,SAASuQ,EAAaP,GACpB,IAAIQ,EAAoBR,EAAOP,EAM/B,YAAyBrM,IAAjBqM,GAA+Be,GAAqBrB,GACzDqB,EAAoB,GAAOZ,GANJI,EAAON,GAM8BH,EAGjE,SAASe,IACP,IAAIN,EAAOrB,KACX,GAAI4B,EAAaP,GACf,OAAOS,EAAaT,GAGtBR,EAAUa,WAAWC,EA3BvB,SAAuBN,GACrB,IAEIU,EAAcvB,GAFMa,EAAOP,GAI/B,OAAOG,EACHZ,GAAU0B,EAAanB,GAJDS,EAAON,IAK7BgB,EAoB+BC,CAAcX,IAGnD,SAASS,EAAaT,GAKpB,OAJAR,OAAUpM,EAINyM,GAAYR,EACPU,EAAWC,IAEpBX,EAAWC,OAAWlM,EACfpD,GAeT,SAAS4Q,IACP,IAAIZ,EAAOrB,KACPkC,EAAaN,EAAaP,GAM9B,GAJAX,EAAW3I,UACX4I,EAAWlR,KACXqR,EAAeO,EAEXa,EAAY,CACd,QAAgBzN,IAAZoM,EACF,OAAOY,EAAYX,GAErB,GAAIG,EAIF,OAFAkB,aAAatB,GACbA,EAAUa,WAAWC,EAAcnB,GAC5BY,EAAWN,GAMtB,YAHgBrM,IAAZoM,IACFA,EAAUa,WAAWC,EAAcnB,IAE9BnP,EAIT,OA3GAmP,EAAO3K,EAAS2K,IAAS,EACrBnL,EAASoL,KACXO,IAAYP,EAAQO,QAEpBJ,GADAK,EAAS,YAAaR,GACHP,GAAUrK,EAAS4K,EAAQG,UAAY,EAAGJ,GAAQI,EACrEM,EAAW,aAAcT,IAAYA,EAAQS,SAAWA,GAoG1De,EAAUG,OApCV,gBACkB3N,IAAZoM,GACFsB,aAAatB,GAEfE,EAAiB,EACjBL,EAAWI,EAAeH,EAAWE,OAAUpM,GAgCjDwN,EAAUI,MA7BV,WACE,YAAmB5N,IAAZoM,EAAwBxP,EAASyQ,EAAa9B,OA6BhDiC,ECzIT,SAASK,GAASxL,EAAM0J,EAAMC,GAC5B,IAAIO,GAAU,EACVE,GAAW,EAEf,GAAmB,mBAARpK,EACT,MAAM,IAAIqK,UAnDQ,uBAyDpB,OAJI9L,EAASoL,KACXO,EAAU,YAAaP,IAAYA,EAAQO,QAAUA,EACrDE,EAAW,aAAcT,IAAYA,EAAQS,SAAWA,GAEnDX,GAASzJ,EAAM0J,EAAM,CAC1BQ,QAAWA,EACXJ,QAAWJ,EACXU,SAAYA,IC1DhB,MAQaqB,YCReC,EAA+CvP,EAAmB,IAC1F,IAAIwP,EAAQxP,EAEZ,MAAMyP,EAAS,CACXjQ,IAAK,IA6DT,MAAO,CACHkQ,UAxDJ,YAAsBrB,GAClB,IACIsB,EADAtN,EAAO,MAEY,iBAAZgM,EAAK,IACZhM,EAAOgM,EAAK,GACZsB,EAAWtB,EAAK,IAEhBsB,EAAWtB,EAAK,GAEfoB,EAAOpN,KACRoN,EAAOpN,GAAQ,IAEnBoN,EAAOpN,GAAMsE,KAAKgJ,IA6ClBC,SA1CJ,SAAkBC,GACd,MAAMC,EAAWN,EAGjB,GAFAA,EAAQD,EAAQC,EAAOK,IAElBA,EAKD,YAHIJ,EAAY,KACZA,EAAY,IAAEzE,QAAQ2E,GAAYA,EAASH,KAKnD,MAAMO,EAcV,SAAyB1N,GACrB,MAAMoN,EAAS,CACXO,OAAQrP,OAAO8C,KAAKvD,GACpB+P,SAAUtP,OAAO8C,KAAKjD,IAG1B,IAAK,IAAK6D,EAAK6L,KAAUvP,OAAO0G,QAAQoI,GACpC,GAAIS,EAAMC,SAAS9N,GACf,OAAOgC,EAGf,OAAO,KAzBW+L,CAAgBP,EAAOxN,MACzC,OAAI0N,GAAaN,EAAOM,GACbN,EAAOM,GAAW/E,QAAQ2E,ICf7C,IAAiBjO,EAAOoB,EAAPpB,EDgBY8N,EAAMO,GChBXjN,EDgBuBgN,EAASC,GCf/CjD,GAAYpL,EAAOoB,IDgBR6M,EAASH,EAAMO,WAH3B,GA8BAM,SArBJ,WACI,OAAOb,IDxCWc,UGTMC,GAC5B,MAAMC,EAAc7P,OAAO8C,KAAK8M,GAChC,OAAO,SAAqBf,EAAcK,GACtC,MAAMY,EAAY,GAElB,IAAK,IAAIC,EAAI,EAAGA,EAAIF,EAAYpQ,OAAQsQ,IAAK,CACzC,MAAMrM,EAAMmM,EAAYE,GAMlBC,GAAkBpB,EAJRgB,EAASlM,IAEGmL,EAAMnL,GAEmBwL,GAErDY,EAAUpM,GAAOsM,EAErB,OAAOF,GHfCG,CAAgB,CAC5BZ,gB/FKkCR,EAAcK,GAIhD,GAHKL,IACDA,EAAQxP,IAEP6P,EACD,OAAOL,EAEX,MAAMnN,KAAEA,EAAItD,KAAEA,GAAS8Q,EAEvB,OAAQxN,GACJ,KAAKnC,EAAY2Q,MACb,MAAO,IACArB,KACAzQ,GAEX,QACI,OAAOyQ,I+FpBfS,kB9FUoCT,EAAcK,GAKlD,GAJKL,IACDA,EAAQxP,IAGP6P,EACD,OAAOL,EAGX,MAAMnN,KAAEA,EAAItD,KAAEA,GAAS8Q,EAEvB,OAAQxN,GACJ,KAAK7B,EAAcsQ,QACf,MAAO,IACAtB,EACHrP,MAAOpB,EAAKoB,MACZE,QAAStB,EAAKsB,SAEtB,KAAKG,EAAcuQ,SACf,MAAO,IACAvB,EACHrP,MAAOpB,EAAKoB,OAEpB,KAAKK,EAAcwQ,KACf,MAAO,IACAxB,KACAzQ,GAEX,QACI,OAAOyQ,OkGjCbyB,GAAWC,IACb,MAAMC,EAAqC,GACrCC,EAAQF,EAAGG,WAMjB,OAJIH,EAAGI,UACHH,EAAQG,QAAU,QAGlBF,GAASA,EAAMhR,OACRO,OAAOsI,OAAOmI,GAAOG,OAAO,CAACC,EAAUC,KAE1C,MAAM1F,KAAEA,EAAIrK,MAAEA,GAAU+P,EAExB,OADAD,EAAIzF,GAAQrK,EACL8P,GACRL,GAEAA,GAcEO,GAAgB,CAACR,EAAaS,KACvC,GAAIT,EAAGjM,WAAa2M,KAAKC,UACrB,OAAO,KAEX,GAAmB,WAAfX,EAAGY,QACH,OAAO,KAEX,MAAMjS,EAhDW,EAACqR,EAAaa,KAC/B,MAAMD,EAAUZ,EAAGY,QAAQE,oBAAoBC,OAC/C,MAAO,CACHrV,GAAIN,EAAUU,eACdoU,MAAOH,GAAQC,GACfrP,IAAKiQ,EACLI,SAAU,GACVC,MAAO,CAAEJ,MAAOA,GAAqB,QAAZD,KAyCfM,CAAalB,EAAIS,IACzB/U,GAAEA,GAAOiD,EAkBf,OAjBAvD,EAAU+V,QAAQnB,EAAItU,GACtB+U,EAAaA,GAAc9R,EAAMsS,MAAMJ,MACvCb,EAAGoB,WAAWtH,QAASjO,IACnB,GAAIA,EAAKkI,WAAa2M,KAAKW,aAAc,CACrC,MAAMC,EAAQd,GAAc3U,EAAM4U,GAC9Ba,GACA3S,EAAMqS,SAASvL,KAAK6L,QAErB,GAAIzV,EAAKkI,WAAa2M,KAAKC,WAC1B9U,EAAK0V,UAAW,CAChB,MAAMC,EAAOC,GAAa5V,EAAK0V,WAC3BC,GACA7S,EAAMqS,SAASvL,KAAK+L,MAK7B7S,GAGL8S,GAAgBF,GACXA,EAAUzP,QAAQ,QAAS,IAAIA,QAAQ,MAAO,IAc5C4P,GAXQC,IACjB,MAAMC,KAAEA,EAAIC,KAAEA,GAASF,EACvB,MAAO,CACHjW,GAAIN,EAAUU,eACd6E,IAAK,OACLuP,MAAO,GACPc,SAAU,CAACR,GAAcoB,GAAOpB,GAAcqB,IAC9CZ,MAAO,CAAEJ,OAAO,cCpFRiB,GAAajW,EAAmBgP,EAAcrK,GAC1D,GAAa,UAATqK,GAaJ,IAAI,UAAU7I,KAAK6I,GAInB,OAAOhP,EAAKiW,aAAajH,GAAgB,IAAVrK,EAAiB,GAAKgF,OAAOhF,SAhBxD,GAAIA,EACA,GAAqB,iBAAVA,EACP3E,EAAKkW,MAAMC,QAAUxR,OAClB,GAAc,OAAVA,GAAmC,iBAAVA,EAChC,IAAK,MAAOyR,EAAGC,KAAMzS,OAAO0G,QAAQ3F,GAChC3E,EAAKkW,MAAME,GAAYC,WCH3BC,GAAaxT,EAA8B9C,GACvD,GAAI8C,MAAAA,EACA,OAAO,KAEX,GAAqB,iBAAVA,EACP,OAoDR,SAAoByT,EAAkBvW,GAClC,IAAIwW,EAEJ,OADAA,EAASC,SAASC,eAAeH,GAC1BC,EAvDIG,CAAW7T,GAEtB,MAAM0T,EA2BV,SAAoB1T,GAChB,MAAMjD,GAAEA,EAAEuV,MAAEA,GAAUtS,GAChBkS,MAAEA,GAAUI,EAClB,IAAIoB,EACJ,MAAMzB,GAWgBjQ,EAXWhC,EAAMgC,IAYG,CACtC8R,OAAQ,YAEW9R,IAAQA,GAJnC,IAA0BA,EATlB0R,EADAxB,EACSyB,SAASI,gBAAgB,6BAA8B9B,GAEvD0B,SAAS9B,cAAcI,GAIpC,OADAxV,EAAUuX,WAAWjX,EAAI2W,GAClBA,EAvCQO,CAAWjU,GAK1B,OAJKA,EAAMqS,UAAYrS,EAAMqS,SAAS9R,QAAYmT,EAAOjB,YAAciB,EAAOjB,WAAWlS,SAO7F,SAAgBP,EAAc9C,GAC1B,MAAMgX,EAA0B,GACVlU,EAAMqS,SAAS/O,QACvB6H,QAAQgJ,IAClB,IAAIxB,EAAQuB,EAAajM,MACzB0K,EAAQa,GAAaW,GACjBxB,GACAzV,EAAKkX,YAAYzB,KAbrB0B,CAAOrU,EAAO0T,GAkBtB,SAA0B1T,EAAc9C,GACpC,MAAMqU,MAAEA,GAAUvR,EAClB,IAAK,MAAOkM,EAAMoI,KAAQxT,OAAO0G,QAAQ+J,GACrC4B,GAAajW,EAAqBgP,EAAMoI,GAnB5CC,CAAiBvU,EAAO0T,GACjBA,ECdX,IAAYc,GAQAC,GAOAC,GAoEAC,IAnFZ,SAAYH,GACRA,kBACAA,YACAA,gBACAA,0BACAA,kCALJ,CAAYA,KAAAA,QAQZ,SAAYC,GACRA,cACAA,gBACAA,kBACAA,gBACAA,cALJ,CAAYA,KAAAA,QAOZ,SAAYC,GACRA,cACAA,gBAFJ,CAAYA,KAAAA,QAoEZ,SAAYC,GACRA,YACAA,kBACAA,cAHJ,CAAYA,KAAAA,QCqOZ,MAAaC,GAAY,CACrBC,eAtSJ,SAAwBC,GACpB,MAAMC,EAAOjX,OAAOkX,SAASD,KAC7B,IAAIjV,EAAQhC,OAAOmX,YAActB,SAASuB,gBAAgBC,aAAexB,SAAST,KAAKiC,YACnFpV,EAASjC,OAAOsX,aAAezB,SAASuB,gBAAgBG,cAAgB1B,SAAST,KAAKmC,aAE1FP,EAAK,CACDtS,KAAMgS,GAAac,OACnBpW,KAAM,CACFY,MAAAA,EACAC,OAAAA,EACAgV,KAAAA,GAEJxG,KAAMpB,KAAKD,MAAM1L,cA2RrB+T,YAvRJ,SAAqBT,GACjBA,EAAK,CACDtS,KAAMgS,GAAagB,IACnBtW,KAAM,CACFc,MAAO+S,GAAuBY,WAElCpF,KAAMpB,KAAKD,MAAM1L,cAkRrBiU,aA9QJ,SAAsBX,IAClB,WACI,MAYMY,EAAiBlG,GAZVtR,IACT4W,EAAK,CACDtS,KAAMgS,GAAamB,MACnBzW,KAAM,CACFsD,KAAMkS,GAAekB,KACrBC,EAAG3X,EAAE2X,EACLC,EAAG5X,EAAE4X,GAETvH,KAAMpB,KAAKD,MAAM1L,cAIY,IAAK,CACtC4M,UAAU,IAGduF,SAASoC,iBALI,YAKmBL,GAEhCnZ,EAAc6C,IAAI,KACduU,SAASqC,oBARA,YAQ0BN,KA0B3CO,GAtBA,WACI,MAcMP,EAAiBlG,GAdVtR,IACT4W,EAAK,CACDtS,KAAMgS,GAAamB,MACnBzW,KAAM,CACFsD,KAAMkS,GAAewB,MACrBnZ,GAAIN,EAAU0Z,UAAUjY,EAAEO,QAC1BoX,EAAG3X,EAAE2X,EACLC,EAAG5X,EAAE4X,GAETvH,KAAMpB,KAAKD,MAAM1L,cAKY,KACrCjF,EAAc6C,IAAI,KACduU,SAASqC,oBAHA,QAG0BN,KAEvC/B,SAASoC,iBALI,QAKmBL,GAIpCU,IA+NAC,WA5NJ,SAAoBvB,GAChB,MA2FMwB,EAAW,IAAIC,iBA3FuBC,IACxC,MAAMC,EAAmC,GASzCD,EAAQrL,QAASuL,IACb,MAAMjY,OAAEA,EAAMkY,WAAEA,EAAUC,aAAEA,EAAYpU,KAAEA,EAAIqU,YAAEA,EAAWC,cAAEA,GAAkBJ,EAEzEK,GAXWC,EAWYxU,EAVtB,SAAStD,GACZuX,EAAU3P,KAAK,CACXkQ,MAAAA,EACA9X,KAAAA,MAJZ,IAAqB8X,EAajB,OAAQxU,GACJ,IAAK,aACD,GAAIsU,EAAe,CACf,MAAMG,EAAgBxY,EAAmByY,aAAaJ,GACtDC,EAAS,CACLja,OAAQL,EAAU0Z,UAAU1X,GAC5BoD,MAAOoV,EACPrF,KAAMkF,IAGd,MACJ,IAAK,gBACD,MAAMK,EAAS1Y,EAAO2Y,WACtBL,EAAS,CACLM,SAAU5a,EAAU0Z,UAAUgB,GAC9BtV,MAAOpD,EAAOmU,UACd0E,IAAKH,EAAO1E,WAAWlS,OAAS,EAAI,IAAI4W,EAAO1E,YAAY8E,QAAQ9Y,GAAuB,OAE9F,MACJ,IAAK,YACGkY,EAAWpW,QACXoW,EAAWxL,QAAQjO,IACf,IAAI2V,EACA7S,EACJ,GAAI9C,EAAKkI,WAAa2M,KAAKC,UAAW,CAClCa,EAAO3V,EAAK0V,UACZ,MAAM0E,EAAMhV,MAAMkV,KAAKta,EAAKka,WAAY3E,YAAY8E,QAAQra,GAC5D6Z,EAAS,CACLvU,KAAMmS,GAAwB8C,IAC9BJ,SAAU5a,EAAU0Z,UAAUjZ,EAAKka,YACnCvV,MAAO3E,EAAKwa,YACZJ,IAAAA,QAED,CAEHtX,EAAQ6R,GAAc3U,GAEtB,MAAMia,EAASja,EAAKka,WACpBL,EAAS,CACLvU,KAAMmS,GAAwB8C,IAC9BJ,SAAU5a,EAAU0Z,UAAU1X,GAC9BuB,MAAAA,EACAsX,IACIH,EAAO1E,WAAWlS,OAAS,EACrB,IAAI4W,EAAO1E,YAAY8E,QAAQra,GAC/B,UAKtB0Z,EAAarW,QACbqW,EAAazL,QAAQjO,IACjB6Z,EAAS,CACLvU,KAAMmS,GAAwBgD,OAC9BN,SAAU5a,EAAU0Z,UAAU1X,GAC9B3B,OAAQL,EAAU0Z,UAAUjZ,IAAS,YAUzDuZ,EAAUlW,QACVuU,EAAK,CACDtS,KAAMgS,GAAaoD,WACnB1Y,KAAM,CACFuX,UAAAA,GAEJlI,KAAMpB,KAAKD,MAAM1L,eAM7B8U,EAASuB,QAAQlE,SAAST,KAAM,CAC5B4E,mBAAmB,EACnBtG,YAAY,EACZuG,eAAe,EACfC,uBAAuB,EACvBC,WAAW,EACXC,SAAS,IAGb3b,EAAc6C,IAAI,KACdkX,EAAS6B,gBAsHbC,mBAlHJ,SAA4BtD,IAK5B,SAAsBA,GAClB,MAAMuD,EAAa,CAAC,QAAS,SAAU,QAAS,QAchD,SAASC,EAASpa,GAGd,OAFkBA,EAAEsE,MAGhB,IAAK,QACL,IAAK,SACDsS,EAAK,CACDtS,KAAMgS,GAAa+D,eACnBrZ,KAAM,CACFsD,KAAMiS,GAAiB+D,MACvBzb,GAAIN,EAAU0Z,UAAUjY,EAAEO,QAC1BoD,MAAQ3D,EAAEO,OAA4BoD,OAE1C0M,KAAMpB,KAAKD,MAAM1L,aAErB,MACJ,IAAK,QACDsT,EAAK,CACDtS,KAAMgS,GAAa+D,eACnBrZ,KAAM,CACFsD,KAAMiS,GAAiBgE,MACvB1b,GAAIN,EAAU0Z,UAAUjY,EAAEO,SAE9B8P,KAAMpB,KAAKD,MAAM1L,aAErB,MACJ,IAAK,OACDsT,EAAK,CACDtS,KAAMgS,GAAa+D,eACnBrZ,KAAM,CACFsD,KAAMiS,GAAiBiE,KACvB3b,GAAIN,EAAU0Z,UAAUjY,EAAEO,SAE9B8P,KAAMpB,KAAKD,MAAM1L,cA7CjC6W,EACKlQ,IAAI3F,GAASmW,IACVhF,SAASoC,iBAAiBvT,EAAMmW,EAAI,CAAEC,MAAM,EAAOC,SAAS,EAAMC,SAAS,MAE9E3N,QAAQ4N,GAAUA,EAAOT,IAE9B/b,EAAc6C,IAAI,KACdiZ,EAAWlN,QAAQ3I,IACfmR,SAASqC,oBAAoBxT,EAAM8V,GAAU,OAfrDU,CAAalE,GA6DjB,SAAsBA,GAiClB,SAASmE,EAA+BzU,EAAa3C,GACjDiT,EAAK,CACDtS,KAAMgS,GAAa+D,eACnBrZ,KAAM,CACFsD,KAAMiS,GAAiByE,KACvBnc,GAAIN,EAAU0Z,UAAUxZ,MACxB6H,IAAAA,EACA3C,MAAAA,GAEJ0M,KAAMpB,KAAKD,MAAM1L,aAzCoB,CACzC,CAAC2X,iBAAiB9X,UAAW,SAC7B,CAAC8X,iBAAiB9X,UAAW,WAC7B,CAAC+X,kBAAkB/X,UAAW,SAC9B,CAACgY,oBAAoBhY,UAAW,UAGR8G,IAAImR,GACrB,KACH,MAAO7a,EAAQ+F,GAAO8U,EAChBC,EAAWzY,OAAO0Y,yBAAyB/a,EAAQ+F,GACzD1D,OAAO2Y,eAAehb,EAAQ+F,EAAK,CAC/BnH,IAAK,SAASwE,GACV+M,WAAW,KACPqK,EAAYlX,KAAKpF,KAAM6H,EAAK3C,KAE5B0X,GAAYA,EAASlc,KACrBkc,EAASlc,IAAI0E,KAAKpF,KAAMkF,MAKpCtF,EAAc6C,IAAI,KACVma,GACAzY,OAAO2Y,eAAehb,EAAQ+F,EAAK+U,OAM3CG,OAAO,IAAIvO,QAAQ4N,GAAUA,KA3FrCY,CAAa7E,KC3MX8E,GAAO,CACTC,UAAW,KACPvX,MAAMkV,KAAKjb,EAAc6M,UAAU+B,QAAQ2O,GAAMA,aCF5CC,GAQTrd,YAAYsd,GACRrd,KAAKqD,MAAQga,EAAOha,MACpBrD,KAAKmD,MAAQka,EAAOla,MACpBnD,KAAKoD,OAASia,EAAOja,OACrBpD,KAAKsd,OAGTvd,OACIC,KAAKud,eACLvd,KAAKwd,cAGTzd,cACIC,KAAKyd,QAAUzd,KAAK0d,UAAUC,cAAc,eAC5C3d,KAAKyd,QAAQhH,MAAMtT,MAAQnD,KAAKmD,MAAQ,KACxCnD,KAAKyd,QAAQhH,MAAMrT,OAASpD,KAAKoD,OAAS,KAC1C,MAAMwa,EAAc5d,KAAKyd,QAAQI,cAAyB7G,SAC1D4G,EAAWE,aAAajH,GAAa7W,KAAKqD,OAAeua,EAAWrF,iBAGxExY,eACIiX,SAASV,KAAKmB,YAAYzX,KAAK+d,eAC/B/G,SAAST,KAAKkB,YAAYzX,KAAKge,mBAGnCje,kBACI,MACMke,GADS,IAAIC,WACIC,kuEAAsB,aAAa5H,KAAK6H,WAK/D,OAJAH,EAAQxH,MAAMtT,MAAQnD,KAAKmD,MAAQ,KACnC8a,EAAQxH,MAAMrT,OAASpD,KAAKoD,OAAS,KACrC6a,EAAQxH,MAAM4H,SAAW,WACzBJ,EAAQxH,MAAM6H,OAAS,SACfte,KAAK0d,UAAYO,EAG7Ble,cAGI,OAFe,IAAIme,WACEC,gBAAgB,8xCAA2B,aAAa7H,KAAK8H,YC/C1F,MAGaG,GASTxe,YAAY2d,GACR1d,KAAK0d,UAAYA,EACjB1d,KAAKsd,OAGTvd,OACIC,KAAKwe,WAAaxe,KAAK0d,UAAUC,cAAc,gBAC/C3d,KAAKye,SAAWze,KAAKwe,WAAWb,cAAc,UAC9C3d,KAAK0e,QAAU1e,KAAKwe,WAAWb,cAAc,SAC7C3d,KAAKwe,WAAWpF,iBAAiB,QAAU7X,IACvC,GAAIA,EAAEO,QAA4B,WAAlBP,EAAEO,OAAO+D,KAAmB,CACxC,MAAMpC,EAAQkb,OAAQpd,EAAEO,OAAuByY,aAAa,UAC5Dva,KAAKyD,MAAQA,EACbqP,GAAWM,SAAS,CAChBvN,KAAMnC,EAAY2Q,MAClB9R,KAAM,CACFkB,MAAAA,QAMhBqP,GAAWI,UAAU,SAAUF,IAC3BhT,KAAK4e,KAAK5L,EAAMvP,OAChBzD,KAAK6e,SAAS7L,EAAMvP,SAI5B1D,KAAK0D,GACa,IAAVA,GACAzD,KAAKye,SAASK,gBAAgB,YAC9B9e,KAAK0e,QAAQlI,aAAa,WAAY,MAEtCxW,KAAK0e,QAAQI,gBAAgB,YAC7B9e,KAAKye,SAASjI,aAAa,WAAY,KAI/CzW,SAAS0D,GACL,MAAMsb,EAAa/e,KAAK0d,UAAUsB,iBAAiB,UAClD,IAAID,GAAYvQ,QAAQjO,IACrBA,EAAKue,gBAAgB,cAGzB,MAAM9U,EAAkB,IAAVvG,EAAc,EAAc,IAAVA,EAAc,EAAc,KAAVA,EAAe,GAAK,EAClEuG,GAAS,GACT+U,EAAW/U,GAAOwM,aAAa,WAAY,cC1CvCyI,GAAiCC,GAC7C,MAAMrZ,KAAEA,EAAItD,KAAEA,GAAS2c,EACvB,OAAQrZ,GACJ,KAAKgS,GAAamB,MACd,MAAME,EAAEA,EAACC,EAAEA,EAACtT,KAAEA,GAAStD,EACnBsD,IAASkS,GAAekB,KACxBjZ,KAAKmf,QAAQC,KAAKlG,EAAGC,GACdtT,IAASkS,GAAewB,OAC/BvZ,KAAKmf,QAAQE,MAAMnG,EAAGC,GAE1B,MACJ,KAAKtB,GAAaoD,WACd,MAAMnB,UAAEA,GAAcvX,EACtBuX,EAAUtL,QAAS8Q,IACf,MAAMjF,MAAEA,EAAK9X,KAAEA,GAAS+c,GAClBpa,MAAEA,EAAK+P,KAAEA,EAAIpP,KAAEA,EAAI6U,SAAEA,EAAQC,IAAEA,EAAGxa,OAAEA,EAAMkD,MAAEA,GAAUd,EAE5D,OAAQ8X,GACJ,IAAK,aACgBva,EAAUc,QAAQT,GAC1BqW,aAAavB,EAAM/P,GAC5B,MACJ,IAAK,gBACD,MAAMqa,EAAWzf,EAAUc,QAAQ8Z,GACnC,GAAY,OAARC,EAAc,CACd,MAAM7Y,EAASyd,EAASzJ,WAAW6E,GACnC4E,EAASzB,aAAa9G,SAASC,eAAe/R,GAAQpD,QAEtDyd,EAASC,UAAYta,EAEzB,MACJ,IAAK,YACD,MAAMuV,EAAa3a,EAAUc,QAAQ8Z,GAC/B+E,EAAc3f,EAAUc,QAAQT,IAAuB0W,GAAaxT,GAC1E,GAAIwC,IAASmS,GAAwBgD,OAC7ByE,GACAhF,EAAYiF,YAAYD,QAEzB,GAAIzH,GAAwB8C,IAC/B,GAAI5V,EAAO,CAEP,MAAM4R,EAAWE,SAASC,eAAe/R,GACrCuV,EAAW3E,WAAWlS,OACtB6W,EAAWqD,aAAahH,EAAU2D,EAAW3E,WAAW6E,IAExDF,EAAYhD,YAAYX,QAI5B2D,EAAWkF,aAAaF,EAAYhF,EAAW3E,WAAW6E,OAO9E,MACJ,KAAK9C,GAAa+D,eACd,MAAMxb,GAAEA,EAAEyH,IAAEA,EAAKhC,KAAM+Z,EAAQ1a,MAAEA,GAAU3C,EACrChC,EAAOT,EAAUc,QAAQR,GAC3Bwf,IAAa9H,GAAiB+D,MAC9Btb,EAAK2E,MAAQA,EACN0a,IAAa9H,GAAiBgE,MACrCvb,EAAKsf,QACED,IAAa9H,GAAiBiE,KACrCxb,EAAKuf,OACEF,IAAa9H,GAAiByE,OACrChc,EAAKsH,GAAQ3C,UC/EhB6a,GAaThgB,YAAYwC,EAAsB4c,EAA2B1L,GAX7DzT,WAAQ,EACRA,WAAQ,EACRA,gBAAa,EACbA,oBAAiB,EASbA,KAAKuC,KAAOA,EACZvC,KAAKmf,QAAUA,EACfnf,KAAKyT,SAAWA,EAEhBX,GAAWI,UAAU,SAAUF,IAC3BhT,KAAKggB,cAAgBlN,GAAWe,WAAqB,SACrD,MAAMpQ,EAAQuP,EAAMvP,MACpBzD,KAAKyD,MAAQA,EACTA,EAAQ,EACRzD,KAAKigB,KAAKxc,GAEVzD,KAAKkgB,QAETlgB,KAAKmgB,OAASngB,KAAKogB,uBAI3BrgB,KAAK0D,GACD4c,qBAAqBrgB,KAAKsgB,WAC1BtgB,KAAKsgB,UAAYC,sBAKjB,SAASC,IACL,MAAMC,EAAYjQ,KAAKD,MAAQmQ,EAC/B,GAAI1gB,KAAK2gB,WAAa,IAAM3gB,KAAKmgB,OAAOngB,KAAK2gB,WAAa,GAEtD,YADA3gB,KAAK4gB,OAGJ5gB,KAAK8D,YACN9D,KAAK8D,UAAY6a,OAAO3e,KAAKmgB,OAAOngB,KAAK2gB,cAG7C,MAAME,EAAW7gB,KAAK8D,UAAY2c,EAAYhd,EACxCqd,EAAWnC,OAAO3e,KAAKmgB,OAAOngB,KAAK2gB,WAAa,IAEtD,GAAIE,GAAYC,EAAU,CACtB9gB,KAAK2gB,aAEL,MAAMlN,EAAYzT,KAAK2gB,WAAa3gB,KAAKmgB,OAAOvc,OAAU,IAEtD6P,EAAWzT,KAAK+gB,eAAiB/gB,KAAKghB,uBACtChhB,KAAKyT,SAASwN,eAAexN,GAC7BzT,KAAK+gB,eAAiBtN,GAGtBzT,KAAKuC,KAAKvC,KAAKgK,QAAU6W,GAAY7gB,KAAKuC,KAAKvC,KAAKgK,OAAO4H,OAC3D5R,KAAKkhB,UAAU9b,KAAKpF,KAAMA,KAAKuC,KAAKvC,KAAKgK,QACzChK,KAAKgK,SAIbhK,KAAKsgB,UAAYC,sBAAsBC,EAAKW,KAAKnhB,QAlCTmhB,KAAKnhB,OAEjD,MAAM0gB,EAAWlQ,KAAKD,MACtBvQ,KAAK8D,UAAY,EAmCrB/D,QACIsgB,qBAAqBrgB,KAAKsgB,WAC1BxN,GAAWM,SAAS,CAChBvN,KAAMnC,EAAY2Q,MAClB9R,KAAM,CACFkB,MAAO,KAKnB1D,OACIC,KAAKgK,MAAQ,EACbhK,KAAKkgB,QAGTngB,UAAiCmf,GAC7BD,GAAU7Z,KAAKpF,KAAMkf,GAGzBnf,qBAGI,MAFU,IAEHC,KAAKyD,MADF,GAId1D,mBAAmBqhB,EAAW,IAC1BphB,KAAKggB,cAAgBlN,GAAWe,WAAqB,SACrD,MAAM/P,UAAEA,EAASC,QAAEA,GAAY/D,KAAKggB,cAI9Bze,GAAKwC,EAFG,IAIRnC,EAAmB,GAEzB,IAAK,IAAIsS,GALEpQ,EAKKoQ,EAAI3S,EAAG2S,GAAKkN,EACxBxf,EAAOuI,KAAK+J,GAGhB,OADAtS,EAAOuI,KAAK5I,GACLK,SCpHFyf,GAKTthB,cAJAC,OAAI,EACJA,OAAI,EAIAA,KAAKshB,cAGTvhB,cACIC,KAAKmf,QAAUnI,SAASuK,eAAe,cACvCvhB,KAAKof,KAAK,EAAG,GAGjBrf,KAAKmZ,EAAWC,GACZnZ,KAAKkZ,EAAIA,EACTlZ,KAAKmZ,EAAIA,EACTnZ,KAAKmf,QAAQ1I,MAAM+K,KAAOxhB,KAAKkZ,EAAI,KACnClZ,KAAKmf,QAAQ1I,MAAMgL,IAAMzhB,KAAKmZ,EAAI,KAGtCpZ,MAAMmZ,EAAWC,GACbnZ,KAAKof,KAAKlG,EAAGC,GACbnZ,KAAKmf,QAAQ3I,aAAa,SAAU,IACpCvE,WAAW,KACPjS,KAAKmf,QAAQL,gBAAgB,WAC9B,WCxBE4C,GAUT3hB,YAAY4hB,GADZ3hB,mBAAgB,EAEZA,KAAKyT,SAAWkO,EAAEhE,cAAc,gBAChC3d,KAAK4hB,MAAQ5hB,KAAKyT,SAASkK,cAAc,aACzC3d,KAAK6hB,OAAS7hB,KAAKyT,SAASkK,cAAc,kBAG9C5d,eAAe+hB,GACX9hB,KAAK4hB,MAAMnL,MAAM+K,KAAOM,EAAa,WCbhCC,GASThiB,YAAY2d,EAAwBnb,GAChCvC,KAAK0d,UAAYA,EACjB1d,KAAKuC,KAAOA,EACZvC,KAAKgiB,gBAGTjiB,gBACIC,KAAKiiB,SAAW,IAAI1D,GAAkBve,KAAK0d,WAC3C1d,KAAKyT,SAAW,IAAIiO,GAAkB1hB,KAAK0d,WAC3C1d,KAAKmf,QAAU,IAAIkC,GACnBrhB,KAAKwT,OAAS,IAAIuM,GAAgB/f,KAAKuC,KAAMvC,KAAKmf,QAASnf,KAAKyT,uCPflD,EAAGyO,QAAAA,GAA2B,MAKpD,SAAmBA,GACiB,IAAI/d,OAAOsI,OAAOwL,KAEtCzJ,QAAQ2T,IAChBA,EAAKD,KARTE,CAAUF,GACHjF,mBQRJoF,iBACH,MAAM9e,QAAgBD,GAChBH,MAAEA,EAAKC,OAAEA,EAAMC,MAAEA,EAAKd,KAAEA,SAAegB,EAAQ+e,UAE/CX,EAAI,IAAIvE,GAAU,CAAE/Z,MAAAA,EAAOF,MAAAA,EAAOC,OAAAA,IACxC,IAAI2e,GAAMJ,EAAEjE,UAAWnb,GAEvBuQ,GAAWM,SAAS,CAChBvN,KAAM7B,EAAcwQ,KACpBjS,KAAM,CACFoB,MAAO,EACPE,QAAStB,EAAK,GAAGqP,KACjB9N,UAAWvB,EAAK,GAAGqP,KACnB7N,QAASxB,EAAKA,EAAKqB,OAAS,GAAGgO,KAC/BhO,OAAQrB,EAAKqB,UAIrBkP,GAAWM,SAAS,CAChBvN,KAAMnC,EAAY2Q,MAClB9R,KAAM,CAAEkB,MAAO"} \ No newline at end of file +{"version":3,"file":"replay.cjs.js","sources":["../packages/utils/src/store/listener.ts","../packages/utils/src/store/node.ts","../packages/utils/src/store/data.ts","../packages/utils/src/redux/reducers/player.ts","../packages/utils/src/redux/reducers/progress.ts","../node_modules/lodash-es/_freeGlobal.js","../node_modules/lodash-es/_root.js","../node_modules/lodash-es/_Symbol.js","../node_modules/lodash-es/_getRawTag.js","../node_modules/lodash-es/_objectToString.js","../node_modules/lodash-es/_baseGetTag.js","../node_modules/lodash-es/isObjectLike.js","../node_modules/lodash-es/isArray.js","../node_modules/lodash-es/isObject.js","../node_modules/lodash-es/toNumber.js","../node_modules/lodash-es/isSymbol.js","../node_modules/lodash-es/isFunction.js","../node_modules/lodash-es/_coreJsData.js","../node_modules/lodash-es/_isMasked.js","../node_modules/lodash-es/_toSource.js","../node_modules/lodash-es/_baseIsNative.js","../node_modules/lodash-es/_getNative.js","../node_modules/lodash-es/_getValue.js","../node_modules/lodash-es/_WeakMap.js","../node_modules/lodash-es/_isIndex.js","../node_modules/lodash-es/eq.js","../node_modules/lodash-es/isLength.js","../node_modules/lodash-es/_isPrototype.js","../node_modules/lodash-es/_baseIsArguments.js","../node_modules/lodash-es/isArguments.js","../node_modules/lodash-es/isBuffer.js","../node_modules/lodash-es/stubFalse.js","../node_modules/lodash-es/_baseIsTypedArray.js","../node_modules/lodash-es/_nodeUtil.js","../node_modules/lodash-es/_baseUnary.js","../node_modules/lodash-es/isTypedArray.js","../node_modules/lodash-es/_arrayLikeKeys.js","../node_modules/lodash-es/_baseTimes.js","../node_modules/lodash-es/_nativeKeys.js","../node_modules/lodash-es/_overArg.js","../node_modules/lodash-es/_baseKeys.js","../node_modules/lodash-es/keys.js","../node_modules/lodash-es/isArrayLike.js","../node_modules/lodash-es/_nativeCreate.js","../node_modules/lodash-es/_hashGet.js","../node_modules/lodash-es/_hashHas.js","../node_modules/lodash-es/_Hash.js","../node_modules/lodash-es/_assocIndexOf.js","../node_modules/lodash-es/_hashClear.js","../node_modules/lodash-es/_hashDelete.js","../node_modules/lodash-es/_hashSet.js","../node_modules/lodash-es/_listCacheDelete.js","../node_modules/lodash-es/_ListCache.js","../node_modules/lodash-es/_listCacheClear.js","../node_modules/lodash-es/_listCacheGet.js","../node_modules/lodash-es/_listCacheHas.js","../node_modules/lodash-es/_listCacheSet.js","../node_modules/lodash-es/_Map.js","../node_modules/lodash-es/_getMapData.js","../node_modules/lodash-es/_isKeyable.js","../node_modules/lodash-es/_MapCache.js","../node_modules/lodash-es/_mapCacheClear.js","../node_modules/lodash-es/_mapCacheDelete.js","../node_modules/lodash-es/_mapCacheGet.js","../node_modules/lodash-es/_mapCacheHas.js","../node_modules/lodash-es/_mapCacheSet.js","../node_modules/lodash-es/_Stack.js","../node_modules/lodash-es/_stackClear.js","../node_modules/lodash-es/_stackDelete.js","../node_modules/lodash-es/_stackGet.js","../node_modules/lodash-es/_stackHas.js","../node_modules/lodash-es/_stackSet.js","../node_modules/lodash-es/_getSymbols.js","../node_modules/lodash-es/_arrayFilter.js","../node_modules/lodash-es/stubArray.js","../node_modules/lodash-es/_getAllKeys.js","../node_modules/lodash-es/_baseGetAllKeys.js","../node_modules/lodash-es/_arrayPush.js","../node_modules/lodash-es/_DataView.js","../node_modules/lodash-es/_Promise.js","../node_modules/lodash-es/_Set.js","../node_modules/lodash-es/_getTag.js","../node_modules/lodash-es/_Uint8Array.js","../node_modules/lodash-es/_SetCache.js","../node_modules/lodash-es/_arraySome.js","../node_modules/lodash-es/_setCacheAdd.js","../node_modules/lodash-es/_setCacheHas.js","../node_modules/lodash-es/_equalArrays.js","../node_modules/lodash-es/_cacheHas.js","../node_modules/lodash-es/_mapToArray.js","../node_modules/lodash-es/_setToArray.js","../node_modules/lodash-es/_equalByTag.js","../node_modules/lodash-es/_equalObjects.js","../node_modules/lodash-es/_baseIsEqualDeep.js","../node_modules/lodash-es/_baseIsEqual.js","../node_modules/lodash-es/now.js","../node_modules/lodash-es/debounce.js","../node_modules/lodash-es/throttle.js","../packages/utils/src/redux/index.ts","../packages/utils/src/redux/create-store.ts","../node_modules/lodash-es/isEqual.js","../packages/utils/src/redux/combine-reducers.ts","../packages/virtual-dom/src/serialize.ts","../packages/virtual-dom/src/dom.ts","../packages/virtual-dom/src/deserialize.ts","../packages/snapshot/src/types.ts","../packages/snapshot/src/snapshot.ts","../packages/record/src/record.ts","../packages/player/src/container.ts","../packages/player/src/keyboard.ts","../packages/player/src/dom.ts","../packages/player/src/player.ts","../packages/player/src/pointer.ts","../packages/player/src/progress.ts","../packages/player/src/panel.ts","../packages/player/src/index.ts"],"sourcesContent":["export const listenerStore = new Set()\n","class NodeStore {\n private nodeId = 1\n private nodeMap: Map = new Map()\n private idMap: WeakMap = new WeakMap()\n\n public createNodeId = () => this.nodeId++\n\n public getNode(id: number) {\n return this.nodeMap.get(id)\n }\n\n public addNode(node: Node, id: number = this.createNodeId()) {\n this.idMap.set(node, id)\n this.nodeMap.set(id, node)\n return id\n }\n\n public removeNode(id: number) {\n this.nodeMap.delete(id)\n this.idMap.delete(this.getNode(id) as Node)\n }\n\n public getNodeId(node: Node) {\n return this.idMap.get(node)\n }\n\n public updateNode(id: number, node: Node) {\n this.idMap.set(node, id)\n this.nodeMap.set(id, node)\n }\n}\n\nexport const nodeStore = new NodeStore()\n","import { SnapshotData, WindowSnapshotData, DOMSnapshotData } from '@WebReplay/snapshot'\n\nexport class IndexDBOperator {\n db: IDBDatabase\n DBName: string\n version: number\n storeName: string\n\n constructor(DBName: string, version: number, storeName: string, callback: (db: IDBDatabase) => void) {\n this.DBName = DBName\n this.version = version\n this.storeName = storeName\n\n const request = window.indexedDB.open(DBName, version)\n request.onerror = e => {\n console.error('open IndexDB on error')\n }\n\n request.onsuccess = e => {\n this.db = request.result\n\n // this.clear()\n\n callback(this.db)\n }\n\n request.onupgradeneeded = e => {\n const db = e.target!.result\n\n if (!db.objectStoreNames.contains(storeName)) {\n const objectStore = db.createObjectStore(storeName, { autoIncrement: true, keyPath: 'id' })\n objectStore.createIndex('type', 'type', { unique: false })\n objectStore.createIndex('data', 'data', { unique: false })\n objectStore.createIndex('time', 'time', { unique: false })\n }\n }\n }\n\n add(data: SnapshotData) {\n const request = this.db\n .transaction([`${this.storeName}`], 'readwrite')\n .objectStore(`${this.storeName}`)\n .add(data)\n\n request.onerror = e => {\n throw new Error('write IndexDB on error')\n }\n }\n\n clear() {\n const objectStore = this.db.transaction([`${this.storeName}`], 'readwrite').objectStore(`${this.storeName}`)\n objectStore.clear()\n }\n\n async readAll(): Promise {\n const objectStore = this.db.transaction([`${this.storeName}`], 'readwrite').objectStore(`${this.storeName}`)\n return new Promise(resolve => {\n objectStore.getAll().onsuccess = event => {\n const result = event!.target!.result as SnapshotData[]\n resolve(result)\n }\n })\n }\n\n async getData() {\n const all = await this.readAll()\n\n const [window, virtualNode, ...data] = all\n const [{ width, height }, { vNode }] = [window.data, virtualNode.data] as [WindowSnapshotData, DOMSnapshotData]\n\n return {\n width,\n height,\n vNode,\n data\n }\n }\n}\n\nexport const DBPromise: Promise = new Promise(resolve => {\n const indexDB = new IndexDBOperator('wr_db', 1, 'wr_data', () => {\n resolve(indexDB)\n })\n})\n","import { State } from '../create-store'\n\nlet initState = {\n speed: null\n}\n\nexport enum PlayerTypes {\n SPEED = 'SPEED'\n}\n\nexport type PlayerState = typeof PlayerTypes\n\nexport default function playerReducer(state: State, action: any) {\n if (!state) {\n state = initState\n }\n if (!action) {\n return state\n }\n const { type, data } = action\n\n switch (type) {\n case PlayerTypes.SPEED:\n return {\n ...state,\n ...data\n }\n default:\n return state\n }\n}\n","import { State } from '../create-store'\n\nconst initState = {\n frame: 0,\n length: 0,\n curTime: 0,\n startTime: 0,\n endTime: 0\n}\n\nexport type ProgressState = typeof initState\n\nexport enum ProgressTypes {\n FORWARD = 'FORWARD',\n BACKWARD = 'BACKWARD',\n INFO = 'INFO'\n}\n\nexport default function progressReducer(state: State, action?: any) {\n if (!state) {\n state = initState\n }\n\n if (!action) {\n return state\n }\n\n const { type, data } = action\n\n switch (type) {\n case ProgressTypes.FORWARD:\n return {\n ...state,\n frame: data.frame,\n curTime: data.curTime\n }\n case ProgressTypes.BACKWARD:\n return {\n ...state,\n frame: data.frame\n }\n case ProgressTypes.INFO:\n return {\n ...state,\n ...data\n }\n default:\n return state\n }\n}\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nexport default freeGlobal;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nexport default root;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nexport default Symbol;\n","import Symbol from './_Symbol.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nexport default getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nexport default objectToString;\n","import Symbol from './_Symbol.js';\nimport getRawTag from './_getRawTag.js';\nimport objectToString from './_objectToString.js';\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nexport default baseGetTag;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nexport default isObjectLike;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nexport default isArray;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nexport default isObject;\n","import isObject from './isObject.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nexport default toNumber;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nexport default isSymbol;\n","import baseGetTag from './_baseGetTag.js';\nimport isObject from './isObject.js';\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nexport default isFunction;\n","import root from './_root.js';\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nexport default coreJsData;\n","import coreJsData from './_coreJsData.js';\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nexport default isMasked;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nexport default toSource;\n","import isFunction from './isFunction.js';\nimport isMasked from './_isMasked.js';\nimport isObject from './isObject.js';\nimport toSource from './_toSource.js';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nexport default baseIsNative;\n","import baseIsNative from './_baseIsNative.js';\nimport getValue from './_getValue.js';\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nexport default getNative;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nexport default getValue;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nexport default WeakMap;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\nexport default isIndex;\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\nexport default eq;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nexport default isLength;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\nexport default isPrototype;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nexport default baseIsArguments;\n","import baseIsArguments from './_baseIsArguments.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\nexport default isArguments;\n","import root from './_root.js';\nimport stubFalse from './stubFalse.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nexport default isBuffer;\n","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nexport default stubFalse;\n","import baseGetTag from './_baseGetTag.js';\nimport isLength from './isLength.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nexport default baseIsTypedArray;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\nexport default nodeUtil;\n","/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\nexport default baseUnary;\n","import baseIsTypedArray from './_baseIsTypedArray.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nexport default isTypedArray;\n","import baseTimes from './_baseTimes.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isIndex from './_isIndex.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default arrayLikeKeys;\n","/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\nexport default baseTimes;\n","import overArg from './_overArg.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nexport default nativeKeys;\n","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\nexport default overArg;\n","import isPrototype from './_isPrototype.js';\nimport nativeKeys from './_nativeKeys.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default baseKeys;\n","import arrayLikeKeys from './_arrayLikeKeys.js';\nimport baseKeys from './_baseKeys.js';\nimport isArrayLike from './isArrayLike.js';\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nexport default keys;\n","import isFunction from './isFunction.js';\nimport isLength from './isLength.js';\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\nexport default isArrayLike;\n","import getNative from './_getNative.js';\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nexport default nativeCreate;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nexport default hashGet;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nexport default hashHas;\n","import hashClear from './_hashClear.js';\nimport hashDelete from './_hashDelete.js';\nimport hashGet from './_hashGet.js';\nimport hashHas from './_hashHas.js';\nimport hashSet from './_hashSet.js';\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nexport default Hash;\n","import eq from './eq.js';\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\nexport default assocIndexOf;\n","import nativeCreate from './_nativeCreate.js';\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\nexport default hashClear;\n","/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\nexport default hashDelete;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\nexport default hashSet;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\nexport default listCacheDelete;\n","import listCacheClear from './_listCacheClear.js';\nimport listCacheDelete from './_listCacheDelete.js';\nimport listCacheGet from './_listCacheGet.js';\nimport listCacheHas from './_listCacheHas.js';\nimport listCacheSet from './_listCacheSet.js';\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nexport default ListCache;\n","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\nexport default listCacheClear;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\nexport default listCacheGet;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\nexport default listCacheHas;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\nexport default listCacheSet;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nexport default Map;\n","import isKeyable from './_isKeyable.js';\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\nexport default getMapData;\n","/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\nexport default isKeyable;\n","import mapCacheClear from './_mapCacheClear.js';\nimport mapCacheDelete from './_mapCacheDelete.js';\nimport mapCacheGet from './_mapCacheGet.js';\nimport mapCacheHas from './_mapCacheHas.js';\nimport mapCacheSet from './_mapCacheSet.js';\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nexport default MapCache;\n","import Hash from './_Hash.js';\nimport ListCache from './_ListCache.js';\nimport Map from './_Map.js';\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\nexport default mapCacheClear;\n","import getMapData from './_getMapData.js';\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\nexport default mapCacheDelete;\n","import getMapData from './_getMapData.js';\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\nexport default mapCacheGet;\n","import getMapData from './_getMapData.js';\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\nexport default mapCacheHas;\n","import getMapData from './_getMapData.js';\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\nexport default mapCacheSet;\n","import ListCache from './_ListCache.js';\nimport stackClear from './_stackClear.js';\nimport stackDelete from './_stackDelete.js';\nimport stackGet from './_stackGet.js';\nimport stackHas from './_stackHas.js';\nimport stackSet from './_stackSet.js';\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\nexport default Stack;\n","import ListCache from './_ListCache.js';\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n}\n\nexport default stackClear;\n","/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n}\n\nexport default stackDelete;\n","/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\nexport default stackGet;\n","/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\nexport default stackHas;\n","import ListCache from './_ListCache.js';\nimport Map from './_Map.js';\nimport MapCache from './_MapCache.js';\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n}\n\nexport default stackSet;\n","import arrayFilter from './_arrayFilter.js';\nimport stubArray from './stubArray.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n};\n\nexport default getSymbols;\n","/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n}\n\nexport default arrayFilter;\n","/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\nexport default stubArray;\n","import baseGetAllKeys from './_baseGetAllKeys.js';\nimport getSymbols from './_getSymbols.js';\nimport keys from './keys.js';\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\n\nexport default getAllKeys;\n","import arrayPush from './_arrayPush.js';\nimport isArray from './isArray.js';\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\nexport default baseGetAllKeys;\n","/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\nexport default arrayPush;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nexport default DataView;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nexport default Promise;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nexport default Set;\n","import DataView from './_DataView.js';\nimport Map from './_Map.js';\nimport Promise from './_Promise.js';\nimport Set from './_Set.js';\nimport WeakMap from './_WeakMap.js';\nimport baseGetTag from './_baseGetTag.js';\nimport toSource from './_toSource.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n setTag = '[object Set]',\n weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\nexport default getTag;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nexport default Uint8Array;\n","import MapCache from './_MapCache.js';\nimport setCacheAdd from './_setCacheAdd.js';\nimport setCacheHas from './_setCacheHas.js';\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\nexport default SetCache;\n","/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\nfunction arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n}\n\nexport default arraySome;\n","/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\nexport default setCacheAdd;\n","/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\nexport default setCacheHas;\n","import SetCache from './_SetCache.js';\nimport arraySome from './_arraySome.js';\nimport cacheHas from './_cacheHas.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(array);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n}\n\nexport default equalArrays;\n","/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\nexport default cacheHas;\n","/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\nexport default mapToArray;\n","/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\nexport default setToArray;\n","import Symbol from './_Symbol.js';\nimport Uint8Array from './_Uint8Array.js';\nimport eq from './eq.js';\nimport equalArrays from './_equalArrays.js';\nimport mapToArray from './_mapToArray.js';\nimport setToArray from './_setToArray.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n}\n\nexport default equalByTag;\n","import getAllKeys from './_getAllKeys.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n}\n\nexport default equalObjects;\n","import Stack from './_Stack.js';\nimport equalArrays from './_equalArrays.js';\nimport equalByTag from './_equalByTag.js';\nimport equalObjects from './_equalObjects.js';\nimport getTag from './_getTag.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\nexport default baseIsEqualDeep;\n","import baseIsEqualDeep from './_baseIsEqualDeep.js';\nimport isObjectLike from './isObjectLike.js';\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\nexport default baseIsEqual;\n","import root from './_root.js';\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nexport default now;\n","import isObject from './isObject.js';\nimport now from './now.js';\nimport toNumber from './toNumber.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nexport default debounce;\n","import debounce from './debounce.js';\nimport isObject from './isObject.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\nfunction throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n}\n\nexport default throttle;\n","import { createStore } from './create-store'\nimport { combineReducers } from './combine-reducers'\n\nimport progressReducer from './reducers/progress'\nimport playerReducer from './reducers/player'\n\nconst reducer = combineReducers({\n player: playerReducer,\n progress: progressReducer\n})\n\nexport { PlayerTypes, PlayerState } from './reducers/player'\nexport { ProgressTypes, ProgressState } from './reducers/progress'\n\nexport const reduxStore = createStore(reducer)\n","import { PlayerTypes } from './reducers/player'\nimport { ProgressTypes } from './reducers/progress'\nimport { isEqual } from 'lodash-es'\n\nexport type State = { [key: string]: any }\n\nexport function createStore(reducer: (state: State, action: any) => State, initState: State = {}) {\n let state = initState\n\n const topics = {\n all: []\n } as { [key: string]: Function[] }\n\n function subscribe(type: string, listener: (state: State) => void): void\n function subscribe(listener: (state: State) => void): void\n\n function subscribe(...args: any): void {\n let type = 'all'\n let listener\n if (typeof args[0] === 'string') {\n type = args[0]\n listener = args[1]\n } else {\n listener = args[0]\n }\n if (!topics[type]) {\n topics[type] = []\n }\n topics[type].push(listener)\n }\n\n function dispatch(action?: { type: string; data?: any }) {\n const oldState = state\n state = reducer(state, action)\n\n if (!action) {\n // dispatch all\n if (topics['all']) {\n topics['all'].forEach(listener => listener(state))\n }\n return\n }\n\n const topicName = getTypeInTopics(action.type)\n if (topicName && topics[topicName]) {\n return topics[topicName].forEach(listener => {\n if (!isEqual(state[topicName], oldState[topicName])) {\n listener(state[topicName])\n }\n })\n }\n }\n\n function getState() {\n return state\n }\n\n function getTypeInTopics(type: string) {\n const topics = {\n player: Object.keys(PlayerTypes),\n progress: Object.keys(ProgressTypes)\n } as { [key: string]: string[] }\n\n for (let [key, enums] of Object.entries(topics)) {\n if (enums.includes(type)) {\n return key\n }\n }\n return null\n }\n\n return {\n subscribe,\n dispatch,\n getState\n }\n}\n","import baseIsEqual from './_baseIsEqual.js';\n\n/**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\nfunction isEqual(value, other) {\n return baseIsEqual(value, other);\n}\n\nexport default isEqual;\n","import { State } from './create-store'\n\nexport type Action = { type: string; state: State }\nexport type Reducer = (state: State, action?: Action) => State\n\nexport function combineReducers(reducers: { [key: string]: Reducer }) {\n const reducerKeys = Object.keys(reducers)\n return function combination(state: State, action?: Action) {\n const nextState = {} as State\n\n for (let i = 0; i < reducerKeys.length; i++) {\n const key = reducerKeys[i] // reducer name\n\n const reducer = reducers[key]\n\n const previousStateForKey = state[key]\n\n const nextStateForKey = reducer(previousStateForKey, action)\n\n nextState[key] = nextStateForKey\n }\n return nextState\n }\n}\n","import { VNode } from './types'\nimport { nodeStore } from '@WebReplay/utils'\n\nconst getVNodeByEl = (el: Element, isSVG?: boolean): VNode => {\n const tagName = el.tagName.toLocaleLowerCase().trim()\n return {\n id: nodeStore.createNodeId(),\n attrs: getAttr(el as HTMLElement & { checked: boolean }),\n tag: tagName,\n children: [] as VNode[],\n extra: { isSVG: isSVG || tagName === 'svg' }\n }\n}\n\nconst getAttr = (el: HTMLElement & { checked: boolean }) => {\n const resAttr: { [key: string]: string } = {}\n const attrs = el.attributes\n if (el.checked) {\n resAttr.checked = 'true'\n }\n\n if (attrs && attrs.length) {\n return Object.values(attrs).reduce((ret: any, attr) => {\n const [name, value] = extraAttr(attr)\n if (name) {\n ret[name] = value\n }\n return ret\n }, resAttr)\n }\n return resAttr\n}\n\nconst extraAttr = (attr: Attr) => {\n let { name, value } = attr\n if (name === 'href' || name === 'src') {\n if (/^\\/(?!\\/)/.test(value)) {\n const origin = location.origin\n value = origin + value\n } else if (value.startsWith('#/')) {\n return []\n }\n }\n return [name, value]\n}\n\nexport const createElement = (el: Element, inheritSVG?: boolean): VNode | null => {\n if (el.nodeType === Node.TEXT_NODE) {\n return null\n }\n if (el.tagName === 'SCRIPT') {\n return null\n }\n const vNode = getVNodeByEl(el, inheritSVG)\n const { id } = vNode\n nodeStore.addNode(el, id)\n inheritSVG = inheritSVG || vNode.extra.isSVG\n el.childNodes.forEach((node: Element) => {\n if (node.nodeType === Node.ELEMENT_NODE) {\n const child = createElement(node, inheritSVG)\n if (child) {\n vNode.children.push(child)\n }\n } else if (node.nodeType === Node.TEXT_NODE) {\n if (node.nodeValue) {\n const text = trimNodeText(node.nodeValue)\n if (text) {\n vNode.children.push(text)\n }\n }\n }\n })\n return vNode\n}\n\nconst trimNodeText = (nodeValue: string) => {\n return nodeValue.replace(/\\r\\n/g, '').replace(/\\n/g, '')\n}\n\nconst convertHTML = (doc: Document) => {\n const { head, body } = doc\n return {\n id: nodeStore.createNodeId(),\n tag: 'html',\n attrs: {},\n children: [createElement(head), createElement(body)],\n extra: { isSVG: false }\n }\n}\n\nexport const virtualDOM = {\n createElement,\n convertHTML\n}\n","export function setAttribute(node: HTMLElement, name: string, value: string | boolean): void {\n if (name === 'style') {\n if (value) {\n if (typeof value === 'string') {\n node.style.cssText = value\n } else if (value !== null && typeof value === 'object') {\n for (const [k, v] of Object.entries(value)) {\n node.style[k as any] = v as any\n }\n }\n }\n return\n }\n\n if (/^on\\w+$/.test(name)) {\n return\n }\n\n return node.setAttribute(name, value === true ? '' : String(value))\n}\n","import { setAttribute } from './dom'\nimport { nodeStore } from '@WebReplay/utils'\nimport { VNode } from './types'\n\nexport function convertVNode(vNode: VNode | string | null, node: Element | null): Element | null {\n if (vNode === null || vNode === undefined) {\n return null\n }\n if (typeof vNode === 'string') {\n return createText(vNode, node)\n }\n const output = createNode(vNode)\n if ((vNode.children && vNode.children.length) || (output.childNodes && output.childNodes.length)) {\n travel(vNode, output)\n }\n createAttributes(vNode, output)\n return output\n}\n\nfunction travel(vNode: VNode, node: Element): void {\n const nodeChildren: Element[] = []\n const vNodeChildren = vNode.children.slice()\n vNodeChildren.forEach(vChild => {\n let child = nodeChildren.pop() as Element | null\n child = convertVNode(vChild, child)\n if (child) {\n node.appendChild(child)\n }\n })\n}\n\nfunction createAttributes(vNode: VNode, node: Element): void {\n const { attrs } = vNode\n for (const [name, val] of Object.entries(attrs)) {\n setAttribute(node as HTMLElement, name, val)\n }\n}\n\nfunction createNode(vNode: VNode): Element {\n const { id, extra } = vNode\n const { isSVG } = extra\n let output: Element\n const tagName = transformTagName(vNode.tag)\n if (isSVG) {\n output = document.createElementNS('http://www.w3.org/2000/svg', tagName)\n } else {\n output = document.createElement(tagName)\n }\n\n nodeStore.updateNode(id, output)\n return output\n}\n\nfunction transformTagName(tag: string) {\n const tagMap: { [key: string]: string } = {\n script: 'noscript'\n }\n const tagName = tagMap[tag] || tag\n return tagName\n}\n\nfunction createText(textNode: string, node: Element | null | null): Element | null {\n let output: Element | Node\n output = document.createTextNode(textNode)\n return output as Element\n}\n","import { VNode } from '@WebReplay/virtual-dom'\n\nexport enum SnapshotType {\n 'WINDOW' = 'WINDOW',\n 'DOM' = 'DOM',\n 'MOUSE' = 'MOUSE',\n 'DOM_UPDATE' = 'DOM_UPDATE',\n 'FORM_EL_UPDATE' = 'FORM_EL_UPDATE'\n}\n\nexport enum FormElementEvent {\n 'ATTR' = 'ATTR',\n 'INPUT' = 'INPUT',\n 'CHANGE' = 'CHANGE',\n 'FOCUS' = 'FOCUS',\n 'BLUR' = 'BLUR'\n}\nexport enum MouseEventType {\n 'MOVE' = 'MOVE',\n 'CLICK' = 'click'\n}\n\nexport interface WindowSnapshot {\n type: SnapshotType.WINDOW\n data: WindowSnapshotData\n time: string\n}\nexport interface WindowSnapshotData {\n width: number\n height: number\n href: string\n}\n\nexport interface DOMSnapshot {\n type: SnapshotType.DOM\n data: DOMSnapshotData\n time: string\n}\n\nexport interface DOMSnapshotData {\n vNode: VNode\n}\nexport interface MouseSnapshot {\n type: SnapshotType.MOUSE\n data: MouseSnapshotData\n time: string\n}\nexport interface MouseSnapshotData {\n type: MouseEventType\n x: number\n y: number\n id?: number\n}\nexport interface DOMObserve {\n type: SnapshotType.DOM_UPDATE\n data: DOMObserveData\n time: string\n}\nexport interface DOMObserveData {\n mutations: DOMObserveMutations[]\n}\nexport interface DOMObserveMutations {\n mType: 'attributes' | 'characterData' | 'childList'\n data: ChildListUpdateData | CharacterDataUpdateData | AttributesUpdateData\n}\n\nexport interface AttributesUpdateData {\n nodeId: number\n value: string\n attr: string\n}\n\nexport interface CharacterDataUpdateData {\n parentId: number\n value: string\n}\n\nexport interface ChildListUpdateData {\n type: ChildListUpdateDataType\n parentId: number\n nodeId: number\n pos: number\n value?: string\n vNode: VNode\n}\nexport enum ChildListUpdateDataType {\n 'ADD' = 'ADD',\n 'DELETE' = 'DELETE',\n 'MOVE' = 'MOVE'\n}\n\nexport interface FormElementObserve {\n type: SnapshotType.FORM_EL_UPDATE\n data: FormElementObserveData\n time: string\n}\n\nexport interface FormElementObserveData {\n type: FormElementEvent\n id: number\n key?: string\n value?: string\n}\n\nexport type SnapshotEvent = (e: T) => void\n\nexport type SnapshotData = FormElementObserve | DOMObserve | MouseSnapshot | DOMSnapshot | WindowSnapshot\n","import { virtualDOM, createElement, convertVNode } from '@WebReplay/virtual-dom'\nimport {\n SnapshotType,\n WindowSnapshot,\n DOMSnapshot,\n SnapshotEvent,\n MouseSnapshot,\n DOMObserve,\n FormElementObserve,\n FormElementEvent,\n MouseEventType,\n AttributesUpdateData,\n CharacterDataUpdateData,\n DOMObserveMutations,\n ChildListUpdateData,\n ChildListUpdateDataType\n} from './types'\nimport { throttle } from 'lodash-es'\nimport { nodeStore, listenerStore } from '@WebReplay/utils'\nimport { VNode } from '@WebReplay/virtual-dom'\n\nfunction windowSnapshot(emit: SnapshotEvent) {\n const href = window.location.href\n var width = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth\n var height = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight\n\n emit({\n type: SnapshotType.WINDOW,\n data: {\n width,\n height,\n href\n },\n time: Date.now().toString()\n })\n}\n\nfunction DOMSnapshot(emit: SnapshotEvent) {\n emit({\n type: SnapshotType.DOM,\n data: {\n vNode: virtualDOM.convertHTML(document) as VNode\n },\n time: Date.now().toString()\n })\n}\n\nfunction mouseObserve(emit: SnapshotEvent) {\n function mouseMove() {\n const evt = (e: MouseEvent) => {\n emit({\n type: SnapshotType.MOUSE,\n data: {\n type: MouseEventType.MOVE,\n x: e.x,\n y: e.y\n },\n time: Date.now().toString()\n })\n }\n const name = 'mousemove'\n const listenerHandle = throttle(evt, 100, {\n trailing: true\n })\n\n document.addEventListener(name, listenerHandle)\n\n listenerStore.add(() => {\n document.removeEventListener(name, listenerHandle)\n })\n }\n\n function mouseClick() {\n const evt = (e: MouseEvent) => {\n emit({\n type: SnapshotType.MOUSE,\n data: {\n type: MouseEventType.CLICK,\n id: nodeStore.getNodeId(e.target as Element),\n x: e.x,\n y: e.y\n },\n time: Date.now().toString()\n })\n }\n\n const name = 'click'\n const listenerHandle = throttle(evt, 250)\n listenerStore.add(() => {\n document.removeEventListener(name, listenerHandle)\n })\n document.addEventListener(name, listenerHandle)\n }\n\n mouseMove()\n mouseClick()\n}\n\nfunction DOMObserve(emit: SnapshotEvent) {\n const mutationCallback: MutationCallback = (records: MutationRecord[]) => {\n const mutations: DOMObserveMutations[] = []\n function addMutation(mType: 'attributes' | 'characterData' | 'childList') {\n return function(data: any) {\n mutations.push({\n mType,\n data\n })\n }\n }\n records.forEach((record: MutationRecord) => {\n const { target, addedNodes, removedNodes, type, nextSibling, attributeName } = record\n\n const joinData = addMutation(type)\n\n switch (type) {\n case 'attributes':\n if (attributeName) {\n const curAttrValue = (target as Element).getAttribute(attributeName)\n joinData({\n nodeId: nodeStore.getNodeId(target),\n value: curAttrValue,\n attr: attributeName\n } as AttributesUpdateData)\n }\n break\n case 'characterData':\n const parent = target.parentNode!\n joinData({\n parentId: nodeStore.getNodeId(parent),\n value: target.nodeValue,\n pos: parent.childNodes.length > 0 ? [...parent.childNodes].indexOf(target as ChildNode) : null\n } as CharacterDataUpdateData)\n break\n case 'childList':\n if (addedNodes.length) {\n addedNodes.forEach(node => {\n let text\n let vNode: any\n if (node.nodeType === Node.TEXT_NODE) {\n text = node.nodeValue\n const pos = Array.from(node.parentNode!.childNodes).indexOf(node as ChildNode)\n joinData({\n type: ChildListUpdateDataType.ADD,\n parentId: nodeStore.getNodeId(node.parentNode!),\n value: node.textContent,\n pos\n } as ChildListUpdateData)\n } else {\n // reset element for remove reference\n vNode = createElement(node as HTMLElement)\n // convertVNode(vNode, null)\n const parent = node.parentNode!\n joinData({\n type: ChildListUpdateDataType.ADD,\n parentId: nodeStore.getNodeId(target),\n vNode,\n pos:\n parent.childNodes.length > 0\n ? [...parent.childNodes].indexOf(node as ChildNode)\n : null\n } as ChildListUpdateData)\n }\n })\n }\n if (removedNodes.length) {\n removedNodes.forEach(node => {\n joinData({\n type: ChildListUpdateDataType.DELETE,\n parentId: nodeStore.getNodeId(target) as number,\n nodeId: nodeStore.getNodeId(node) || null\n } as ChildListUpdateData)\n })\n }\n break\n default:\n break\n }\n })\n\n if (mutations.length) {\n emit({\n type: SnapshotType.DOM_UPDATE,\n data: {\n mutations\n },\n time: Date.now().toString()\n })\n }\n }\n\n const observer = new MutationObserver(mutationCallback)\n observer.observe(document.body, {\n attributeOldValue: true,\n attributes: true,\n characterData: true,\n characterDataOldValue: true,\n childList: true,\n subtree: true\n })\n\n listenerStore.add(() => {\n observer.disconnect()\n })\n}\n\nfunction formElementObserve(emit: SnapshotEvent) {\n listenInputs(emit)\n kidnapInputs(emit) // for sys write in input\n}\n\nfunction listenInputs(emit: SnapshotEvent) {\n const eventTypes = ['input', 'change', 'focus', 'blur']\n\n eventTypes\n .map(type => (fn: (e: InputEvent) => void) => {\n document.addEventListener(type, fn, { once: false, passive: true, capture: true })\n })\n .forEach(handle => handle(handleFn))\n\n listenerStore.add(() => {\n eventTypes.forEach(type => {\n document.removeEventListener(type, handleFn, true)\n })\n })\n\n function handleFn(e: InputEvent) {\n const eventType = e.type\n\n switch (eventType) {\n case 'input':\n case 'change':\n emit({\n type: SnapshotType.FORM_EL_UPDATE,\n data: {\n type: FormElementEvent.INPUT,\n id: nodeStore.getNodeId(e.target as Node)!,\n value: (e.target as HTMLInputElement).value\n },\n time: Date.now().toString()\n })\n break\n case 'focus':\n emit({\n type: SnapshotType.FORM_EL_UPDATE,\n data: {\n type: FormElementEvent.FOCUS,\n id: nodeStore.getNodeId(e.target as Node)!\n },\n time: Date.now().toString()\n })\n break\n case 'blur':\n emit({\n type: SnapshotType.FORM_EL_UPDATE,\n data: {\n type: FormElementEvent.BLUR,\n id: nodeStore.getNodeId(e.target as Node)!\n },\n time: Date.now().toString()\n })\n break\n default:\n break\n }\n }\n}\n\nfunction kidnapInputs(emit: SnapshotEvent) {\n const elementList: [HTMLElement, string][] = [\n [HTMLInputElement.prototype, 'value'],\n [HTMLInputElement.prototype, 'checked'],\n [HTMLSelectElement.prototype, 'value'],\n [HTMLTextAreaElement.prototype, 'value']\n ]\n\n const handles = elementList.map(item => {\n return () => {\n const [target, key] = item\n const original = Object.getOwnPropertyDescriptor(target, key)\n Object.defineProperty(target, key, {\n set: function(value: string | boolean) {\n setTimeout(() => {\n handleEvent.call(this, key, value)\n })\n if (original && original.set) {\n original.set.call(this, value)\n }\n }\n })\n\n listenerStore.add(() => {\n if (original) {\n Object.defineProperty(target, key, original)\n }\n })\n }\n })\n\n handles.concat([]).forEach(handle => handle())\n\n function handleEvent(this: HTMLElement, key: string, value: string) {\n emit({\n type: SnapshotType.FORM_EL_UPDATE,\n data: {\n type: FormElementEvent.ATTR,\n id: nodeStore.getNodeId(this)!,\n key,\n value\n },\n time: Date.now().toString()\n })\n }\n}\n\nexport const snapshots = {\n windowSnapshot,\n DOMSnapshot,\n mouseObserve,\n DOMObserve,\n formElementObserve\n}\n","import { snapshots, SnapshotData } from '@WebReplay/snapshot'\nimport { RecordOptions } from './types'\nimport { listenerStore } from '@WebReplay/utils'\n\nconst ctrl = {\n uninstall: () => {\n Array.from(listenerStore.values()).forEach(un => un())\n }\n}\n\nexport const record = ({ emitter }: RecordOptions = {}) => {\n recordAll(emitter)\n return ctrl\n}\n\nfunction recordAll(emitter?: (e: SnapshotData) => void) {\n const recordTasks: Function[] = [...Object.values(snapshots)]\n\n recordTasks.forEach(task => {\n task(emitter)\n })\n}\n","import { VNode, convertVNode } from '@WebReplay/virtual-dom'\nimport HTML from './ui.html'\nimport STYLE from './ui.css'\nimport FIXED from './fixed.css'\n\nexport class Container {\n container: HTMLElement\n sandBox: HTMLIFrameElement\n\n vNode: VNode\n width: number\n height: number\n\n constructor(params: { vNode: VNode; width: number; height: number }) {\n this.vNode = params.vNode\n this.width = params.width\n this.height = params.height\n this.init()\n }\n\n init() {\n this.initTemplate()\n this.initSandbox()\n }\n\n initSandbox() {\n this.sandBox = this.container.querySelector('#wr-sandbox') as HTMLIFrameElement\n this.sandBox.style.width = this.width + 'px'\n this.sandBox.style.height = this.height + 'px'\n const sandBoxDoc = (this.sandBox.contentWindow as Window).document\n\n const child = convertVNode(this.vNode, null)\n if (child) {\n const head = child.firstChild\n if (head) {\n head.appendChild(this.createStyle(FIXED))\n }\n sandBoxDoc.replaceChild(child, sandBoxDoc.documentElement)\n }\n }\n\n insertFixed() {}\n\n initTemplate() {\n document.head.appendChild(this.createStyle(STYLE))\n document.body.appendChild(this.createContainer())\n }\n\n createContainer() {\n const parser = new DOMParser()\n const element = parser.parseFromString(HTML, 'text/html').body.firstChild as HTMLElement\n element.style.width = this.width + 'px'\n element.style.height = this.height + 'px'\n element.style.position = 'relative'\n element.style.margin = '0 auto'\n element.style.overflow = 'hidden'\n return (this.container = element)\n }\n\n createStyle(s: string) {\n const parser = new DOMParser()\n const style = parser.parseFromString(``, 'text/html').head.firstChild as HTMLElement\n return style\n }\n}\n","// import { Redux } from '@WebReplay/utils'\n\nimport { reduxStore } from '@WebReplay/utils'\nimport { PlayerTypes } from '@WebReplay/utils'\n\nexport class KeyboardComponent {\n container: HTMLElement\n controller: HTMLElement\n\n pauseBtn: HTMLElement\n playBtn: HTMLElement\n\n speed: number\n\n constructor(container: HTMLElement) {\n this.container = container\n this.init()\n }\n\n init() {\n this.controller = this.container.querySelector('.wr-keyboard') as HTMLElement\n this.pauseBtn = this.controller.querySelector('.pause') as HTMLButtonElement\n this.playBtn = this.controller.querySelector('.play') as HTMLButtonElement\n this.controller.addEventListener('click', (e: MouseEvent & { target: HTMLElement & { type: string } }) => {\n if (e.target && e.target.type === 'button') {\n const speed = Number((e.target as HTMLElement).getAttribute('speed'))\n this.speed = speed\n reduxStore.dispatch({\n type: PlayerTypes.SPEED,\n data: {\n speed\n }\n })\n }\n })\n\n reduxStore.subscribe('player', state => {\n this.paly(state.speed)\n this.setSpeed(state.speed)\n })\n }\n\n paly(speed: number) {\n if (speed !== 0) {\n this.pauseBtn.removeAttribute('disabled')\n this.playBtn.setAttribute('disabled', '')\n } else {\n this.playBtn.removeAttribute('disabled')\n this.pauseBtn.setAttribute('disabled', '')\n }\n }\n\n setSpeed(speed: number) {\n const speedNodes = this.container.querySelectorAll('.speed') as NodeListOf\n ;[...speedNodes].forEach(node => {\n node.removeAttribute('disabled')\n })\n\n const index = speed === 1 ? 0 : speed === 8 ? 1 : speed === 16 ? 2 : -1\n if (index > -1) {\n speedNodes[index].setAttribute('disabled', '')\n }\n }\n}\n","import {\n SnapshotData,\n MouseSnapshotData,\n DOMObserveData,\n FormElementObserveData,\n SnapshotType,\n MouseEventType,\n DOMObserveMutations,\n ChildListUpdateData,\n CharacterDataUpdateData,\n AttributesUpdateData,\n FormElementEvent,\n ChildListUpdateDataType\n} from '@WebReplay/snapshot'\nimport { PlayerComponent } from './player'\nimport { nodeStore } from '@WebReplay/utils'\nimport { convertVNode } from '@WebReplay/virtual-dom'\n\nexport function updateDom(this: PlayerComponent, snapshot: SnapshotData) {\n const { type, data } = snapshot\n switch (type) {\n case SnapshotType.MOUSE:\n const { x, y, type } = data as MouseSnapshotData\n if (type === MouseEventType.MOVE) {\n this.pointer.move(x, y)\n } else if (type === MouseEventType.CLICK) {\n this.pointer.click(x, y)\n }\n break\n case SnapshotType.DOM_UPDATE:\n const { mutations } = data as DOMObserveData\n mutations.forEach((mutate: DOMObserveMutations) => {\n const { mType, data } = mutate\n const { value, attr, type, parentId, pos, nodeId, vNode } = data as ChildListUpdateData &\n (CharacterDataUpdateData & AttributesUpdateData)\n switch (mType) {\n case 'attributes':\n const targetEl = nodeStore.getNode(nodeId) as HTMLElement\n targetEl.setAttribute(attr, value)\n break\n case 'characterData':\n const parentEl = nodeStore.getNode(parentId) as HTMLElement\n if (pos !== null) {\n const target = parentEl.childNodes[pos as number]\n parentEl.replaceChild(document.createTextNode(value), target)\n } else {\n parentEl.innerText = value\n }\n break\n case 'childList':\n const parentNode = nodeStore.getNode(parentId) as HTMLElement\n const targetNode = (nodeStore.getNode(nodeId) as Element) || convertVNode(vNode, null)\n if (type === ChildListUpdateDataType.DELETE) {\n if (targetNode) {\n parentNode!.removeChild(targetNode)\n }\n } else if (ChildListUpdateDataType.ADD) {\n if (value) {\n // it's a TextNode\n const textNode = document.createTextNode(value)\n if (parentNode.childNodes.length) {\n parentNode.replaceChild(textNode, parentNode.childNodes[pos])\n } else {\n parentNode!.appendChild(textNode)\n }\n } else {\n // it's a ElementNode\n parentNode.insertBefore(targetNode, parentNode.childNodes[pos])\n }\n }\n break\n }\n })\n\n break\n case SnapshotType.FORM_EL_UPDATE:\n const { id, key, type: formType, value } = data as FormElementObserveData\n const node = nodeStore.getNode(id) as HTMLFormElement\n if (formType === FormElementEvent.INPUT) {\n node.value = value\n } else if (formType === FormElementEvent.FOCUS) {\n node.focus()\n } else if (formType === FormElementEvent.BLUR) {\n node.blur()\n } else if (formType === FormElementEvent.ATTR) {\n node[key!] = value\n }\n break\n }\n}\n","import { PointerComponent } from './pointer'\nimport { SnapshotData } from '@WebReplay/snapshot'\nimport { updateDom } from './dom'\nimport { reduxStore, PlayerTypes, ProgressState } from '@WebReplay/utils'\nimport { ProgressComponent } from './progress'\n\nexport class PlayerComponent {\n data: SnapshotData[]\n speed = 0\n index = 0\n frameIndex = 0\n lastPercentage = 0\n frames: number[]\n requestID: number\n startTime: number\n pointer: PointerComponent\n progress: ProgressComponent\n progressState: ProgressState\n\n constructor(data: SnapshotData[], pointer: PointerComponent, progress: ProgressComponent) {\n this.data = data\n this.pointer = pointer\n this.progress = progress\n\n reduxStore.subscribe('player', state => {\n this.progressState = reduxStore.getState()['progress']\n const speed = state.speed\n this.speed = speed\n if (speed > 0) {\n this.play(speed)\n } else {\n this.pause()\n }\n this.frames = this.getAccuratelyFrame()\n })\n }\n\n play(speed: number) {\n cancelAnimationFrame(this.requestID)\n this.requestID = requestAnimationFrame(loop.bind(this))\n\n const initTime = Date.now()\n this.startTime = 0\n\n function loop(this: PlayerComponent) {\n const timeStamp = Date.now() - initTime\n if (this.frameIndex > 0 && !this.frames[this.frameIndex + 1]) {\n this.stop()\n return\n }\n if (!this.startTime) {\n this.startTime = Number(this.frames[this.frameIndex])\n }\n\n const currTime = this.startTime + timeStamp * speed\n const nextTime = Number(this.frames[this.frameIndex + 1])\n\n if (currTime >= nextTime) {\n this.frameIndex++\n\n const progress = (this.frameIndex / this.frames.length) * 100\n\n if (progress - this.lastPercentage > this.getPercentInterval()) {\n this.progress.updateProgress(progress)\n this.lastPercentage = progress\n }\n\n if (this.data[this.index] && currTime > +this.data[this.index].time) {\n this.execFrame.call(this, this.data[this.index])\n this.index++\n }\n }\n\n this.requestID = requestAnimationFrame(loop.bind(this))\n }\n }\n\n pause() {\n cancelAnimationFrame(this.requestID)\n reduxStore.dispatch({\n type: PlayerTypes.SPEED,\n data: {\n speed: 0\n }\n })\n }\n\n stop() {\n this.index = 0\n this.pause()\n }\n\n execFrame(this: PlayerComponent, snapshot: SnapshotData) {\n updateDom.call(this, snapshot)\n }\n\n getPercentInterval() {\n const k = 0.08\n const b = 0.2\n return this.speed * k + b\n }\n\n getAccuratelyFrame(interval = 50) {\n this.progressState = reduxStore.getState()['progress']\n const { startTime, endTime } = this.progressState\n\n const delay = 500\n const s = +startTime\n const e = +endTime + delay\n\n const result: number[] = []\n\n for (let i = s; i < e; i += interval) {\n result.push(i)\n }\n result.push(e)\n return result\n }\n}\n","export class PointerComponent {\n x = 0\n y = 0\n\n pointer: HTMLElement\n constructor() {\n this.initPointer()\n }\n\n initPointer() {\n this.pointer = document.getElementById('wr-pointer') as HTMLElement\n this.move(0, 0)\n }\n\n move(x: number, y: number) {\n this.x = x\n this.y = y\n this.pointer.style.left = this.x + 'px'\n this.pointer.style.top = this.y + 'px'\n }\n\n click(x: number, y: number) {\n this.move(x, y)\n this.pointer.setAttribute('active', '')\n setTimeout(() => {\n this.pointer.removeAttribute('active')\n }, 20)\n }\n}\n","import { ProgressState } from '@WebReplay/utils'\n\nexport class ProgressComponent {\n progress: HTMLElement\n thumb: HTMLElement\n slider: HTMLElement\n speed: number\n rafId: number\n\n progressState: ProgressState\n\n totalDistance = 0\n constructor(c: HTMLElement) {\n this.progress = c.querySelector('.wr-progress')! as HTMLElement\n this.thumb = this.progress.querySelector('.wr-thumb') as HTMLElement\n this.slider = this.progress.querySelector('.wr-slider-bar') as HTMLElement\n }\n\n updateProgress(percentage: number) {\n this.thumb.style.left = percentage + '%'\n }\n}\n","import { KeyboardComponent } from './keyboard'\nimport { PlayerComponent } from './player'\nimport { PointerComponent } from './pointer'\nimport { SnapshotData } from '@WebReplay/snapshot'\nimport { ProgressComponent } from './progress'\n\nexport class Panel {\n container: HTMLElement\n data: SnapshotData[]\n\n keyboard: KeyboardComponent\n progress: ProgressComponent\n pointer: PointerComponent\n player: PlayerComponent\n\n constructor(container: HTMLElement, data: SnapshotData[]) {\n this.container = container\n this.data = data\n this.initComponent()\n }\n\n initComponent() {\n this.keyboard = new KeyboardComponent(this.container)\n this.progress = new ProgressComponent(this.container)\n this.pointer = new PointerComponent()\n this.player = new PlayerComponent(this.data, this.pointer, this.progress)\n }\n}\n","import { DBPromise, ProgressTypes, PlayerTypes, reduxStore } from '@WebReplay/utils'\nimport { Container } from './container'\nimport { Panel } from './panel'\n\nexport async function replay() {\n const indexDB = await DBPromise\n const { width, height, vNode, data } = await indexDB.getData()\n\n const c = new Container({ vNode, width, height })\n new Panel(c.container, data)\n\n reduxStore.dispatch({\n type: ProgressTypes.INFO,\n data: {\n frame: 0,\n curTime: data[0].time,\n startTime: data[0].time,\n endTime: data[data.length - 1].time,\n length: data.length\n }\n })\n\n window.onload = () => {\n reduxStore.dispatch({\n type: PlayerTypes.SPEED,\n data: { speed: 1 }\n })\n }\n}\n"],"names":["listenerStore","Set","nodeStore","[object Object]","this","Map","WeakMap","nodeId","id","nodeMap","get","node","createNodeId","idMap","set","delete","getNode","IndexDBOperator","DBName","version","storeName","callback","request","window","indexedDB","open","onerror","e","console","error","onsuccess","db","result","onupgradeneeded","target","objectStoreNames","contains","objectStore","createObjectStore","autoIncrement","keyPath","createIndex","unique","data","transaction","add","Error","clear","Promise","resolve","getAll","event","all","readAll","virtualNode","width","height","vNode","DBPromise","indexDB","initState","speed","PlayerTypes","frame","length","curTime","startTime","endTime","ProgressTypes","freeGlobal","global","Object","freeSelf","self","root","Function","Symbol","objectProto","prototype","hasOwnProperty","nativeObjectToString","toString","symToStringTag","toStringTag","undefined","baseGetTag","value","isOwn","call","tag","unmasked","getRawTag","objectToString","isObjectLike","isArray","Array","isObject","type","reTrim","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","parseInt","toNumber","isSymbol","other","valueOf","replace","isBinary","test","slice","isFunction","uid","coreJsData","maskSrcKey","exec","keys","IE_PROTO","funcToString","toSource","func","reIsHostCtor","funcProto","reIsNative","RegExp","baseIsNative","getNative","object","key","getValue","reIsUint","isIndex","eq","isLength","baseIsArguments","propertyIsEnumerable","isArguments","arguments","freeExports","exports","nodeType","freeModule","module","Buffer","isBuffer","typedArrayTags","freeProcess","process","nodeUtil","types","require","binding","nodeIsTypedArray","isTypedArray","arrayLikeKeys","inherited","isArr","isArg","isBuff","isType","skipIndexes","n","iteratee","index","baseTimes","String","push","nativeKeys","transform","arg","overArg","baseKeys","Ctor","constructor","nativeCreate","Hash","entries","entry","assocIndexOf","array","__data__","size","has","splice","ListCache","pop","getMapData","map","MapCache","hash","string","Stack","pairs","LARGE_ARRAY_SIZE","nativeGetSymbols","getOwnPropertySymbols","getSymbols","predicate","resIndex","arrayFilter","symbol","getAllKeys","keysFunc","symbolsFunc","values","offset","arrayPush","baseGetAllKeys","DataView","dataViewCtorString","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","getTag","ArrayBuffer","ctorString","Uint8Array","SetCache","arraySome","equalArrays","bitmask","customizer","equalFunc","stack","isPartial","arrLength","othLength","stacked","seen","arrValue","othValue","compared","othIndex","mapToArray","forEach","setToArray","symbolProto","symbolValueOf","baseIsEqualDeep","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","byteLength","byteOffset","buffer","name","message","convert","equalByTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","objProps","objLength","skipCtor","objValue","objCtor","othCtor","equalObjects","baseIsEqual","now","Date","nativeMax","Math","max","nativeMin","min","debounce","wait","options","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","TypeError","invokeFunc","time","args","thisArg","apply","leadingEdge","setTimeout","timerExpired","shouldInvoke","timeSinceLastCall","trailingEdge","timeWaiting","remainingWait","debounced","isInvoking","clearTimeout","cancel","flush","throttle","reduxStore","reducer","state","topics","subscribe","listener","dispatch","action","oldState","topicName","player","progress","enums","includes","getTypeInTopics","getState","createStore","reducers","reducerKeys","nextState","i","nextStateForKey","combineReducers","SPEED","FORWARD","BACKWARD","INFO","getAttr","el","resAttr","attrs","attributes","checked","reduce","ret","attr","extraAttr","location","origin","startsWith","createElement","inheritSVG","Node","TEXT_NODE","tagName","isSVG","toLocaleLowerCase","trim","children","extra","getVNodeByEl","addNode","childNodes","ELEMENT_NODE","child","nodeValue","text","trimNodeText","virtualDOM","doc","head","body","setAttribute","style","cssText","k","v","convertVNode","textNode","output","document","createTextNode","createText","script","createElementNS","updateNode","createNode","nodeChildren","vChild","appendChild","travel","val","createAttributes","SnapshotType","FormElementEvent","MouseEventType","ChildListUpdateDataType","snapshots","windowSnapshot","emit","href","innerWidth","documentElement","clientWidth","innerHeight","clientHeight","WINDOW","DOMSnapshot","DOM","mouseObserve","listenerHandle","MOUSE","MOVE","x","y","addEventListener","removeEventListener","mouseMove","CLICK","getNodeId","mouseClick","DOMObserve","observer","MutationObserver","records","mutations","record","addedNodes","removedNodes","nextSibling","attributeName","joinData","mType","curAttrValue","getAttribute","parent","parentNode","parentId","pos","indexOf","from","ADD","textContent","DELETE","DOM_UPDATE","observe","attributeOldValue","characterData","characterDataOldValue","childList","subtree","disconnect","formElementObserve","eventTypes","handleFn","FORM_EL_UPDATE","INPUT","FOCUS","BLUR","fn","once","passive","capture","handle","listenInputs","handleEvent","ATTR","HTMLInputElement","HTMLSelectElement","HTMLTextAreaElement","item","original","getOwnPropertyDescriptor","defineProperty","concat","kidnapInputs","ctrl","uninstall","un","Container","params","init","initTemplate","initSandbox","sandBox","container","querySelector","sandBoxDoc","contentWindow","firstChild","createStyle","replaceChild","createContainer","element","DOMParser","parseFromString","position","margin","overflow","s","KeyboardComponent","controller","pauseBtn","playBtn","Number","paly","setSpeed","removeAttribute","speedNodes","querySelectorAll","updateDom","snapshot","pointer","move","click","mutate","parentEl","innerText","targetNode","removeChild","insertBefore","formType","focus","blur","PlayerComponent","progressState","play","pause","frames","getAccuratelyFrame","cancelAnimationFrame","requestID","requestAnimationFrame","loop","timeStamp","initTime","frameIndex","stop","currTime","nextTime","lastPercentage","getPercentInterval","updateProgress","execFrame","bind","interval","PointerComponent","initPointer","getElementById","left","top","ProgressComponent","c","thumb","slider","percentage","Panel","initComponent","keyboard","emitter","task","recordAll","async","getData","onload"],"mappings":"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"} \ No newline at end of file diff --git a/dist/replay.esm.js b/dist/replay.esm.js index 8b5a9e88..6c64f6a4 100644 --- a/dist/replay.esm.js +++ b/dist/replay.esm.js @@ -1,2 +1,3462 @@ -const t=new Set;const e=new class{constructor(){this.nodeId=1,this.nodeMap=new Map,this.idMap=new WeakMap,this.createNodeId=()=>this.nodeId++}getNode(t){return this.nodeMap.get(t)}addNode(t,e=this.createNodeId()){return this.idMap.set(t,e),this.nodeMap.set(e,t),e}removeNode(t){this.nodeMap.delete(t),this.idMap.delete(this.getNode(t))}getNodeId(t){return this.idMap.get(t)}updateNode(t,e){this.idMap.set(e,t),this.nodeMap.set(t,e)}};class n{constructor(t,e,n,r){this.DBName=t,this.version=e,this.storeName=n;const o=window.indexedDB.open(t,e);o.onerror=t=>{console.error("open IndexDB on error")},o.onsuccess=t=>{this.db=o.result,r(this.db)},o.onupgradeneeded=t=>{const e=t.target.result;if(!e.objectStoreNames.contains(n)){const t=e.createObjectStore(n,{autoIncrement:!0,keyPath:"id"});t.createIndex("type","type",{unique:!1}),t.createIndex("data","data",{unique:!1}),t.createIndex("time","time",{unique:!1})}}}add(t){this.db.transaction([`${this.storeName}`],"readwrite").objectStore(`${this.storeName}`).add(t).onerror=t=>{throw new Error("write IndexDB on error")}}clear(){this.db.transaction([`${this.storeName}`],"readwrite").objectStore(`${this.storeName}`).clear()}async readAll(){const t=this.db.transaction([`${this.storeName}`],"readwrite").objectStore(`${this.storeName}`);return new Promise(e=>{t.getAll().onsuccess=t=>{const n=t.target.result;e(n)}})}async getData(){const t=await this.readAll(),[e,n,...r]=t,[{width:o,height:i},{vNode:a}]=[e.data,n.data];return{width:o,height:i,vNode:a,data:r}}}const r=new Promise(t=>{const e=new n("wr_db",1,"wr_data",()=>{t(e)})});let o={speed:null};var i;!function(t){t.SPEED="SPEED"}(i||(i={}));const a={frame:0,length:0,curTime:0,startTime:0,endTime:0};var s;!function(t){t.FORWARD="FORWARD",t.BACKWARD="BACKWARD",t.INFO="INFO"}(s||(s={}));var c="object"==typeof global&&global&&global.Object===Object&&global,u="object"==typeof self&&self&&self.Object===Object&&self,d=c||u||Function("return this")(),l=d.Symbol,h=Object.prototype,p=h.hasOwnProperty,f=h.toString,b=l?l.toStringTag:void 0;var y=Object.prototype.toString;var v=l?l.toStringTag:void 0;function g(t){return null==t?void 0===t?"[object Undefined]":"[object Null]":v&&v in Object(t)?function(t){var e=p.call(t,b),n=t[b];try{t[b]=void 0;var r=!0}catch(t){}var o=f.call(t);return r&&(e?t[b]=n:delete t[b]),o}(t):function(t){return y.call(t)}(t)}function m(t){return null!=t&&"object"==typeof t}var w=Array.isArray;function _(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}var j=/^\s+|\s+$/g,O=/^[-+]0x[0-9a-f]+$/i,x=/^0b[01]+$/i,E=/^0o[0-7]+$/i,N=parseInt;function D(t){if("number"==typeof t)return t;if(function(t){return"symbol"==typeof t||m(t)&&"[object Symbol]"==g(t)}(t))return NaN;if(_(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=_(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=t.replace(j,"");var n=x.test(t);return n||E.test(t)?N(t.slice(2),n?2:8):O.test(t)?NaN:+t}function T(t){if(!_(t))return!1;var e=g(t);return"[object Function]"==e||"[object GeneratorFunction]"==e||"[object AsyncFunction]"==e||"[object Proxy]"==e}var A,S=d["__core-js_shared__"],I=(A=/[^.]+$/.exec(S&&S.keys&&S.keys.IE_PROTO||""))?"Symbol(src)_1."+A:"";var M=Function.prototype.toString;function L(t){if(null!=t){try{return M.call(t)}catch(t){}try{return t+""}catch(t){}}return""}var P=/^\[object .+?Constructor\]$/,C=Function.prototype,k=Object.prototype,F=C.toString,U=k.hasOwnProperty,B=RegExp("^"+F.call(U).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function R(t){return!(!_(t)||(e=t,I&&I in e))&&(T(t)?B:P).test(L(t));var e}function z(t,e){var n=function(t,e){return null==t?void 0:t[e]}(t,e);return R(n)?n:void 0}var W=z(d,"WeakMap"),V=/^(?:0|[1-9]\d*)$/;function q(t,e){var n=typeof t;return!!(e=null==e?9007199254740991:e)&&("number"==n||"symbol"!=n&&V.test(t))&&t>-1&&t%1==0&&t-1&&t%1==0&&t<=9007199254740991}var G=Object.prototype;function K(t){return m(t)&&"[object Arguments]"==g(t)}var X=Object.prototype,Y=X.hasOwnProperty,Z=X.propertyIsEnumerable,J=K(function(){return arguments}())?K:function(t){return m(t)&&Y.call(t,"callee")&&!Z.call(t,"callee")};var Q="object"==typeof exports&&exports&&!exports.nodeType&&exports,tt=Q&&"object"==typeof module&&module&&!module.nodeType&&module,et=tt&&tt.exports===Q?d.Buffer:void 0,nt=(et?et.isBuffer:void 0)||function(){return!1},rt={};rt["[object Float32Array]"]=rt["[object Float64Array]"]=rt["[object Int8Array]"]=rt["[object Int16Array]"]=rt["[object Int32Array]"]=rt["[object Uint8Array]"]=rt["[object Uint8ClampedArray]"]=rt["[object Uint16Array]"]=rt["[object Uint32Array]"]=!0,rt["[object Arguments]"]=rt["[object Array]"]=rt["[object ArrayBuffer]"]=rt["[object Boolean]"]=rt["[object DataView]"]=rt["[object Date]"]=rt["[object Error]"]=rt["[object Function]"]=rt["[object Map]"]=rt["[object Number]"]=rt["[object Object]"]=rt["[object RegExp]"]=rt["[object Set]"]=rt["[object String]"]=rt["[object WeakMap]"]=!1;var ot,it="object"==typeof exports&&exports&&!exports.nodeType&&exports,at=it&&"object"==typeof module&&module&&!module.nodeType&&module,st=at&&at.exports===it&&c.process,ct=function(){try{var t=at&&at.require&&at.require("util").types;return t||st&&st.binding&&st.binding("util")}catch(t){}}(),ut=ct&&ct.isTypedArray,dt=ut?(ot=ut,function(t){return ot(t)}):function(t){return m(t)&&H(t.length)&&!!rt[g(t)]},lt=Object.prototype.hasOwnProperty;function ht(t,e){var n=w(t),r=!n&&J(t),o=!n&&!r&&nt(t),i=!n&&!r&&!o&&dt(t),a=n||r||o||i,s=a?function(t,e){for(var n=-1,r=Array(t);++n-1},Ot.prototype.set=function(t,e){var n=this.__data__,r=_t(n,t);return r<0?(++this.size,n.push([t,e])):n[r][1]=e,this};var xt=z(d,"Map");function Et(t,e){var n,r,o=t.__data__;return("string"==(r=typeof(n=e))||"number"==r||"symbol"==r||"boolean"==r?"__proto__"!==n:null===n)?o["string"==typeof e?"string":"hash"]:o.map}function Nt(t){var e=-1,n=null==t?0:t.length;for(this.clear();++es))return!1;var u=i.get(t);if(u&&i.get(e))return u==e;var d=-1,l=!0,h=2&n?new Vt:void 0;for(i.set(t,e),i.set(e,t);++d=e||n<0||l&&t-u>=i}function y(){var t=te();if(b(t))return v(t);s=setTimeout(y,function(t){var n=e-(t-c);return l?ne(n,i-(t-u)):n}(t))}function v(t){return s=void 0,h&&r?p(t):(r=o=void 0,a)}function g(){var t=te(),n=b(t);if(r=arguments,o=this,c=t,n){if(void 0===s)return f(c);if(l)return clearTimeout(s),s=setTimeout(y,e),p(c)}return void 0===s&&(s=setTimeout(y,e)),a}return e=D(e)||0,_(n)&&(d=!!n.leading,i=(l="maxWait"in n)?ee(D(n.maxWait)||0,e):i,h="trailing"in n?!!n.trailing:h),g.cancel=function(){void 0!==s&&clearTimeout(s),u=0,r=c=o=s=void 0},g.flush=function(){return void 0===s?a:v(te())},g}function oe(t,e,n){var r=!0,o=!0;if("function"!=typeof t)throw new TypeError("Expected a function");return _(n)&&(r="leading"in n?!!n.leading:r,o="trailing"in n?!!n.trailing:o),re(t,e,{leading:r,maxWait:e,trailing:o})}const ie=function(t,e={}){let n=e;const r={all:[]};return{subscribe:function(...t){let e,n="all";"string"==typeof t[0]?(n=t[0],e=t[1]):e=t[0],r[n]||(r[n]=[]),r[n].push(e)},dispatch:function(e){const o=n;if(n=t(n,e),!e)return void(r.all&&r.all.forEach(t=>t(n)));const a=function(t){const e={player:Object.keys(i),progress:Object.keys(s)};for(let[n,r]of Object.entries(e))if(r.includes(t))return n;return null}(e.type);return a&&r[a]?r[a].forEach(t=>{var e,r;e=n[a],r=o[a],Qt(e,r)||t(n[a])}):void 0},getState:function(){return n}}}(function(t){const e=Object.keys(t);return function(n,r){const o={};for(let i=0;i{const e={},n=t.attributes;return t.checked&&(e.checked="true"),n&&n.length?Object.values(n).reduce((t,e)=>{const{name:n,value:r}=e;return t[n]=r,t},e):e},se=(t,n)=>{if(t.nodeType===Node.TEXT_NODE)return null;if("SCRIPT"===t.tagName)return null;const r=((t,n)=>{const r=t.tagName.toLocaleLowerCase().trim();return{id:e.createNodeId(),attrs:ae(t),tag:r,children:[],extra:{isSVG:n||"svg"===r}}})(t,n),{id:o}=r;return e.addNode(t,o),n=n||r.extra.isSVG,t.childNodes.forEach(t=>{if(t.nodeType===Node.ELEMENT_NODE){const e=se(t,n);e&&r.children.push(e)}else if(t.nodeType===Node.TEXT_NODE&&t.nodeValue){const e=ce(t.nodeValue);e&&r.children.push(e)}}),r},ce=t=>t.replace(/\r\n/g,"").replace(/\n/g,""),ue=t=>{const{head:n,body:r}=t;return{id:e.createNodeId(),tag:"html",attrs:{},children:[se(n),se(r)],extra:{isSVG:!1}}};function de(t,e,n){if("style"!==e){if(!/^on\w+$/.test(e))return t.setAttribute(e,!0===n?"":String(n))}else if(n)if("string"==typeof n)t.style.cssText=n;else if(null!==n&&"object"==typeof n)for(const[e,r]of Object.entries(n))t.style[e]=r}function le(t,n){if(null==t)return null;if("string"==typeof t)return function(t,e){let n;return n=document.createTextNode(t),n}(t);const r=function(t){const{id:n,extra:r}=t,{isSVG:o}=r;let i;const a=(s=t.tag,{script:"noscript"}[s]||s);var s;i=o?document.createElementNS("http://www.w3.org/2000/svg",a):document.createElement(a);return e.updateNode(n,i),i}(t);return(t.children&&t.children.length||r.childNodes&&r.childNodes.length)&&function(t,e){const n=[];t.children.slice().forEach(t=>{let r=n.pop();r=le(t),r&&e.appendChild(r)})}(t,r),function(t,e){const{attrs:n}=t;for(const[t,r]of Object.entries(n))de(e,t,r)}(t,r),r}var he,pe,fe,be;!function(t){t.WINDOW="WINDOW",t.DOM="DOM",t.MOUSE="MOUSE",t.DOM_UPDATE="DOM_UPDATE",t.FORM_EL_UPDATE="FORM_EL_UPDATE"}(he||(he={})),function(t){t.ATTR="ATTR",t.INPUT="INPUT",t.CHANGE="CHANGE",t.FOCUS="FOCUS",t.BLUR="BLUR"}(pe||(pe={})),function(t){t.MOVE="MOVE",t.CLICK="click"}(fe||(fe={})),function(t){t.ADD="ADD",t.DELETE="DELETE",t.MOVE="MOVE"}(be||(be={}));const ye={windowSnapshot:function(t){const e=window.location.href;var n=window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth,r=window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight;t({type:he.WINDOW,data:{width:n,height:r,href:e},time:Date.now().toString()})},DOMSnapshot:function(t){t({type:he.DOM,data:{vNode:ue(document)},time:Date.now().toString()})},mouseObserve:function(n){!function(){const e=oe(t=>{n({type:he.MOUSE,data:{type:fe.MOVE,x:t.x,y:t.y},time:Date.now().toString()})},100,{trailing:!0});document.addEventListener("mousemove",e),t.add(()=>{document.removeEventListener("mousemove",e)})}(),function(){const r=oe(t=>{n({type:he.MOUSE,data:{type:fe.CLICK,id:e.getNodeId(t.target),x:t.x,y:t.y},time:Date.now().toString()})},250);t.add(()=>{document.removeEventListener("click",r)}),document.addEventListener("click",r)}()},DOMObserve:function(n){const r=new MutationObserver(t=>{const r=[];t.forEach(t=>{const{target:n,addedNodes:o,removedNodes:i,type:a,nextSibling:s,attributeName:c}=t,u=(d=a,function(t){r.push({mType:d,data:t})});var d;switch(a){case"attributes":if(c){const t=n.getAttribute(c);u({nodeId:e.getNodeId(n),value:t,attr:c})}break;case"characterData":const t=n.parentNode;u({parentId:e.getNodeId(t),value:n.nodeValue,pos:t.childNodes.length>0?[...t.childNodes].indexOf(n):null});break;case"childList":o.length&&o.forEach(t=>{let r,o;if(t.nodeType===Node.TEXT_NODE){r=t.nodeValue;const n=Array.from(t.parentNode.childNodes).indexOf(t);u({type:be.ADD,parentId:e.getNodeId(t.parentNode),value:t.textContent,pos:n})}else{o=se(t);const r=t.parentNode;u({type:be.ADD,parentId:e.getNodeId(n),vNode:o,pos:r.childNodes.length>0?[...r.childNodes].indexOf(t):null})}}),i.length&&i.forEach(t=>{u({type:be.DELETE,parentId:e.getNodeId(n),nodeId:e.getNodeId(t)||null})})}}),r.length&&n({type:he.DOM_UPDATE,data:{mutations:r},time:Date.now().toString()})});r.observe(document.body,{attributeOldValue:!0,attributes:!0,characterData:!0,characterDataOldValue:!0,childList:!0,subtree:!0}),t.add(()=>{r.disconnect()})},formElementObserve:function(n){!function(n){const r=["input","change","focus","blur"];function o(t){switch(t.type){case"input":case"change":n({type:he.FORM_EL_UPDATE,data:{type:pe.INPUT,id:e.getNodeId(t.target),value:t.target.value},time:Date.now().toString()});break;case"focus":n({type:he.FORM_EL_UPDATE,data:{type:pe.FOCUS,id:e.getNodeId(t.target)},time:Date.now().toString()});break;case"blur":n({type:he.FORM_EL_UPDATE,data:{type:pe.BLUR,id:e.getNodeId(t.target)},time:Date.now().toString()})}}r.map(t=>e=>{document.addEventListener(t,e,{once:!1,passive:!0,capture:!0})}).forEach(t=>t(o)),t.add(()=>{r.forEach(t=>{document.removeEventListener(t,o,!0)})})}(n),function(n){function r(t,r){n({type:he.FORM_EL_UPDATE,data:{type:pe.ATTR,id:e.getNodeId(this),key:t,value:r},time:Date.now().toString()})}[[HTMLInputElement.prototype,"value"],[HTMLInputElement.prototype,"checked"],[HTMLSelectElement.prototype,"value"],[HTMLTextAreaElement.prototype,"value"]].map(e=>()=>{const[n,o]=e,i=Object.getOwnPropertyDescriptor(n,o);Object.defineProperty(n,o,{set:function(t){setTimeout(()=>{r.call(this,o,t)}),i&&i.set&&i.set.call(this,t)}}),t.add(()=>{i&&Object.defineProperty(n,o,i)})}).concat([]).forEach(t=>t())}(n)}},ve={uninstall:()=>{Array.from(t.values()).forEach(t=>t())}},ge=({emitter:t}={})=>(function(t){[...Object.values(ye)].forEach(e=>{e(t)})}(t),ve);class me{constructor(t){this.vNode=t.vNode,this.width=t.width,this.height=t.height,this.init()}init(){this.initTemplate(),this.initSandbox()}initSandbox(){this.sandBox=this.container.querySelector("#wr-sandbox"),this.sandBox.style.width=this.width+"px",this.sandBox.style.height=this.height+"px";const t=this.sandBox.contentWindow.document;t.replaceChild(le(this.vNode),t.documentElement)}initTemplate(){document.head.appendChild(this.createStyle()),document.body.appendChild(this.createContainer())}createContainer(){const t=(new DOMParser).parseFromString('
\n
\n
\n \n
\n
\n
\n \n \n \n \n \n
\n
\n
\n
\n
\n
\n
\n
\n \n \n \n
\n
\n
\n',"text/html").body.firstChild;return t.style.width=this.width+"px",t.style.height=this.height+"px",t.style.position="relative",t.style.margin="0 auto",this.container=t}createStyle(){return(new DOMParser).parseFromString("","text/html").head.firstChild}}class we{constructor(t){this.container=t,this.init()}init(){this.controller=this.container.querySelector(".wr-keyboard"),this.pauseBtn=this.controller.querySelector(".pause"),this.playBtn=this.controller.querySelector(".play"),this.controller.addEventListener("click",t=>{if(t.target&&"button"===t.target.type){const e=Number(t.target.getAttribute("speed"));this.speed=e,ie.dispatch({type:i.SPEED,data:{speed:e}})}}),ie.subscribe("player",t=>{this.paly(t.speed),this.setSpeed(t.speed)})}paly(t){0!==t?(this.pauseBtn.removeAttribute("disabled"),this.playBtn.setAttribute("disabled","")):(this.playBtn.removeAttribute("disabled"),this.pauseBtn.setAttribute("disabled",""))}setSpeed(t){const e=this.container.querySelectorAll(".speed");[...e].forEach(t=>{t.removeAttribute("disabled")});const n=1===t?0:8===t?1:16===t?2:-1;n>-1&&e[n].setAttribute("disabled","")}}function _e(t){const{type:n,data:r}=t;switch(n){case he.MOUSE:const{x:t,y:n,type:o}=r;o===fe.MOVE?this.pointer.move(t,n):o===fe.CLICK&&this.pointer.click(t,n);break;case he.DOM_UPDATE:const{mutations:i}=r;i.forEach(t=>{const{mType:n,data:r}=t,{value:o,attr:i,type:a,parentId:s,pos:c,nodeId:u,vNode:d}=r;switch(n){case"attributes":e.getNode(u).setAttribute(i,o);break;case"characterData":const t=e.getNode(s);if(null!==c){const e=t.childNodes[c];t.replaceChild(document.createTextNode(o),e)}else t.innerText=o;break;case"childList":const n=e.getNode(s),r=e.getNode(u)||le(d);if(a===be.DELETE)r&&n.removeChild(r);else if(be.ADD)if(o){const t=document.createTextNode(o);n.childNodes.length?n.replaceChild(t,n.childNodes[c]):n.appendChild(t)}else n.insertBefore(r,n.childNodes[c])}});break;case he.FORM_EL_UPDATE:const{id:a,key:s,type:c,value:u}=r,d=e.getNode(a);c===pe.INPUT?d.value=u:c===pe.FOCUS?d.focus():c===pe.BLUR?d.blur():c===pe.ATTR&&(d[s]=u)}}class je{constructor(t,e,n){this.speed=0,this.index=0,this.frameIndex=0,this.lastPercentage=0,this.data=t,this.pointer=e,this.progress=n,ie.subscribe("player",t=>{this.progressState=ie.getState().progress;const e=t.speed;this.speed=e,e>0?this.play(e):this.pause(),this.frames=this.getAccuratelyFrame()})}play(t){cancelAnimationFrame(this.requestID),this.requestID=requestAnimationFrame(function n(){const r=Date.now()-e;if(this.frameIndex>0&&!this.frames[this.frameIndex+1])return void this.stop();this.startTime||(this.startTime=Number(this.frames[this.frameIndex]));const o=this.startTime+r*t,i=Number(this.frames[this.frameIndex+1]);if(o>=i){this.frameIndex++;const t=this.frameIndex/this.frames.length*100;t-this.lastPercentage>this.getPercentInterval()&&(this.progress.updateProgress(t),this.lastPercentage=t),this.data[this.index]&&o>+this.data[this.index].time&&(this.execFrame.call(this,this.data[this.index]),this.index++)}this.requestID=requestAnimationFrame(n.bind(this))}.bind(this));const e=Date.now();this.startTime=0}pause(){cancelAnimationFrame(this.requestID),ie.dispatch({type:i.SPEED,data:{speed:0}})}stop(){this.index=0,this.pause()}execFrame(t){_e.call(this,t)}getPercentInterval(){return.08*this.speed+.2}getAccuratelyFrame(t=50){this.progressState=ie.getState().progress;const{startTime:e,endTime:n}=this.progressState,r=+n+500,o=[];for(let n=+e;n{this.pointer.removeAttribute("active")},20)}}class xe{constructor(t){this.totalDistance=0,this.progress=t.querySelector(".wr-progress"),this.thumb=this.progress.querySelector(".wr-thumb"),this.slider=this.progress.querySelector(".wr-slider-bar")}updateProgress(t){this.thumb.style.left=t+"%"}}class Ee{constructor(t,e){this.container=t,this.data=e,this.initComponent()}initComponent(){this.keyboard=new we(this.container),this.progress=new xe(this.container),this.pointer=new Oe,this.player=new je(this.data,this.pointer,this.progress)}}async function Ne(){const t=await r,{width:e,height:n,vNode:o,data:a}=await t.getData(),c=new me({vNode:o,width:e,height:n});new Ee(c.container,a),ie.dispatch({type:s.INFO,data:{frame:0,curTime:a[0].time,startTime:a[0].time,endTime:a[a.length-1].time,length:a.length}}),ie.dispatch({type:i.SPEED,data:{speed:1}})}export{r as DB,ge as record,Ne as replay}; +const listenerStore = new Set(); +//# sourceMappingURL=listener.js.map + +class NodeStore { + constructor() { + this.nodeId = 1; + this.nodeMap = new Map(); + this.idMap = new WeakMap(); + this.createNodeId = () => this.nodeId++; + } + getNode(id) { + return this.nodeMap.get(id); + } + addNode(node, id = this.createNodeId()) { + this.idMap.set(node, id); + this.nodeMap.set(id, node); + return id; + } + removeNode(id) { + this.nodeMap.delete(id); + this.idMap.delete(this.getNode(id)); + } + getNodeId(node) { + return this.idMap.get(node); + } + updateNode(id, node) { + this.idMap.set(node, id); + this.nodeMap.set(id, node); + } +} +const nodeStore = new NodeStore(); +//# sourceMappingURL=node.js.map + +class IndexDBOperator { + constructor(DBName, version, storeName, callback) { + this.DBName = DBName; + this.version = version; + this.storeName = storeName; + const request = window.indexedDB.open(DBName, version); + request.onerror = e => { + console.error('open IndexDB on error'); + }; + request.onsuccess = e => { + this.db = request.result; + // this.clear() + callback(this.db); + }; + request.onupgradeneeded = e => { + const db = e.target.result; + if (!db.objectStoreNames.contains(storeName)) { + const objectStore = db.createObjectStore(storeName, { autoIncrement: true, keyPath: 'id' }); + objectStore.createIndex('type', 'type', { unique: false }); + objectStore.createIndex('data', 'data', { unique: false }); + objectStore.createIndex('time', 'time', { unique: false }); + } + }; + } + add(data) { + const request = this.db + .transaction([`${this.storeName}`], 'readwrite') + .objectStore(`${this.storeName}`) + .add(data); + request.onerror = e => { + throw new Error('write IndexDB on error'); + }; + } + clear() { + const objectStore = this.db.transaction([`${this.storeName}`], 'readwrite').objectStore(`${this.storeName}`); + objectStore.clear(); + } + async readAll() { + const objectStore = this.db.transaction([`${this.storeName}`], 'readwrite').objectStore(`${this.storeName}`); + return new Promise(resolve => { + objectStore.getAll().onsuccess = event => { + const result = event.target.result; + resolve(result); + }; + }); + } + async getData() { + const all = await this.readAll(); + const [window, virtualNode, ...data] = all; + const [{ width, height }, { vNode }] = [window.data, virtualNode.data]; + return { + width, + height, + vNode, + data + }; + } +} +const DBPromise = new Promise(resolve => { + const indexDB = new IndexDBOperator('wr_db', 1, 'wr_data', () => { + resolve(indexDB); + }); +}); +//# sourceMappingURL=data.js.map + +let initState = { + speed: null +}; +var PlayerTypes; +(function (PlayerTypes) { + PlayerTypes["SPEED"] = "SPEED"; +})(PlayerTypes || (PlayerTypes = {})); +function playerReducer(state, action) { + if (!state) { + state = initState; + } + if (!action) { + return state; + } + const { type, data } = action; + switch (type) { + case PlayerTypes.SPEED: + return { + ...state, + ...data + }; + default: + return state; + } +} +//# sourceMappingURL=player.js.map + +const initState$1 = { + frame: 0, + length: 0, + curTime: 0, + startTime: 0, + endTime: 0 +}; +var ProgressTypes; +(function (ProgressTypes) { + ProgressTypes["FORWARD"] = "FORWARD"; + ProgressTypes["BACKWARD"] = "BACKWARD"; + ProgressTypes["INFO"] = "INFO"; +})(ProgressTypes || (ProgressTypes = {})); +function progressReducer(state, action) { + if (!state) { + state = initState$1; + } + if (!action) { + return state; + } + const { type, data } = action; + switch (type) { + case ProgressTypes.FORWARD: + return { + ...state, + frame: data.frame, + curTime: data.curTime + }; + case ProgressTypes.BACKWARD: + return { + ...state, + frame: data.frame + }; + case ProgressTypes.INFO: + return { + ...state, + ...data + }; + default: + return state; + } +} +//# sourceMappingURL=progress.js.map + +/** Detect free variable `global` from Node.js. */ +var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; + +/** Detect free variable `self`. */ +var freeSelf = typeof self == 'object' && self && self.Object === Object && self; + +/** Used as a reference to the global object. */ +var root = freeGlobal || freeSelf || Function('return this')(); + +/** Built-in value references. */ +var Symbol = root.Symbol; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ +var nativeObjectToString = objectProto.toString; + +/** Built-in value references. */ +var symToStringTag = Symbol ? Symbol.toStringTag : undefined; + +/** + * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the raw `toStringTag`. + */ +function getRawTag(value) { + var isOwn = hasOwnProperty.call(value, symToStringTag), + tag = value[symToStringTag]; + + try { + value[symToStringTag] = undefined; + var unmasked = true; + } catch (e) {} + + var result = nativeObjectToString.call(value); + if (unmasked) { + if (isOwn) { + value[symToStringTag] = tag; + } else { + delete value[symToStringTag]; + } + } + return result; +} + +/** Used for built-in method references. */ +var objectProto$1 = Object.prototype; + +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ +var nativeObjectToString$1 = objectProto$1.toString; + +/** + * Converts `value` to a string using `Object.prototype.toString`. + * + * @private + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + */ +function objectToString(value) { + return nativeObjectToString$1.call(value); +} + +/** `Object#toString` result references. */ +var nullTag = '[object Null]', + undefinedTag = '[object Undefined]'; + +/** Built-in value references. */ +var symToStringTag$1 = Symbol ? Symbol.toStringTag : undefined; + +/** + * The base implementation of `getTag` without fallbacks for buggy environments. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ +function baseGetTag(value) { + if (value == null) { + return value === undefined ? undefinedTag : nullTag; + } + return (symToStringTag$1 && symToStringTag$1 in Object(value)) + ? getRawTag(value) + : objectToString(value); +} + +/** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ +function isObjectLike(value) { + return value != null && typeof value == 'object'; +} + +/** `Object#toString` result references. */ +var symbolTag = '[object Symbol]'; + +/** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ +function isSymbol(value) { + return typeof value == 'symbol' || + (isObjectLike(value) && baseGetTag(value) == symbolTag); +} + +/** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); + * // => false + */ +var isArray = Array.isArray; + +/** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ +function isObject(value) { + var type = typeof value; + return value != null && (type == 'object' || type == 'function'); +} + +/** Used as references for various `Number` constants. */ +var NAN = 0 / 0; + +/** Used to match leading and trailing whitespace. */ +var reTrim = /^\s+|\s+$/g; + +/** Used to detect bad signed hexadecimal string values. */ +var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; + +/** Used to detect binary string values. */ +var reIsBinary = /^0b[01]+$/i; + +/** Used to detect octal string values. */ +var reIsOctal = /^0o[0-7]+$/i; + +/** Built-in method references without a dependency on `root`. */ +var freeParseInt = parseInt; + +/** + * Converts `value` to a number. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {number} Returns the number. + * @example + * + * _.toNumber(3.2); + * // => 3.2 + * + * _.toNumber(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toNumber(Infinity); + * // => Infinity + * + * _.toNumber('3.2'); + * // => 3.2 + */ +function toNumber(value) { + if (typeof value == 'number') { + return value; + } + if (isSymbol(value)) { + return NAN; + } + if (isObject(value)) { + var other = typeof value.valueOf == 'function' ? value.valueOf() : value; + value = isObject(other) ? (other + '') : other; + } + if (typeof value != 'string') { + return value === 0 ? value : +value; + } + value = value.replace(reTrim, ''); + var isBinary = reIsBinary.test(value); + return (isBinary || reIsOctal.test(value)) + ? freeParseInt(value.slice(2), isBinary ? 2 : 8) + : (reIsBadHex.test(value) ? NAN : +value); +} + +/** `Object#toString` result references. */ +var asyncTag = '[object AsyncFunction]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + proxyTag = '[object Proxy]'; + +/** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a function, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ +function isFunction(value) { + if (!isObject(value)) { + return false; + } + // The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 9 which returns 'object' for typed arrays and other constructors. + var tag = baseGetTag(value); + return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; +} + +/** Used to detect overreaching core-js shims. */ +var coreJsData = root['__core-js_shared__']; + +/** Used to detect methods masquerading as native. */ +var maskSrcKey = (function() { + var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); + return uid ? ('Symbol(src)_1.' + uid) : ''; +}()); + +/** + * Checks if `func` has its source masked. + * + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` is masked, else `false`. + */ +function isMasked(func) { + return !!maskSrcKey && (maskSrcKey in func); +} + +/** Used for built-in method references. */ +var funcProto = Function.prototype; + +/** Used to resolve the decompiled source of functions. */ +var funcToString = funcProto.toString; + +/** + * Converts `func` to its source code. + * + * @private + * @param {Function} func The function to convert. + * @returns {string} Returns the source code. + */ +function toSource(func) { + if (func != null) { + try { + return funcToString.call(func); + } catch (e) {} + try { + return (func + ''); + } catch (e) {} + } + return ''; +} + +/** + * Used to match `RegExp` + * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). + */ +var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; + +/** Used to detect host constructors (Safari). */ +var reIsHostCtor = /^\[object .+?Constructor\]$/; + +/** Used for built-in method references. */ +var funcProto$1 = Function.prototype, + objectProto$2 = Object.prototype; + +/** Used to resolve the decompiled source of functions. */ +var funcToString$1 = funcProto$1.toString; + +/** Used to check objects for own properties. */ +var hasOwnProperty$1 = objectProto$2.hasOwnProperty; + +/** Used to detect if a method is native. */ +var reIsNative = RegExp('^' + + funcToString$1.call(hasOwnProperty$1).replace(reRegExpChar, '\\$&') + .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' +); + +/** + * The base implementation of `_.isNative` without bad shim checks. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, + * else `false`. + */ +function baseIsNative(value) { + if (!isObject(value) || isMasked(value)) { + return false; + } + var pattern = isFunction(value) ? reIsNative : reIsHostCtor; + return pattern.test(toSource(value)); +} + +/** + * Gets the value at `key` of `object`. + * + * @private + * @param {Object} [object] The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ +function getValue(object, key) { + return object == null ? undefined : object[key]; +} + +/** + * Gets the native function at `key` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the method to get. + * @returns {*} Returns the function if it's native, else `undefined`. + */ +function getNative(object, key) { + var value = getValue(object, key); + return baseIsNative(value) ? value : undefined; +} + +/* Built-in method references that are verified to be native. */ +var WeakMap$1 = getNative(root, 'WeakMap'); + +/** Used as references for various `Number` constants. */ +var MAX_SAFE_INTEGER = 9007199254740991; + +/** Used to detect unsigned integer values. */ +var reIsUint = /^(?:0|[1-9]\d*)$/; + +/** + * Checks if `value` is a valid array-like index. + * + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. + */ +function isIndex(value, length) { + var type = typeof value; + length = length == null ? MAX_SAFE_INTEGER : length; + + return !!length && + (type == 'number' || + (type != 'symbol' && reIsUint.test(value))) && + (value > -1 && value % 1 == 0 && value < length); +} + +/** + * Performs a + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * comparison between two values to determine if they are equivalent. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.eq(object, object); + * // => true + * + * _.eq(object, other); + * // => false + * + * _.eq('a', 'a'); + * // => true + * + * _.eq('a', Object('a')); + * // => false + * + * _.eq(NaN, NaN); + * // => true + */ +function eq(value, other) { + return value === other || (value !== value && other !== other); +} + +/** Used as references for various `Number` constants. */ +var MAX_SAFE_INTEGER$1 = 9007199254740991; + +/** + * Checks if `value` is a valid array-like length. + * + * **Note:** This method is loosely based on + * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. + * @example + * + * _.isLength(3); + * // => true + * + * _.isLength(Number.MIN_VALUE); + * // => false + * + * _.isLength(Infinity); + * // => false + * + * _.isLength('3'); + * // => false + */ +function isLength(value) { + return typeof value == 'number' && + value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER$1; +} + +/** + * Checks if `value` is array-like. A value is considered array-like if it's + * not a function and has a `value.length` that's an integer greater than or + * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is array-like, else `false`. + * @example + * + * _.isArrayLike([1, 2, 3]); + * // => true + * + * _.isArrayLike(document.body.children); + * // => true + * + * _.isArrayLike('abc'); + * // => true + * + * _.isArrayLike(_.noop); + * // => false + */ +function isArrayLike(value) { + return value != null && isLength(value.length) && !isFunction(value); +} + +/** Used for built-in method references. */ +var objectProto$3 = Object.prototype; + +/** + * Checks if `value` is likely a prototype object. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. + */ +function isPrototype(value) { + var Ctor = value && value.constructor, + proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto$3; + + return value === proto; +} + +/** + * The base implementation of `_.times` without support for iteratee shorthands + * or max array length checks. + * + * @private + * @param {number} n The number of times to invoke `iteratee`. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the array of results. + */ +function baseTimes(n, iteratee) { + var index = -1, + result = Array(n); + + while (++index < n) { + result[index] = iteratee(index); + } + return result; +} + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]'; + +/** + * The base implementation of `_.isArguments`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + */ +function baseIsArguments(value) { + return isObjectLike(value) && baseGetTag(value) == argsTag; +} + +/** Used for built-in method references. */ +var objectProto$4 = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty$2 = objectProto$4.hasOwnProperty; + +/** Built-in value references. */ +var propertyIsEnumerable = objectProto$4.propertyIsEnumerable; + +/** + * Checks if `value` is likely an `arguments` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + * else `false`. + * @example + * + * _.isArguments(function() { return arguments; }()); + * // => true + * + * _.isArguments([1, 2, 3]); + * // => false + */ +var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { + return isObjectLike(value) && hasOwnProperty$2.call(value, 'callee') && + !propertyIsEnumerable.call(value, 'callee'); +}; + +/** + * This method returns `false`. + * + * @static + * @memberOf _ + * @since 4.13.0 + * @category Util + * @returns {boolean} Returns `false`. + * @example + * + * _.times(2, _.stubFalse); + * // => [false, false] + */ +function stubFalse() { + return false; +} + +/** Detect free variable `exports`. */ +var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; + +/** Detect free variable `module`. */ +var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; + +/** Detect the popular CommonJS extension `module.exports`. */ +var moduleExports = freeModule && freeModule.exports === freeExports; + +/** Built-in value references. */ +var Buffer = moduleExports ? root.Buffer : undefined; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined; + +/** + * Checks if `value` is a buffer. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. + * @example + * + * _.isBuffer(new Buffer(2)); + * // => true + * + * _.isBuffer(new Uint8Array(2)); + * // => false + */ +var isBuffer = nativeIsBuffer || stubFalse; + +/** `Object#toString` result references. */ +var argsTag$1 = '[object Arguments]', + arrayTag = '[object Array]', + boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag$1 = '[object Function]', + mapTag = '[object Map]', + numberTag = '[object Number]', + objectTag = '[object Object]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + weakMapTag = '[object WeakMap]'; + +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + +/** Used to identify `toStringTag` values of typed arrays. */ +var typedArrayTags = {}; +typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = +typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = +typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = +typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = +typedArrayTags[uint32Tag] = true; +typedArrayTags[argsTag$1] = typedArrayTags[arrayTag] = +typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = +typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = +typedArrayTags[errorTag] = typedArrayTags[funcTag$1] = +typedArrayTags[mapTag] = typedArrayTags[numberTag] = +typedArrayTags[objectTag] = typedArrayTags[regexpTag] = +typedArrayTags[setTag] = typedArrayTags[stringTag] = +typedArrayTags[weakMapTag] = false; + +/** + * The base implementation of `_.isTypedArray` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + */ +function baseIsTypedArray(value) { + return isObjectLike(value) && + isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; +} + +/** + * The base implementation of `_.unary` without support for storing metadata. + * + * @private + * @param {Function} func The function to cap arguments for. + * @returns {Function} Returns the new capped function. + */ +function baseUnary(func) { + return function(value) { + return func(value); + }; +} + +/** Detect free variable `exports`. */ +var freeExports$1 = typeof exports == 'object' && exports && !exports.nodeType && exports; + +/** Detect free variable `module`. */ +var freeModule$1 = freeExports$1 && typeof module == 'object' && module && !module.nodeType && module; + +/** Detect the popular CommonJS extension `module.exports`. */ +var moduleExports$1 = freeModule$1 && freeModule$1.exports === freeExports$1; + +/** Detect free variable `process` from Node.js. */ +var freeProcess = moduleExports$1 && freeGlobal.process; + +/** Used to access faster Node.js helpers. */ +var nodeUtil = (function() { + try { + // Use `util.types` for Node.js 10+. + var types = freeModule$1 && freeModule$1.require && freeModule$1.require('util').types; + + if (types) { + return types; + } + + // Legacy `process.binding('util')` for Node.js < 10. + return freeProcess && freeProcess.binding && freeProcess.binding('util'); + } catch (e) {} +}()); + +/* Node.js helper references. */ +var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; + +/** + * Checks if `value` is classified as a typed array. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + * @example + * + * _.isTypedArray(new Uint8Array); + * // => true + * + * _.isTypedArray([]); + * // => false + */ +var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; + +/** Used for built-in method references. */ +var objectProto$5 = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty$3 = objectProto$5.hasOwnProperty; + +/** + * Creates an array of the enumerable property names of the array-like `value`. + * + * @private + * @param {*} value The value to query. + * @param {boolean} inherited Specify returning inherited property names. + * @returns {Array} Returns the array of property names. + */ +function arrayLikeKeys(value, inherited) { + var isArr = isArray(value), + isArg = !isArr && isArguments(value), + isBuff = !isArr && !isArg && isBuffer(value), + isType = !isArr && !isArg && !isBuff && isTypedArray(value), + skipIndexes = isArr || isArg || isBuff || isType, + result = skipIndexes ? baseTimes(value.length, String) : [], + length = result.length; + + for (var key in value) { + if ((inherited || hasOwnProperty$3.call(value, key)) && + !(skipIndexes && ( + // Safari 9 has enumerable `arguments.length` in strict mode. + key == 'length' || + // Node.js 0.10 has enumerable non-index properties on buffers. + (isBuff && (key == 'offset' || key == 'parent')) || + // PhantomJS 2 has enumerable non-index properties on typed arrays. + (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || + // Skip index properties. + isIndex(key, length) + ))) { + result.push(key); + } + } + return result; +} + +/** + * Creates a unary function that invokes `func` with its argument transformed. + * + * @private + * @param {Function} func The function to wrap. + * @param {Function} transform The argument transform. + * @returns {Function} Returns the new function. + */ +function overArg(func, transform) { + return function(arg) { + return func(transform(arg)); + }; +} + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeKeys = overArg(Object.keys, Object); + +/** Used for built-in method references. */ +var objectProto$6 = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty$4 = objectProto$6.hasOwnProperty; + +/** + * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ +function baseKeys(object) { + if (!isPrototype(object)) { + return nativeKeys(object); + } + var result = []; + for (var key in Object(object)) { + if (hasOwnProperty$4.call(object, key) && key != 'constructor') { + result.push(key); + } + } + return result; +} + +/** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * for more details. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ +function keys(object) { + return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); +} + +/* Built-in method references that are verified to be native. */ +var nativeCreate = getNative(Object, 'create'); + +/** + * Removes all key-value entries from the hash. + * + * @private + * @name clear + * @memberOf Hash + */ +function hashClear() { + this.__data__ = nativeCreate ? nativeCreate(null) : {}; + this.size = 0; +} + +/** + * Removes `key` and its value from the hash. + * + * @private + * @name delete + * @memberOf Hash + * @param {Object} hash The hash to modify. + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function hashDelete(key) { + var result = this.has(key) && delete this.__data__[key]; + this.size -= result ? 1 : 0; + return result; +} + +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; + +/** Used for built-in method references. */ +var objectProto$7 = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty$5 = objectProto$7.hasOwnProperty; + +/** + * Gets the hash value for `key`. + * + * @private + * @name get + * @memberOf Hash + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function hashGet(key) { + var data = this.__data__; + if (nativeCreate) { + var result = data[key]; + return result === HASH_UNDEFINED ? undefined : result; + } + return hasOwnProperty$5.call(data, key) ? data[key] : undefined; +} + +/** Used for built-in method references. */ +var objectProto$8 = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty$6 = objectProto$8.hasOwnProperty; + +/** + * Checks if a hash value for `key` exists. + * + * @private + * @name has + * @memberOf Hash + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function hashHas(key) { + var data = this.__data__; + return nativeCreate ? (data[key] !== undefined) : hasOwnProperty$6.call(data, key); +} + +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED$1 = '__lodash_hash_undefined__'; + +/** + * Sets the hash `key` to `value`. + * + * @private + * @name set + * @memberOf Hash + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the hash instance. + */ +function hashSet(key, value) { + var data = this.__data__; + this.size += this.has(key) ? 0 : 1; + data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED$1 : value; + return this; +} + +/** + * Creates a hash object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function Hash(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +// Add methods to `Hash`. +Hash.prototype.clear = hashClear; +Hash.prototype['delete'] = hashDelete; +Hash.prototype.get = hashGet; +Hash.prototype.has = hashHas; +Hash.prototype.set = hashSet; + +/** + * Removes all key-value entries from the list cache. + * + * @private + * @name clear + * @memberOf ListCache + */ +function listCacheClear() { + this.__data__ = []; + this.size = 0; +} + +/** + * Gets the index at which the `key` is found in `array` of key-value pairs. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} key The key to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function assocIndexOf(array, key) { + var length = array.length; + while (length--) { + if (eq(array[length][0], key)) { + return length; + } + } + return -1; +} + +/** Used for built-in method references. */ +var arrayProto = Array.prototype; + +/** Built-in value references. */ +var splice = arrayProto.splice; + +/** + * Removes `key` and its value from the list cache. + * + * @private + * @name delete + * @memberOf ListCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function listCacheDelete(key) { + var data = this.__data__, + index = assocIndexOf(data, key); + + if (index < 0) { + return false; + } + var lastIndex = data.length - 1; + if (index == lastIndex) { + data.pop(); + } else { + splice.call(data, index, 1); + } + --this.size; + return true; +} + +/** + * Gets the list cache value for `key`. + * + * @private + * @name get + * @memberOf ListCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function listCacheGet(key) { + var data = this.__data__, + index = assocIndexOf(data, key); + + return index < 0 ? undefined : data[index][1]; +} + +/** + * Checks if a list cache value for `key` exists. + * + * @private + * @name has + * @memberOf ListCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function listCacheHas(key) { + return assocIndexOf(this.__data__, key) > -1; +} + +/** + * Sets the list cache `key` to `value`. + * + * @private + * @name set + * @memberOf ListCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the list cache instance. + */ +function listCacheSet(key, value) { + var data = this.__data__, + index = assocIndexOf(data, key); + + if (index < 0) { + ++this.size; + data.push([key, value]); + } else { + data[index][1] = value; + } + return this; +} + +/** + * Creates an list cache object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function ListCache(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +// Add methods to `ListCache`. +ListCache.prototype.clear = listCacheClear; +ListCache.prototype['delete'] = listCacheDelete; +ListCache.prototype.get = listCacheGet; +ListCache.prototype.has = listCacheHas; +ListCache.prototype.set = listCacheSet; + +/* Built-in method references that are verified to be native. */ +var Map$1 = getNative(root, 'Map'); + +/** + * Removes all key-value entries from the map. + * + * @private + * @name clear + * @memberOf MapCache + */ +function mapCacheClear() { + this.size = 0; + this.__data__ = { + 'hash': new Hash, + 'map': new (Map$1 || ListCache), + 'string': new Hash + }; +} + +/** + * Checks if `value` is suitable for use as unique object key. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is suitable, else `false`. + */ +function isKeyable(value) { + var type = typeof value; + return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') + ? (value !== '__proto__') + : (value === null); +} + +/** + * Gets the data for `map`. + * + * @private + * @param {Object} map The map to query. + * @param {string} key The reference key. + * @returns {*} Returns the map data. + */ +function getMapData(map, key) { + var data = map.__data__; + return isKeyable(key) + ? data[typeof key == 'string' ? 'string' : 'hash'] + : data.map; +} + +/** + * Removes `key` and its value from the map. + * + * @private + * @name delete + * @memberOf MapCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function mapCacheDelete(key) { + var result = getMapData(this, key)['delete'](key); + this.size -= result ? 1 : 0; + return result; +} + +/** + * Gets the map value for `key`. + * + * @private + * @name get + * @memberOf MapCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function mapCacheGet(key) { + return getMapData(this, key).get(key); +} + +/** + * Checks if a map value for `key` exists. + * + * @private + * @name has + * @memberOf MapCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function mapCacheHas(key) { + return getMapData(this, key).has(key); +} + +/** + * Sets the map `key` to `value`. + * + * @private + * @name set + * @memberOf MapCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the map cache instance. + */ +function mapCacheSet(key, value) { + var data = getMapData(this, key), + size = data.size; + + data.set(key, value); + this.size += data.size == size ? 0 : 1; + return this; +} + +/** + * Creates a map cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function MapCache(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +// Add methods to `MapCache`. +MapCache.prototype.clear = mapCacheClear; +MapCache.prototype['delete'] = mapCacheDelete; +MapCache.prototype.get = mapCacheGet; +MapCache.prototype.has = mapCacheHas; +MapCache.prototype.set = mapCacheSet; + +/** + * Appends the elements of `values` to `array`. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to append. + * @returns {Array} Returns `array`. + */ +function arrayPush(array, values) { + var index = -1, + length = values.length, + offset = array.length; + + while (++index < length) { + array[offset + index] = values[index]; + } + return array; +} + +/** + * Removes all key-value entries from the stack. + * + * @private + * @name clear + * @memberOf Stack + */ +function stackClear() { + this.__data__ = new ListCache; + this.size = 0; +} + +/** + * Removes `key` and its value from the stack. + * + * @private + * @name delete + * @memberOf Stack + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function stackDelete(key) { + var data = this.__data__, + result = data['delete'](key); + + this.size = data.size; + return result; +} + +/** + * Gets the stack value for `key`. + * + * @private + * @name get + * @memberOf Stack + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function stackGet(key) { + return this.__data__.get(key); +} + +/** + * Checks if a stack value for `key` exists. + * + * @private + * @name has + * @memberOf Stack + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function stackHas(key) { + return this.__data__.has(key); +} + +/** Used as the size to enable large array optimizations. */ +var LARGE_ARRAY_SIZE = 200; + +/** + * Sets the stack `key` to `value`. + * + * @private + * @name set + * @memberOf Stack + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the stack cache instance. + */ +function stackSet(key, value) { + var data = this.__data__; + if (data instanceof ListCache) { + var pairs = data.__data__; + if (!Map$1 || (pairs.length < LARGE_ARRAY_SIZE - 1)) { + pairs.push([key, value]); + this.size = ++data.size; + return this; + } + data = this.__data__ = new MapCache(pairs); + } + data.set(key, value); + this.size = data.size; + return this; +} + +/** + * Creates a stack cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function Stack(entries) { + var data = this.__data__ = new ListCache(entries); + this.size = data.size; +} + +// Add methods to `Stack`. +Stack.prototype.clear = stackClear; +Stack.prototype['delete'] = stackDelete; +Stack.prototype.get = stackGet; +Stack.prototype.has = stackHas; +Stack.prototype.set = stackSet; + +/** + * A specialized version of `_.filter` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ +function arrayFilter(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result[resIndex++] = value; + } + } + return result; +} + +/** + * This method returns a new empty array. + * + * @static + * @memberOf _ + * @since 4.13.0 + * @category Util + * @returns {Array} Returns the new empty array. + * @example + * + * var arrays = _.times(2, _.stubArray); + * + * console.log(arrays); + * // => [[], []] + * + * console.log(arrays[0] === arrays[1]); + * // => false + */ +function stubArray() { + return []; +} + +/** Used for built-in method references. */ +var objectProto$9 = Object.prototype; + +/** Built-in value references. */ +var propertyIsEnumerable$1 = objectProto$9.propertyIsEnumerable; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeGetSymbols = Object.getOwnPropertySymbols; + +/** + * Creates an array of the own enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ +var getSymbols = !nativeGetSymbols ? stubArray : function(object) { + if (object == null) { + return []; + } + object = Object(object); + return arrayFilter(nativeGetSymbols(object), function(symbol) { + return propertyIsEnumerable$1.call(object, symbol); + }); +}; + +/** + * The base implementation of `getAllKeys` and `getAllKeysIn` which uses + * `keysFunc` and `symbolsFunc` to get the enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Function} keysFunc The function to get the keys of `object`. + * @param {Function} symbolsFunc The function to get the symbols of `object`. + * @returns {Array} Returns the array of property names and symbols. + */ +function baseGetAllKeys(object, keysFunc, symbolsFunc) { + var result = keysFunc(object); + return isArray(object) ? result : arrayPush(result, symbolsFunc(object)); +} + +/** + * Creates an array of own enumerable property names and symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ +function getAllKeys(object) { + return baseGetAllKeys(object, keys, getSymbols); +} + +/* Built-in method references that are verified to be native. */ +var DataView = getNative(root, 'DataView'); + +/* Built-in method references that are verified to be native. */ +var Promise$1 = getNative(root, 'Promise'); + +/* Built-in method references that are verified to be native. */ +var Set$1 = getNative(root, 'Set'); + +/** `Object#toString` result references. */ +var mapTag$1 = '[object Map]', + objectTag$1 = '[object Object]', + promiseTag = '[object Promise]', + setTag$1 = '[object Set]', + weakMapTag$1 = '[object WeakMap]'; + +var dataViewTag$1 = '[object DataView]'; + +/** Used to detect maps, sets, and weakmaps. */ +var dataViewCtorString = toSource(DataView), + mapCtorString = toSource(Map$1), + promiseCtorString = toSource(Promise$1), + setCtorString = toSource(Set$1), + weakMapCtorString = toSource(WeakMap$1); + +/** + * Gets the `toStringTag` of `value`. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ +var getTag = baseGetTag; + +// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6. +if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag$1) || + (Map$1 && getTag(new Map$1) != mapTag$1) || + (Promise$1 && getTag(Promise$1.resolve()) != promiseTag) || + (Set$1 && getTag(new Set$1) != setTag$1) || + (WeakMap$1 && getTag(new WeakMap$1) != weakMapTag$1)) { + getTag = function(value) { + var result = baseGetTag(value), + Ctor = result == objectTag$1 ? value.constructor : undefined, + ctorString = Ctor ? toSource(Ctor) : ''; + + if (ctorString) { + switch (ctorString) { + case dataViewCtorString: return dataViewTag$1; + case mapCtorString: return mapTag$1; + case promiseCtorString: return promiseTag; + case setCtorString: return setTag$1; + case weakMapCtorString: return weakMapTag$1; + } + } + return result; + }; +} + +var getTag$1 = getTag; + +/** Built-in value references. */ +var Uint8Array = root.Uint8Array; + +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED$2 = '__lodash_hash_undefined__'; + +/** + * Adds `value` to the array cache. + * + * @private + * @name add + * @memberOf SetCache + * @alias push + * @param {*} value The value to cache. + * @returns {Object} Returns the cache instance. + */ +function setCacheAdd(value) { + this.__data__.set(value, HASH_UNDEFINED$2); + return this; +} + +/** + * Checks if `value` is in the array cache. + * + * @private + * @name has + * @memberOf SetCache + * @param {*} value The value to search for. + * @returns {number} Returns `true` if `value` is found, else `false`. + */ +function setCacheHas(value) { + return this.__data__.has(value); +} + +/** + * + * Creates an array cache object to store unique values. + * + * @private + * @constructor + * @param {Array} [values] The values to cache. + */ +function SetCache(values) { + var index = -1, + length = values == null ? 0 : values.length; + + this.__data__ = new MapCache; + while (++index < length) { + this.add(values[index]); + } +} + +// Add methods to `SetCache`. +SetCache.prototype.add = SetCache.prototype.push = setCacheAdd; +SetCache.prototype.has = setCacheHas; + +/** + * A specialized version of `_.some` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ +function arraySome(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (predicate(array[index], index, array)) { + return true; + } + } + return false; +} + +/** + * Checks if a `cache` value for `key` exists. + * + * @private + * @param {Object} cache The cache to query. + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function cacheHas(cache, key) { + return cache.has(key); +} + +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; + +/** + * A specialized version of `baseIsEqualDeep` for arrays with support for + * partial deep comparisons. + * + * @private + * @param {Array} array The array to compare. + * @param {Array} other The other array to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `array` and `other` objects. + * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. + */ +function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, + arrLength = array.length, + othLength = other.length; + + if (arrLength != othLength && !(isPartial && othLength > arrLength)) { + return false; + } + // Assume cyclic values are equal. + var stacked = stack.get(array); + if (stacked && stack.get(other)) { + return stacked == other; + } + var index = -1, + result = true, + seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined; + + stack.set(array, other); + stack.set(other, array); + + // Ignore non-index properties. + while (++index < arrLength) { + var arrValue = array[index], + othValue = other[index]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, arrValue, index, other, array, stack) + : customizer(arrValue, othValue, index, array, other, stack); + } + if (compared !== undefined) { + if (compared) { + continue; + } + result = false; + break; + } + // Recursively compare arrays (susceptible to call stack limits). + if (seen) { + if (!arraySome(other, function(othValue, othIndex) { + if (!cacheHas(seen, othIndex) && + (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { + return seen.push(othIndex); + } + })) { + result = false; + break; + } + } else if (!( + arrValue === othValue || + equalFunc(arrValue, othValue, bitmask, customizer, stack) + )) { + result = false; + break; + } + } + stack['delete'](array); + stack['delete'](other); + return result; +} + +/** + * Converts `map` to its key-value pairs. + * + * @private + * @param {Object} map The map to convert. + * @returns {Array} Returns the key-value pairs. + */ +function mapToArray(map) { + var index = -1, + result = Array(map.size); + + map.forEach(function(value, key) { + result[++index] = [key, value]; + }); + return result; +} + +/** + * Converts `set` to an array of its values. + * + * @private + * @param {Object} set The set to convert. + * @returns {Array} Returns the values. + */ +function setToArray(set) { + var index = -1, + result = Array(set.size); + + set.forEach(function(value) { + result[++index] = value; + }); + return result; +} + +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG$1 = 1, + COMPARE_UNORDERED_FLAG$1 = 2; + +/** `Object#toString` result references. */ +var boolTag$1 = '[object Boolean]', + dateTag$1 = '[object Date]', + errorTag$1 = '[object Error]', + mapTag$2 = '[object Map]', + numberTag$1 = '[object Number]', + regexpTag$1 = '[object RegExp]', + setTag$2 = '[object Set]', + stringTag$1 = '[object String]', + symbolTag$1 = '[object Symbol]'; + +var arrayBufferTag$1 = '[object ArrayBuffer]', + dataViewTag$2 = '[object DataView]'; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = Symbol ? Symbol.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; + +/** + * A specialized version of `baseIsEqualDeep` for comparing objects of + * the same `toStringTag`. + * + * **Note:** This function only supports comparing values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {string} tag The `toStringTag` of the objects to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { + switch (tag) { + case dataViewTag$2: + if ((object.byteLength != other.byteLength) || + (object.byteOffset != other.byteOffset)) { + return false; + } + object = object.buffer; + other = other.buffer; + + case arrayBufferTag$1: + if ((object.byteLength != other.byteLength) || + !equalFunc(new Uint8Array(object), new Uint8Array(other))) { + return false; + } + return true; + + case boolTag$1: + case dateTag$1: + case numberTag$1: + // Coerce booleans to `1` or `0` and dates to milliseconds. + // Invalid dates are coerced to `NaN`. + return eq(+object, +other); + + case errorTag$1: + return object.name == other.name && object.message == other.message; + + case regexpTag$1: + case stringTag$1: + // Coerce regexes to strings and treat strings, primitives and objects, + // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring + // for more details. + return object == (other + ''); + + case mapTag$2: + var convert = mapToArray; + + case setTag$2: + var isPartial = bitmask & COMPARE_PARTIAL_FLAG$1; + convert || (convert = setToArray); + + if (object.size != other.size && !isPartial) { + return false; + } + // Assume cyclic values are equal. + var stacked = stack.get(object); + if (stacked) { + return stacked == other; + } + bitmask |= COMPARE_UNORDERED_FLAG$1; + + // Recursively compare objects (susceptible to call stack limits). + stack.set(object, other); + var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); + stack['delete'](object); + return result; + + case symbolTag$1: + if (symbolValueOf) { + return symbolValueOf.call(object) == symbolValueOf.call(other); + } + } + return false; +} + +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG$2 = 1; + +/** Used for built-in method references. */ +var objectProto$a = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty$7 = objectProto$a.hasOwnProperty; + +/** + * A specialized version of `baseIsEqualDeep` for objects with support for + * partial deep comparisons. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG$2, + objProps = getAllKeys(object), + objLength = objProps.length, + othProps = getAllKeys(other), + othLength = othProps.length; + + if (objLength != othLength && !isPartial) { + return false; + } + var index = objLength; + while (index--) { + var key = objProps[index]; + if (!(isPartial ? key in other : hasOwnProperty$7.call(other, key))) { + return false; + } + } + // Assume cyclic values are equal. + var stacked = stack.get(object); + if (stacked && stack.get(other)) { + return stacked == other; + } + var result = true; + stack.set(object, other); + stack.set(other, object); + + var skipCtor = isPartial; + while (++index < objLength) { + key = objProps[index]; + var objValue = object[key], + othValue = other[key]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, objValue, key, other, object, stack) + : customizer(objValue, othValue, key, object, other, stack); + } + // Recursively compare objects (susceptible to call stack limits). + if (!(compared === undefined + ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) + : compared + )) { + result = false; + break; + } + skipCtor || (skipCtor = key == 'constructor'); + } + if (result && !skipCtor) { + var objCtor = object.constructor, + othCtor = other.constructor; + + // Non `Object` object instances with different constructors are not equal. + if (objCtor != othCtor && + ('constructor' in object && 'constructor' in other) && + !(typeof objCtor == 'function' && objCtor instanceof objCtor && + typeof othCtor == 'function' && othCtor instanceof othCtor)) { + result = false; + } + } + stack['delete'](object); + stack['delete'](other); + return result; +} + +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG$3 = 1; + +/** `Object#toString` result references. */ +var argsTag$2 = '[object Arguments]', + arrayTag$1 = '[object Array]', + objectTag$2 = '[object Object]'; + +/** Used for built-in method references. */ +var objectProto$b = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty$8 = objectProto$b.hasOwnProperty; + +/** + * A specialized version of `baseIsEqual` for arrays and objects which performs + * deep comparisons and tracks traversed objects enabling objects with circular + * references to be compared. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} [stack] Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { + var objIsArr = isArray(object), + othIsArr = isArray(other), + objTag = objIsArr ? arrayTag$1 : getTag$1(object), + othTag = othIsArr ? arrayTag$1 : getTag$1(other); + + objTag = objTag == argsTag$2 ? objectTag$2 : objTag; + othTag = othTag == argsTag$2 ? objectTag$2 : othTag; + + var objIsObj = objTag == objectTag$2, + othIsObj = othTag == objectTag$2, + isSameTag = objTag == othTag; + + if (isSameTag && isBuffer(object)) { + if (!isBuffer(other)) { + return false; + } + objIsArr = true; + objIsObj = false; + } + if (isSameTag && !objIsObj) { + stack || (stack = new Stack); + return (objIsArr || isTypedArray(object)) + ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) + : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); + } + if (!(bitmask & COMPARE_PARTIAL_FLAG$3)) { + var objIsWrapped = objIsObj && hasOwnProperty$8.call(object, '__wrapped__'), + othIsWrapped = othIsObj && hasOwnProperty$8.call(other, '__wrapped__'); + + if (objIsWrapped || othIsWrapped) { + var objUnwrapped = objIsWrapped ? object.value() : object, + othUnwrapped = othIsWrapped ? other.value() : other; + + stack || (stack = new Stack); + return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); + } + } + if (!isSameTag) { + return false; + } + stack || (stack = new Stack); + return equalObjects(object, other, bitmask, customizer, equalFunc, stack); +} + +/** + * The base implementation of `_.isEqual` which supports partial comparisons + * and tracks traversed objects. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {boolean} bitmask The bitmask flags. + * 1 - Unordered comparison + * 2 - Partial comparison + * @param {Function} [customizer] The function to customize comparisons. + * @param {Object} [stack] Tracks traversed `value` and `other` objects. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + */ +function baseIsEqual(value, other, bitmask, customizer, stack) { + if (value === other) { + return true; + } + if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) { + return value !== value && other !== other; + } + return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); +} + +/** + * Gets the timestamp of the number of milliseconds that have elapsed since + * the Unix epoch (1 January 1970 00:00:00 UTC). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Date + * @returns {number} Returns the timestamp. + * @example + * + * _.defer(function(stamp) { + * console.log(_.now() - stamp); + * }, _.now()); + * // => Logs the number of milliseconds it took for the deferred invocation. + */ +var now = function() { + return root.Date.now(); +}; + +/** Error message constants. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max, + nativeMin = Math.min; + +/** + * Creates a debounced function that delays invoking `func` until after `wait` + * milliseconds have elapsed since the last time the debounced function was + * invoked. The debounced function comes with a `cancel` method to cancel + * delayed `func` invocations and a `flush` method to immediately invoke them. + * Provide `options` to indicate whether `func` should be invoked on the + * leading and/or trailing edge of the `wait` timeout. The `func` is invoked + * with the last arguments provided to the debounced function. Subsequent + * calls to the debounced function return the result of the last `func` + * invocation. + * + * **Note:** If `leading` and `trailing` options are `true`, `func` is + * invoked on the trailing edge of the timeout only if the debounced function + * is invoked more than once during the `wait` timeout. + * + * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred + * until to the next tick, similar to `setTimeout` with a timeout of `0`. + * + * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) + * for details over the differences between `_.debounce` and `_.throttle`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to debounce. + * @param {number} [wait=0] The number of milliseconds to delay. + * @param {Object} [options={}] The options object. + * @param {boolean} [options.leading=false] + * Specify invoking on the leading edge of the timeout. + * @param {number} [options.maxWait] + * The maximum time `func` is allowed to be delayed before it's invoked. + * @param {boolean} [options.trailing=true] + * Specify invoking on the trailing edge of the timeout. + * @returns {Function} Returns the new debounced function. + * @example + * + * // Avoid costly calculations while the window size is in flux. + * jQuery(window).on('resize', _.debounce(calculateLayout, 150)); + * + * // Invoke `sendMail` when clicked, debouncing subsequent calls. + * jQuery(element).on('click', _.debounce(sendMail, 300, { + * 'leading': true, + * 'trailing': false + * })); + * + * // Ensure `batchLog` is invoked once after 1 second of debounced calls. + * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 }); + * var source = new EventSource('/stream'); + * jQuery(source).on('message', debounced); + * + * // Cancel the trailing debounced invocation. + * jQuery(window).on('popstate', debounced.cancel); + */ +function debounce(func, wait, options) { + var lastArgs, + lastThis, + maxWait, + result, + timerId, + lastCallTime, + lastInvokeTime = 0, + leading = false, + maxing = false, + trailing = true; + + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + wait = toNumber(wait) || 0; + if (isObject(options)) { + leading = !!options.leading; + maxing = 'maxWait' in options; + maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait; + trailing = 'trailing' in options ? !!options.trailing : trailing; + } + + function invokeFunc(time) { + var args = lastArgs, + thisArg = lastThis; + + lastArgs = lastThis = undefined; + lastInvokeTime = time; + result = func.apply(thisArg, args); + return result; + } + + function leadingEdge(time) { + // Reset any `maxWait` timer. + lastInvokeTime = time; + // Start the timer for the trailing edge. + timerId = setTimeout(timerExpired, wait); + // Invoke the leading edge. + return leading ? invokeFunc(time) : result; + } + + function remainingWait(time) { + var timeSinceLastCall = time - lastCallTime, + timeSinceLastInvoke = time - lastInvokeTime, + timeWaiting = wait - timeSinceLastCall; + + return maxing + ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke) + : timeWaiting; + } + + function shouldInvoke(time) { + var timeSinceLastCall = time - lastCallTime, + timeSinceLastInvoke = time - lastInvokeTime; + + // Either this is the first call, activity has stopped and we're at the + // trailing edge, the system time has gone backwards and we're treating + // it as the trailing edge, or we've hit the `maxWait` limit. + return (lastCallTime === undefined || (timeSinceLastCall >= wait) || + (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait)); + } + + function timerExpired() { + var time = now(); + if (shouldInvoke(time)) { + return trailingEdge(time); + } + // Restart the timer. + timerId = setTimeout(timerExpired, remainingWait(time)); + } + + function trailingEdge(time) { + timerId = undefined; + + // Only invoke if we have `lastArgs` which means `func` has been + // debounced at least once. + if (trailing && lastArgs) { + return invokeFunc(time); + } + lastArgs = lastThis = undefined; + return result; + } + + function cancel() { + if (timerId !== undefined) { + clearTimeout(timerId); + } + lastInvokeTime = 0; + lastArgs = lastCallTime = lastThis = timerId = undefined; + } + + function flush() { + return timerId === undefined ? result : trailingEdge(now()); + } + + function debounced() { + var time = now(), + isInvoking = shouldInvoke(time); + + lastArgs = arguments; + lastThis = this; + lastCallTime = time; + + if (isInvoking) { + if (timerId === undefined) { + return leadingEdge(lastCallTime); + } + if (maxing) { + // Handle invocations in a tight loop. + clearTimeout(timerId); + timerId = setTimeout(timerExpired, wait); + return invokeFunc(lastCallTime); + } + } + if (timerId === undefined) { + timerId = setTimeout(timerExpired, wait); + } + return result; + } + debounced.cancel = cancel; + debounced.flush = flush; + return debounced; +} + +/** + * Performs a deep comparison between two values to determine if they are + * equivalent. + * + * **Note:** This method supports comparing arrays, array buffers, booleans, + * date objects, error objects, maps, numbers, `Object` objects, regexes, + * sets, strings, symbols, and typed arrays. `Object` objects are compared + * by their own, not inherited, enumerable properties. Functions and DOM + * nodes are compared by strict equality, i.e. `===`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.isEqual(object, other); + * // => true + * + * object === other; + * // => false + */ +function isEqual(value, other) { + return baseIsEqual(value, other); +} + +/** Error message constants. */ +var FUNC_ERROR_TEXT$1 = 'Expected a function'; + +/** + * Creates a throttled function that only invokes `func` at most once per + * every `wait` milliseconds. The throttled function comes with a `cancel` + * method to cancel delayed `func` invocations and a `flush` method to + * immediately invoke them. Provide `options` to indicate whether `func` + * should be invoked on the leading and/or trailing edge of the `wait` + * timeout. The `func` is invoked with the last arguments provided to the + * throttled function. Subsequent calls to the throttled function return the + * result of the last `func` invocation. + * + * **Note:** If `leading` and `trailing` options are `true`, `func` is + * invoked on the trailing edge of the timeout only if the throttled function + * is invoked more than once during the `wait` timeout. + * + * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred + * until to the next tick, similar to `setTimeout` with a timeout of `0`. + * + * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) + * for details over the differences between `_.throttle` and `_.debounce`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to throttle. + * @param {number} [wait=0] The number of milliseconds to throttle invocations to. + * @param {Object} [options={}] The options object. + * @param {boolean} [options.leading=true] + * Specify invoking on the leading edge of the timeout. + * @param {boolean} [options.trailing=true] + * Specify invoking on the trailing edge of the timeout. + * @returns {Function} Returns the new throttled function. + * @example + * + * // Avoid excessively updating the position while scrolling. + * jQuery(window).on('scroll', _.throttle(updatePosition, 100)); + * + * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes. + * var throttled = _.throttle(renewToken, 300000, { 'trailing': false }); + * jQuery(element).on('click', throttled); + * + * // Cancel the trailing throttled invocation. + * jQuery(window).on('popstate', throttled.cancel); + */ +function throttle(func, wait, options) { + var leading = true, + trailing = true; + + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT$1); + } + if (isObject(options)) { + leading = 'leading' in options ? !!options.leading : leading; + trailing = 'trailing' in options ? !!options.trailing : trailing; + } + return debounce(func, wait, { + 'leading': leading, + 'maxWait': wait, + 'trailing': trailing + }); +} + +function createStore(reducer, initState = {}) { + let state = initState; + const topics = { + all: [] + }; + function subscribe(...args) { + let type = 'all'; + let listener; + if (typeof args[0] === 'string') { + type = args[0]; + listener = args[1]; + } + else { + listener = args[0]; + } + if (!topics[type]) { + topics[type] = []; + } + topics[type].push(listener); + } + function dispatch(action) { + const oldState = state; + state = reducer(state, action); + if (!action) { + // dispatch all + if (topics['all']) { + topics['all'].forEach(listener => listener(state)); + } + return; + } + const topicName = getTypeInTopics(action.type); + if (topicName && topics[topicName]) { + return topics[topicName].forEach(listener => { + if (!isEqual(state[topicName], oldState[topicName])) { + listener(state[topicName]); + } + }); + } + } + function getState() { + return state; + } + function getTypeInTopics(type) { + const topics = { + player: Object.keys(PlayerTypes), + progress: Object.keys(ProgressTypes) + }; + for (let [key, enums] of Object.entries(topics)) { + if (enums.includes(type)) { + return key; + } + } + return null; + } + return { + subscribe, + dispatch, + getState + }; +} +//# sourceMappingURL=create-store.js.map + +function combineReducers(reducers) { + const reducerKeys = Object.keys(reducers); + return function combination(state, action) { + const nextState = {}; + for (let i = 0; i < reducerKeys.length; i++) { + const key = reducerKeys[i]; // reducer name + const reducer = reducers[key]; + const previousStateForKey = state[key]; + const nextStateForKey = reducer(previousStateForKey, action); + nextState[key] = nextStateForKey; + } + return nextState; + }; +} +//# sourceMappingURL=combine-reducers.js.map + +const reducer = combineReducers({ + player: playerReducer, + progress: progressReducer +}); +const reduxStore = createStore(reducer); +//# sourceMappingURL=index.js.map + +const getVNodeByEl = (el, isSVG) => { + const tagName = el.tagName.toLocaleLowerCase().trim(); + return { + id: nodeStore.createNodeId(), + attrs: getAttr(el), + tag: tagName, + children: [], + extra: { isSVG: isSVG || tagName === 'svg' } + }; +}; +const getAttr = (el) => { + const resAttr = {}; + const attrs = el.attributes; + if (el.checked) { + resAttr.checked = 'true'; + } + if (attrs && attrs.length) { + return Object.values(attrs).reduce((ret, attr) => { + const [name, value] = extraAttr(attr); + if (name) { + ret[name] = value; + } + return ret; + }, resAttr); + } + return resAttr; +}; +const extraAttr = (attr) => { + let { name, value } = attr; + if (name === 'href' || name === 'src') { + if (/^\/(?!\/)/.test(value)) { + const origin = location.origin; + value = origin + value; + } + else if (value.startsWith('#/')) { + return []; + } + } + return [name, value]; +}; +const createElement = (el, inheritSVG) => { + if (el.nodeType === Node.TEXT_NODE) { + return null; + } + if (el.tagName === 'SCRIPT') { + return null; + } + const vNode = getVNodeByEl(el, inheritSVG); + const { id } = vNode; + nodeStore.addNode(el, id); + inheritSVG = inheritSVG || vNode.extra.isSVG; + el.childNodes.forEach((node) => { + if (node.nodeType === Node.ELEMENT_NODE) { + const child = createElement(node, inheritSVG); + if (child) { + vNode.children.push(child); + } + } + else if (node.nodeType === Node.TEXT_NODE) { + if (node.nodeValue) { + const text = trimNodeText(node.nodeValue); + if (text) { + vNode.children.push(text); + } + } + } + }); + return vNode; +}; +const trimNodeText = (nodeValue) => { + return nodeValue.replace(/\r\n/g, '').replace(/\n/g, ''); +}; +const convertHTML = (doc) => { + const { head, body } = doc; + return { + id: nodeStore.createNodeId(), + tag: 'html', + attrs: {}, + children: [createElement(head), createElement(body)], + extra: { isSVG: false } + }; +}; +const virtualDOM = { + createElement, + convertHTML +}; +//# sourceMappingURL=serialize.js.map + +function setAttribute(node, name, value) { + if (name === 'style') { + if (value) { + if (typeof value === 'string') { + node.style.cssText = value; + } + else if (value !== null && typeof value === 'object') { + for (const [k, v] of Object.entries(value)) { + node.style[k] = v; + } + } + } + return; + } + if (/^on\w+$/.test(name)) { + return; + } + return node.setAttribute(name, value === true ? '' : String(value)); +} +//# sourceMappingURL=dom.js.map + +function convertVNode(vNode, node) { + if (vNode === null || vNode === undefined) { + return null; + } + if (typeof vNode === 'string') { + return createText(vNode); + } + const output = createNode(vNode); + if ((vNode.children && vNode.children.length) || (output.childNodes && output.childNodes.length)) { + travel(vNode, output); + } + createAttributes(vNode, output); + return output; +} +function travel(vNode, node) { + const nodeChildren = []; + const vNodeChildren = vNode.children.slice(); + vNodeChildren.forEach(vChild => { + let child = nodeChildren.pop(); + child = convertVNode(vChild); + if (child) { + node.appendChild(child); + } + }); +} +function createAttributes(vNode, node) { + const { attrs } = vNode; + for (const [name, val] of Object.entries(attrs)) { + setAttribute(node, name, val); + } +} +function createNode(vNode) { + const { id, extra } = vNode; + const { isSVG } = extra; + let output; + const tagName = transformTagName(vNode.tag); + if (isSVG) { + output = document.createElementNS('http://www.w3.org/2000/svg', tagName); + } + else { + output = document.createElement(tagName); + } + nodeStore.updateNode(id, output); + return output; +} +function transformTagName(tag) { + const tagMap = { + script: 'noscript' + }; + const tagName = tagMap[tag] || tag; + return tagName; +} +function createText(textNode, node) { + let output; + output = document.createTextNode(textNode); + return output; +} +//# sourceMappingURL=deserialize.js.map + +var SnapshotType; +(function (SnapshotType) { + SnapshotType["WINDOW"] = "WINDOW"; + SnapshotType["DOM"] = "DOM"; + SnapshotType["MOUSE"] = "MOUSE"; + SnapshotType["DOM_UPDATE"] = "DOM_UPDATE"; + SnapshotType["FORM_EL_UPDATE"] = "FORM_EL_UPDATE"; +})(SnapshotType || (SnapshotType = {})); +var FormElementEvent; +(function (FormElementEvent) { + FormElementEvent["ATTR"] = "ATTR"; + FormElementEvent["INPUT"] = "INPUT"; + FormElementEvent["CHANGE"] = "CHANGE"; + FormElementEvent["FOCUS"] = "FOCUS"; + FormElementEvent["BLUR"] = "BLUR"; +})(FormElementEvent || (FormElementEvent = {})); +var MouseEventType; +(function (MouseEventType) { + MouseEventType["MOVE"] = "MOVE"; + MouseEventType["CLICK"] = "click"; +})(MouseEventType || (MouseEventType = {})); +var ChildListUpdateDataType; +(function (ChildListUpdateDataType) { + ChildListUpdateDataType["ADD"] = "ADD"; + ChildListUpdateDataType["DELETE"] = "DELETE"; + ChildListUpdateDataType["MOVE"] = "MOVE"; +})(ChildListUpdateDataType || (ChildListUpdateDataType = {})); +//# sourceMappingURL=types.js.map + +function windowSnapshot(emit) { + const href = window.location.href; + var width = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth; + var height = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight; + emit({ + type: SnapshotType.WINDOW, + data: { + width, + height, + href + }, + time: Date.now().toString() + }); +} +function DOMSnapshot(emit) { + emit({ + type: SnapshotType.DOM, + data: { + vNode: virtualDOM.convertHTML(document) + }, + time: Date.now().toString() + }); +} +function mouseObserve(emit) { + function mouseMove() { + const evt = (e) => { + emit({ + type: SnapshotType.MOUSE, + data: { + type: MouseEventType.MOVE, + x: e.x, + y: e.y + }, + time: Date.now().toString() + }); + }; + const name = 'mousemove'; + const listenerHandle = throttle(evt, 100, { + trailing: true + }); + document.addEventListener(name, listenerHandle); + listenerStore.add(() => { + document.removeEventListener(name, listenerHandle); + }); + } + function mouseClick() { + const evt = (e) => { + emit({ + type: SnapshotType.MOUSE, + data: { + type: MouseEventType.CLICK, + id: nodeStore.getNodeId(e.target), + x: e.x, + y: e.y + }, + time: Date.now().toString() + }); + }; + const name = 'click'; + const listenerHandle = throttle(evt, 250); + listenerStore.add(() => { + document.removeEventListener(name, listenerHandle); + }); + document.addEventListener(name, listenerHandle); + } + mouseMove(); + mouseClick(); +} +function DOMObserve(emit) { + const mutationCallback = (records) => { + const mutations = []; + function addMutation(mType) { + return function (data) { + mutations.push({ + mType, + data + }); + }; + } + records.forEach((record) => { + const { target, addedNodes, removedNodes, type, nextSibling, attributeName } = record; + const joinData = addMutation(type); + switch (type) { + case 'attributes': + if (attributeName) { + const curAttrValue = target.getAttribute(attributeName); + joinData({ + nodeId: nodeStore.getNodeId(target), + value: curAttrValue, + attr: attributeName + }); + } + break; + case 'characterData': + const parent = target.parentNode; + joinData({ + parentId: nodeStore.getNodeId(parent), + value: target.nodeValue, + pos: parent.childNodes.length > 0 ? [...parent.childNodes].indexOf(target) : null + }); + break; + case 'childList': + if (addedNodes.length) { + addedNodes.forEach(node => { + let text; + let vNode; + if (node.nodeType === Node.TEXT_NODE) { + text = node.nodeValue; + const pos = Array.from(node.parentNode.childNodes).indexOf(node); + joinData({ + type: ChildListUpdateDataType.ADD, + parentId: nodeStore.getNodeId(node.parentNode), + value: node.textContent, + pos + }); + } + else { + // reset element for remove reference + vNode = createElement(node); + // convertVNode(vNode, null) + const parent = node.parentNode; + joinData({ + type: ChildListUpdateDataType.ADD, + parentId: nodeStore.getNodeId(target), + vNode, + pos: parent.childNodes.length > 0 + ? [...parent.childNodes].indexOf(node) + : null + }); + } + }); + } + if (removedNodes.length) { + removedNodes.forEach(node => { + joinData({ + type: ChildListUpdateDataType.DELETE, + parentId: nodeStore.getNodeId(target), + nodeId: nodeStore.getNodeId(node) || null + }); + }); + } + break; + } + }); + if (mutations.length) { + emit({ + type: SnapshotType.DOM_UPDATE, + data: { + mutations + }, + time: Date.now().toString() + }); + } + }; + const observer = new MutationObserver(mutationCallback); + observer.observe(document.body, { + attributeOldValue: true, + attributes: true, + characterData: true, + characterDataOldValue: true, + childList: true, + subtree: true + }); + listenerStore.add(() => { + observer.disconnect(); + }); +} +function formElementObserve(emit) { + listenInputs(emit); + kidnapInputs(emit); // for sys write in input +} +function listenInputs(emit) { + const eventTypes = ['input', 'change', 'focus', 'blur']; + eventTypes + .map(type => (fn) => { + document.addEventListener(type, fn, { once: false, passive: true, capture: true }); + }) + .forEach(handle => handle(handleFn)); + listenerStore.add(() => { + eventTypes.forEach(type => { + document.removeEventListener(type, handleFn, true); + }); + }); + function handleFn(e) { + const eventType = e.type; + switch (eventType) { + case 'input': + case 'change': + emit({ + type: SnapshotType.FORM_EL_UPDATE, + data: { + type: FormElementEvent.INPUT, + id: nodeStore.getNodeId(e.target), + value: e.target.value + }, + time: Date.now().toString() + }); + break; + case 'focus': + emit({ + type: SnapshotType.FORM_EL_UPDATE, + data: { + type: FormElementEvent.FOCUS, + id: nodeStore.getNodeId(e.target) + }, + time: Date.now().toString() + }); + break; + case 'blur': + emit({ + type: SnapshotType.FORM_EL_UPDATE, + data: { + type: FormElementEvent.BLUR, + id: nodeStore.getNodeId(e.target) + }, + time: Date.now().toString() + }); + break; + } + } +} +function kidnapInputs(emit) { + const elementList = [ + [HTMLInputElement.prototype, 'value'], + [HTMLInputElement.prototype, 'checked'], + [HTMLSelectElement.prototype, 'value'], + [HTMLTextAreaElement.prototype, 'value'] + ]; + const handles = elementList.map(item => { + return () => { + const [target, key] = item; + const original = Object.getOwnPropertyDescriptor(target, key); + Object.defineProperty(target, key, { + set: function (value) { + setTimeout(() => { + handleEvent.call(this, key, value); + }); + if (original && original.set) { + original.set.call(this, value); + } + } + }); + listenerStore.add(() => { + if (original) { + Object.defineProperty(target, key, original); + } + }); + }; + }); + handles.concat([]).forEach(handle => handle()); + function handleEvent(key, value) { + emit({ + type: SnapshotType.FORM_EL_UPDATE, + data: { + type: FormElementEvent.ATTR, + id: nodeStore.getNodeId(this), + key, + value + }, + time: Date.now().toString() + }); + } +} +const snapshots = { + windowSnapshot, + DOMSnapshot, + mouseObserve, + DOMObserve, + formElementObserve +}; +//# sourceMappingURL=snapshot.js.map + +const ctrl = { + uninstall: () => { + Array.from(listenerStore.values()).forEach(un => un()); + } +}; +const record = ({ emitter } = {}) => { + recordAll(emitter); + return ctrl; +}; +function recordAll(emitter) { + const recordTasks = [...Object.values(snapshots)]; + recordTasks.forEach(task => { + task(emitter); + }); +} +//# sourceMappingURL=record.js.map + +var HTML = "
\n
\n
\n \n
\n
\n
\n \n \n \n \n \n
\n
\n
\n
\n
\n
\n
\n
\n \n \n \n
\n
\n
\n"; + +var STYLE = "body {\n margin: 0;\n}\n\n#wr-sandbox {\n background: white;\n vertical-align: top;\n border: 0;\n}\n\n#wr-player {\n position: relative;\n}\n\n#wr-pointer {\n width: 10px;\n height: 10px;\n position: absolute;\n transition: all .2s\n}\n\n#wr-pointer[active] svg {\n fill: red;\n transform: scale3d(1.2, 1.2, 1.2);\n}\n\n.wr-container {\n background: grey;\n}\n\n.wr-panel {\n width: 100%;\n box-sizing: border-box;\n padding: 10px;\n height: 40px;\n position: absolute;\n left: 0;\n bottom: 0;\n background: darkgray;\n}\n\n.wr-keyboard {\n float: left;\n width: 200px;\n}\n\n.wr-progress {\n margin-left: 200px;\n height: 20px;\n overflow: hidden;\n width: calc(100% - 200px);\n}\n\n.wr-slider-bar {\n position: relative;\n padding: 0 5px;\n width: calc(100% - 22px);\n height: 5px;\n margin: 7.5px 0;\n background: white;\n border-radius: 2.5px;\n}\n\n.wr-thumb {\n width: 12px;\n height: 12px;\n box-sizing: border-box;\n border: 1px solid white;\n background: black;\n border-radius: 100%;\n cursor: pointer;\n position: absolute;\n left: 0%;\n transform: translateY(-3px);\n z-index: 10;\n transition: left .01s linear;\n}\n"; + +var FIXED = "input[type=\"checkbox\"] {\n pointer-events: none;\n}\n"; + +class Container { + constructor(params) { + this.vNode = params.vNode; + this.width = params.width; + this.height = params.height; + this.init(); + } + init() { + this.initTemplate(); + this.initSandbox(); + } + initSandbox() { + this.sandBox = this.container.querySelector('#wr-sandbox'); + this.sandBox.style.width = this.width + 'px'; + this.sandBox.style.height = this.height + 'px'; + const sandBoxDoc = this.sandBox.contentWindow.document; + const child = convertVNode(this.vNode); + if (child) { + const head = child.firstChild; + if (head) { + head.appendChild(this.createStyle(FIXED)); + } + sandBoxDoc.replaceChild(child, sandBoxDoc.documentElement); + } + } + initTemplate() { + document.head.appendChild(this.createStyle(STYLE)); + document.body.appendChild(this.createContainer()); + } + createContainer() { + const parser = new DOMParser(); + const element = parser.parseFromString(HTML, 'text/html').body.firstChild; + element.style.width = this.width + 'px'; + element.style.height = this.height + 'px'; + element.style.position = 'relative'; + element.style.margin = '0 auto'; + return (this.container = element); + } + createStyle(s) { + const parser = new DOMParser(); + const style = parser.parseFromString(``, 'text/html').head.firstChild; + return style; + } +} +//# sourceMappingURL=container.js.map + +// import { Redux } from '@WebReplay/utils' +class KeyboardComponent { + constructor(container) { + this.container = container; + this.init(); + } + init() { + this.controller = this.container.querySelector('.wr-keyboard'); + this.pauseBtn = this.controller.querySelector('.pause'); + this.playBtn = this.controller.querySelector('.play'); + this.controller.addEventListener('click', (e) => { + if (e.target && e.target.type === 'button') { + const speed = Number(e.target.getAttribute('speed')); + this.speed = speed; + reduxStore.dispatch({ + type: PlayerTypes.SPEED, + data: { + speed + } + }); + } + }); + reduxStore.subscribe('player', state => { + this.paly(state.speed); + this.setSpeed(state.speed); + }); + } + paly(speed) { + if (speed !== 0) { + this.pauseBtn.removeAttribute('disabled'); + this.playBtn.setAttribute('disabled', ''); + } + else { + this.playBtn.removeAttribute('disabled'); + this.pauseBtn.setAttribute('disabled', ''); + } + } + setSpeed(speed) { + const speedNodes = this.container.querySelectorAll('.speed'); + [...speedNodes].forEach(node => { + node.removeAttribute('disabled'); + }); + const index = speed === 1 ? 0 : speed === 8 ? 1 : speed === 16 ? 2 : -1; + if (index > -1) { + speedNodes[index].setAttribute('disabled', ''); + } + } +} +//# sourceMappingURL=keyboard.js.map + +function updateDom(snapshot) { + const { type, data } = snapshot; + switch (type) { + case SnapshotType.MOUSE: + const { x, y, type } = data; + if (type === MouseEventType.MOVE) { + this.pointer.move(x, y); + } + else if (type === MouseEventType.CLICK) { + this.pointer.click(x, y); + } + break; + case SnapshotType.DOM_UPDATE: + const { mutations } = data; + mutations.forEach((mutate) => { + const { mType, data } = mutate; + const { value, attr, type, parentId, pos, nodeId, vNode } = data; + switch (mType) { + case 'attributes': + const targetEl = nodeStore.getNode(nodeId); + targetEl.setAttribute(attr, value); + break; + case 'characterData': + const parentEl = nodeStore.getNode(parentId); + if (pos !== null) { + const target = parentEl.childNodes[pos]; + parentEl.replaceChild(document.createTextNode(value), target); + } + else { + parentEl.innerText = value; + } + break; + case 'childList': + const parentNode = nodeStore.getNode(parentId); + const targetNode = nodeStore.getNode(nodeId) || convertVNode(vNode); + if (type === ChildListUpdateDataType.DELETE) { + if (targetNode) { + parentNode.removeChild(targetNode); + } + } + else if (ChildListUpdateDataType.ADD) { + if (value) { + // it's a TextNode + const textNode = document.createTextNode(value); + if (parentNode.childNodes.length) { + parentNode.replaceChild(textNode, parentNode.childNodes[pos]); + } + else { + parentNode.appendChild(textNode); + } + } + else { + // it's a ElementNode + parentNode.insertBefore(targetNode, parentNode.childNodes[pos]); + } + } + break; + } + }); + break; + case SnapshotType.FORM_EL_UPDATE: + const { id, key, type: formType, value } = data; + const node = nodeStore.getNode(id); + if (formType === FormElementEvent.INPUT) { + node.value = value; + } + else if (formType === FormElementEvent.FOCUS) { + node.focus(); + } + else if (formType === FormElementEvent.BLUR) { + node.blur(); + } + else if (formType === FormElementEvent.ATTR) { + node[key] = value; + } + break; + } +} +//# sourceMappingURL=dom.js.map + +class PlayerComponent { + constructor(data, pointer, progress) { + this.speed = 0; + this.index = 0; + this.frameIndex = 0; + this.lastPercentage = 0; + this.data = data; + this.pointer = pointer; + this.progress = progress; + reduxStore.subscribe('player', state => { + this.progressState = reduxStore.getState()['progress']; + const speed = state.speed; + this.speed = speed; + if (speed > 0) { + this.play(speed); + } + else { + this.pause(); + } + this.frames = this.getAccuratelyFrame(); + }); + } + play(speed) { + cancelAnimationFrame(this.requestID); + this.requestID = requestAnimationFrame(loop.bind(this)); + const initTime = Date.now(); + this.startTime = 0; + function loop() { + const timeStamp = Date.now() - initTime; + if (this.frameIndex > 0 && !this.frames[this.frameIndex + 1]) { + this.stop(); + return; + } + if (!this.startTime) { + this.startTime = Number(this.frames[this.frameIndex]); + } + const currTime = this.startTime + timeStamp * speed; + const nextTime = Number(this.frames[this.frameIndex + 1]); + if (currTime >= nextTime) { + this.frameIndex++; + const progress = (this.frameIndex / this.frames.length) * 100; + if (progress - this.lastPercentage > this.getPercentInterval()) { + this.progress.updateProgress(progress); + this.lastPercentage = progress; + } + if (this.data[this.index] && currTime > +this.data[this.index].time) { + this.execFrame.call(this, this.data[this.index]); + this.index++; + } + } + this.requestID = requestAnimationFrame(loop.bind(this)); + } + } + pause() { + cancelAnimationFrame(this.requestID); + reduxStore.dispatch({ + type: PlayerTypes.SPEED, + data: { + speed: 0 + } + }); + } + stop() { + this.index = 0; + this.pause(); + } + execFrame(snapshot) { + updateDom.call(this, snapshot); + } + getPercentInterval() { + const k = 0.08; + const b = 0.2; + return this.speed * k + b; + } + getAccuratelyFrame(interval = 50) { + this.progressState = reduxStore.getState()['progress']; + const { startTime, endTime } = this.progressState; + const delay = 500; + const s = +startTime; + const e = +endTime + delay; + const result = []; + for (let i = s; i < e; i += interval) { + result.push(i); + } + result.push(e); + return result; + } +} +//# sourceMappingURL=player.js.map + +class PointerComponent { + constructor() { + this.x = 0; + this.y = 0; + this.initPointer(); + } + initPointer() { + this.pointer = document.getElementById('wr-pointer'); + this.move(0, 0); + } + move(x, y) { + this.x = x; + this.y = y; + this.pointer.style.left = this.x + 'px'; + this.pointer.style.top = this.y + 'px'; + } + click(x, y) { + this.move(x, y); + this.pointer.setAttribute('active', ''); + setTimeout(() => { + this.pointer.removeAttribute('active'); + }, 20); + } +} +//# sourceMappingURL=pointer.js.map + +class ProgressComponent { + constructor(c) { + this.totalDistance = 0; + this.progress = c.querySelector('.wr-progress'); + this.thumb = this.progress.querySelector('.wr-thumb'); + this.slider = this.progress.querySelector('.wr-slider-bar'); + } + updateProgress(percentage) { + this.thumb.style.left = percentage + '%'; + } +} +//# sourceMappingURL=progress.js.map + +class Panel { + constructor(container, data) { + this.container = container; + this.data = data; + this.initComponent(); + } + initComponent() { + this.keyboard = new KeyboardComponent(this.container); + this.progress = new ProgressComponent(this.container); + this.pointer = new PointerComponent(); + this.player = new PlayerComponent(this.data, this.pointer, this.progress); + } +} +//# sourceMappingURL=panel.js.map + +async function replay() { + const indexDB = await DBPromise; + const { width, height, vNode, data } = await indexDB.getData(); + const c = new Container({ vNode, width, height }); + new Panel(c.container, data); + reduxStore.dispatch({ + type: ProgressTypes.INFO, + data: { + frame: 0, + curTime: data[0].time, + startTime: data[0].time, + endTime: data[data.length - 1].time, + length: data.length + } + }); + reduxStore.dispatch({ + type: PlayerTypes.SPEED, + data: { speed: 1 } + }); +} + +export { DBPromise as DB, record, replay }; //# sourceMappingURL=replay.esm.js.map diff --git a/dist/replay.esm.js.map b/dist/replay.esm.js.map index c8bad841..7c8f0749 100644 --- a/dist/replay.esm.js.map +++ b/dist/replay.esm.js.map @@ -1 +1 @@ -{"version":3,"file":"replay.esm.js","sources":["../packages/utils/src/store/listener.ts","../packages/utils/src/store/node.ts","../packages/utils/src/store/data.ts","../packages/utils/src/redux/reducers/player.ts","../packages/utils/src/redux/reducers/progress.ts","../node_modules/lodash-es/_freeGlobal.js","../node_modules/lodash-es/_root.js","../node_modules/lodash-es/_Symbol.js","../node_modules/lodash-es/_getRawTag.js","../node_modules/lodash-es/_objectToString.js","../node_modules/lodash-es/_baseGetTag.js","../node_modules/lodash-es/isObjectLike.js","../node_modules/lodash-es/isArray.js","../node_modules/lodash-es/isObject.js","../node_modules/lodash-es/toNumber.js","../node_modules/lodash-es/isSymbol.js","../node_modules/lodash-es/isFunction.js","../node_modules/lodash-es/_coreJsData.js","../node_modules/lodash-es/_isMasked.js","../node_modules/lodash-es/_toSource.js","../node_modules/lodash-es/_baseIsNative.js","../node_modules/lodash-es/_getNative.js","../node_modules/lodash-es/_getValue.js","../node_modules/lodash-es/_WeakMap.js","../node_modules/lodash-es/_isIndex.js","../node_modules/lodash-es/eq.js","../node_modules/lodash-es/isLength.js","../node_modules/lodash-es/_isPrototype.js","../node_modules/lodash-es/_baseIsArguments.js","../node_modules/lodash-es/isArguments.js","../node_modules/lodash-es/isBuffer.js","../node_modules/lodash-es/stubFalse.js","../node_modules/lodash-es/_baseIsTypedArray.js","../node_modules/lodash-es/_nodeUtil.js","../node_modules/lodash-es/_baseUnary.js","../node_modules/lodash-es/isTypedArray.js","../node_modules/lodash-es/_arrayLikeKeys.js","../node_modules/lodash-es/_baseTimes.js","../node_modules/lodash-es/_nativeKeys.js","../node_modules/lodash-es/_overArg.js","../node_modules/lodash-es/_baseKeys.js","../node_modules/lodash-es/keys.js","../node_modules/lodash-es/isArrayLike.js","../node_modules/lodash-es/_nativeCreate.js","../node_modules/lodash-es/_hashGet.js","../node_modules/lodash-es/_hashHas.js","../node_modules/lodash-es/_Hash.js","../node_modules/lodash-es/_assocIndexOf.js","../node_modules/lodash-es/_hashClear.js","../node_modules/lodash-es/_hashDelete.js","../node_modules/lodash-es/_hashSet.js","../node_modules/lodash-es/_listCacheDelete.js","../node_modules/lodash-es/_ListCache.js","../node_modules/lodash-es/_listCacheClear.js","../node_modules/lodash-es/_listCacheGet.js","../node_modules/lodash-es/_listCacheHas.js","../node_modules/lodash-es/_listCacheSet.js","../node_modules/lodash-es/_Map.js","../node_modules/lodash-es/_getMapData.js","../node_modules/lodash-es/_isKeyable.js","../node_modules/lodash-es/_MapCache.js","../node_modules/lodash-es/_mapCacheClear.js","../node_modules/lodash-es/_mapCacheDelete.js","../node_modules/lodash-es/_mapCacheGet.js","../node_modules/lodash-es/_mapCacheHas.js","../node_modules/lodash-es/_mapCacheSet.js","../node_modules/lodash-es/_Stack.js","../node_modules/lodash-es/_stackClear.js","../node_modules/lodash-es/_stackDelete.js","../node_modules/lodash-es/_stackGet.js","../node_modules/lodash-es/_stackHas.js","../node_modules/lodash-es/_stackSet.js","../node_modules/lodash-es/_getSymbols.js","../node_modules/lodash-es/_arrayFilter.js","../node_modules/lodash-es/stubArray.js","../node_modules/lodash-es/_getAllKeys.js","../node_modules/lodash-es/_baseGetAllKeys.js","../node_modules/lodash-es/_arrayPush.js","../node_modules/lodash-es/_DataView.js","../node_modules/lodash-es/_Promise.js","../node_modules/lodash-es/_Set.js","../node_modules/lodash-es/_getTag.js","../node_modules/lodash-es/_Uint8Array.js","../node_modules/lodash-es/_SetCache.js","../node_modules/lodash-es/_arraySome.js","../node_modules/lodash-es/_setCacheAdd.js","../node_modules/lodash-es/_setCacheHas.js","../node_modules/lodash-es/_equalArrays.js","../node_modules/lodash-es/_cacheHas.js","../node_modules/lodash-es/_mapToArray.js","../node_modules/lodash-es/_setToArray.js","../node_modules/lodash-es/_equalByTag.js","../node_modules/lodash-es/_equalObjects.js","../node_modules/lodash-es/_baseIsEqualDeep.js","../node_modules/lodash-es/_baseIsEqual.js","../node_modules/lodash-es/now.js","../node_modules/lodash-es/debounce.js","../node_modules/lodash-es/throttle.js","../packages/utils/src/redux/index.ts","../packages/utils/src/redux/create-store.ts","../node_modules/lodash-es/isEqual.js","../packages/utils/src/redux/combine-reducers.ts","../packages/virtual-dom/src/serialize.ts","../packages/virtual-dom/src/dom.ts","../packages/virtual-dom/src/deserialize.ts","../packages/snapshot/src/types.ts","../packages/snapshot/src/snapshot.ts","../packages/record/src/record.ts","../packages/player/src/container.ts","../packages/player/src/keyboard.ts","../packages/player/src/dom.ts","../packages/player/src/player.ts","../packages/player/src/pointer.ts","../packages/player/src/progress.ts","../packages/player/src/panel.ts","../packages/player/src/index.ts"],"sourcesContent":["export const listenerStore = new Set()\n","class NodeStore {\n private nodeId = 1\n private nodeMap: Map = new Map()\n private idMap: WeakMap = new WeakMap()\n\n public createNodeId = () => this.nodeId++\n\n public getNode(id: number) {\n return this.nodeMap.get(id)\n }\n\n public addNode(node: Node, id: number = this.createNodeId()) {\n this.idMap.set(node, id)\n this.nodeMap.set(id, node)\n return id\n }\n\n public removeNode(id: number) {\n this.nodeMap.delete(id)\n this.idMap.delete(this.getNode(id) as Node)\n }\n\n public getNodeId(node: Node) {\n return this.idMap.get(node)\n }\n\n public updateNode(id: number, node: Node) {\n this.idMap.set(node, id)\n this.nodeMap.set(id, node)\n }\n}\n\nexport const nodeStore = new NodeStore()\n","import { SnapshotData, WindowSnapshotData, DOMSnapshotData } from '@WebReplay/snapshot'\n\nexport class IndexDBOperator {\n db: IDBDatabase\n DBName: string\n version: number\n storeName: string\n\n constructor(DBName: string, version: number, storeName: string, callback: (db: IDBDatabase) => void) {\n this.DBName = DBName\n this.version = version\n this.storeName = storeName\n\n const request = window.indexedDB.open(DBName, version)\n request.onerror = e => {\n console.error('open IndexDB on error')\n }\n\n request.onsuccess = e => {\n this.db = request.result\n\n // this.clear()\n\n callback(this.db)\n }\n\n request.onupgradeneeded = e => {\n const db = e.target!.result\n\n if (!db.objectStoreNames.contains(storeName)) {\n const objectStore = db.createObjectStore(storeName, { autoIncrement: true, keyPath: 'id' })\n objectStore.createIndex('type', 'type', { unique: false })\n objectStore.createIndex('data', 'data', { unique: false })\n objectStore.createIndex('time', 'time', { unique: false })\n }\n }\n }\n\n add(data: SnapshotData) {\n const request = this.db\n .transaction([`${this.storeName}`], 'readwrite')\n .objectStore(`${this.storeName}`)\n .add(data)\n\n request.onerror = e => {\n throw new Error('write IndexDB on error')\n }\n }\n\n clear() {\n const objectStore = this.db.transaction([`${this.storeName}`], 'readwrite').objectStore(`${this.storeName}`)\n objectStore.clear()\n }\n\n async readAll(): Promise {\n const objectStore = this.db.transaction([`${this.storeName}`], 'readwrite').objectStore(`${this.storeName}`)\n return new Promise(resolve => {\n objectStore.getAll().onsuccess = event => {\n const result = event!.target!.result as SnapshotData[]\n resolve(result)\n }\n })\n }\n\n async getData() {\n const all = await this.readAll()\n\n const [window, virtualNode, ...data] = all\n const [{ width, height }, { vNode }] = [window.data, virtualNode.data] as [WindowSnapshotData, DOMSnapshotData]\n\n return {\n width,\n height,\n vNode,\n data\n }\n }\n}\n\nexport const DBPromise: Promise = new Promise(resolve => {\n const indexDB = new IndexDBOperator('wr_db', 1, 'wr_data', () => {\n resolve(indexDB)\n })\n})\n","import { State } from '../create-store'\n\nlet initState = {\n speed: null\n}\n\nexport enum PlayerTypes {\n SPEED = 'SPEED'\n}\n\nexport type PlayerState = typeof PlayerTypes\n\nexport default function playerReducer(state: State, action: any) {\n if (!state) {\n state = initState\n }\n if (!action) {\n return state\n }\n const { type, data } = action\n\n switch (type) {\n case PlayerTypes.SPEED:\n return {\n ...state,\n ...data\n }\n default:\n return state\n }\n}\n","import { State } from '../create-store'\n\nconst initState = {\n frame: 0,\n length: 0,\n curTime: 0,\n startTime: 0,\n endTime: 0\n}\n\nexport type ProgressState = typeof initState\n\nexport enum ProgressTypes {\n FORWARD = 'FORWARD',\n BACKWARD = 'BACKWARD',\n INFO = 'INFO'\n}\n\nexport default function progressReducer(state: State, action?: any) {\n if (!state) {\n state = initState\n }\n\n if (!action) {\n return state\n }\n\n const { type, data } = action\n\n switch (type) {\n case ProgressTypes.FORWARD:\n return {\n ...state,\n frame: data.frame,\n curTime: data.curTime\n }\n case ProgressTypes.BACKWARD:\n return {\n ...state,\n frame: data.frame\n }\n case ProgressTypes.INFO:\n return {\n ...state,\n ...data\n }\n default:\n return state\n }\n}\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nexport default freeGlobal;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nexport default root;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nexport default Symbol;\n","import Symbol from './_Symbol.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nexport default getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nexport default objectToString;\n","import Symbol from './_Symbol.js';\nimport getRawTag from './_getRawTag.js';\nimport objectToString from './_objectToString.js';\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nexport default baseGetTag;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nexport default isObjectLike;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nexport default isArray;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nexport default isObject;\n","import isObject from './isObject.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nexport default toNumber;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nexport default isSymbol;\n","import baseGetTag from './_baseGetTag.js';\nimport isObject from './isObject.js';\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nexport default isFunction;\n","import root from './_root.js';\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nexport default coreJsData;\n","import coreJsData from './_coreJsData.js';\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nexport default isMasked;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nexport default toSource;\n","import isFunction from './isFunction.js';\nimport isMasked from './_isMasked.js';\nimport isObject from './isObject.js';\nimport toSource from './_toSource.js';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nexport default baseIsNative;\n","import baseIsNative from './_baseIsNative.js';\nimport getValue from './_getValue.js';\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nexport default getNative;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nexport default getValue;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nexport default WeakMap;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\nexport default isIndex;\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\nexport default eq;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nexport default isLength;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\nexport default isPrototype;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nexport default baseIsArguments;\n","import baseIsArguments from './_baseIsArguments.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\nexport default isArguments;\n","import root from './_root.js';\nimport stubFalse from './stubFalse.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nexport default isBuffer;\n","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nexport default stubFalse;\n","import baseGetTag from './_baseGetTag.js';\nimport isLength from './isLength.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nexport default baseIsTypedArray;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\nexport default nodeUtil;\n","/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\nexport default baseUnary;\n","import baseIsTypedArray from './_baseIsTypedArray.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nexport default isTypedArray;\n","import baseTimes from './_baseTimes.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isIndex from './_isIndex.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default arrayLikeKeys;\n","/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\nexport default baseTimes;\n","import overArg from './_overArg.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nexport default nativeKeys;\n","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\nexport default overArg;\n","import isPrototype from './_isPrototype.js';\nimport nativeKeys from './_nativeKeys.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default baseKeys;\n","import arrayLikeKeys from './_arrayLikeKeys.js';\nimport baseKeys from './_baseKeys.js';\nimport isArrayLike from './isArrayLike.js';\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nexport default keys;\n","import isFunction from './isFunction.js';\nimport isLength from './isLength.js';\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\nexport default isArrayLike;\n","import getNative from './_getNative.js';\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nexport default nativeCreate;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nexport default hashGet;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nexport default hashHas;\n","import hashClear from './_hashClear.js';\nimport hashDelete from './_hashDelete.js';\nimport hashGet from './_hashGet.js';\nimport hashHas from './_hashHas.js';\nimport hashSet from './_hashSet.js';\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nexport default Hash;\n","import eq from './eq.js';\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\nexport default assocIndexOf;\n","import nativeCreate from './_nativeCreate.js';\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\nexport default hashClear;\n","/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\nexport default hashDelete;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\nexport default hashSet;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\nexport default listCacheDelete;\n","import listCacheClear from './_listCacheClear.js';\nimport listCacheDelete from './_listCacheDelete.js';\nimport listCacheGet from './_listCacheGet.js';\nimport listCacheHas from './_listCacheHas.js';\nimport listCacheSet from './_listCacheSet.js';\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nexport default ListCache;\n","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\nexport default listCacheClear;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\nexport default listCacheGet;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\nexport default listCacheHas;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\nexport default listCacheSet;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nexport default Map;\n","import isKeyable from './_isKeyable.js';\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\nexport default getMapData;\n","/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\nexport default isKeyable;\n","import mapCacheClear from './_mapCacheClear.js';\nimport mapCacheDelete from './_mapCacheDelete.js';\nimport mapCacheGet from './_mapCacheGet.js';\nimport mapCacheHas from './_mapCacheHas.js';\nimport mapCacheSet from './_mapCacheSet.js';\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nexport default MapCache;\n","import Hash from './_Hash.js';\nimport ListCache from './_ListCache.js';\nimport Map from './_Map.js';\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\nexport default mapCacheClear;\n","import getMapData from './_getMapData.js';\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\nexport default mapCacheDelete;\n","import getMapData from './_getMapData.js';\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\nexport default mapCacheGet;\n","import getMapData from './_getMapData.js';\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\nexport default mapCacheHas;\n","import getMapData from './_getMapData.js';\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\nexport default mapCacheSet;\n","import ListCache from './_ListCache.js';\nimport stackClear from './_stackClear.js';\nimport stackDelete from './_stackDelete.js';\nimport stackGet from './_stackGet.js';\nimport stackHas from './_stackHas.js';\nimport stackSet from './_stackSet.js';\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\nexport default Stack;\n","import ListCache from './_ListCache.js';\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n}\n\nexport default stackClear;\n","/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n}\n\nexport default stackDelete;\n","/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\nexport default stackGet;\n","/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\nexport default stackHas;\n","import ListCache from './_ListCache.js';\nimport Map from './_Map.js';\nimport MapCache from './_MapCache.js';\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n}\n\nexport default stackSet;\n","import arrayFilter from './_arrayFilter.js';\nimport stubArray from './stubArray.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n};\n\nexport default getSymbols;\n","/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n}\n\nexport default arrayFilter;\n","/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\nexport default stubArray;\n","import baseGetAllKeys from './_baseGetAllKeys.js';\nimport getSymbols from './_getSymbols.js';\nimport keys from './keys.js';\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\n\nexport default getAllKeys;\n","import arrayPush from './_arrayPush.js';\nimport isArray from './isArray.js';\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\nexport default baseGetAllKeys;\n","/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\nexport default arrayPush;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nexport default DataView;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nexport default Promise;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nexport default Set;\n","import DataView from './_DataView.js';\nimport Map from './_Map.js';\nimport Promise from './_Promise.js';\nimport Set from './_Set.js';\nimport WeakMap from './_WeakMap.js';\nimport baseGetTag from './_baseGetTag.js';\nimport toSource from './_toSource.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n setTag = '[object Set]',\n weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\nexport default getTag;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nexport default Uint8Array;\n","import MapCache from './_MapCache.js';\nimport setCacheAdd from './_setCacheAdd.js';\nimport setCacheHas from './_setCacheHas.js';\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\nexport default SetCache;\n","/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\nfunction arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n}\n\nexport default arraySome;\n","/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\nexport default setCacheAdd;\n","/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\nexport default setCacheHas;\n","import SetCache from './_SetCache.js';\nimport arraySome from './_arraySome.js';\nimport cacheHas from './_cacheHas.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(array);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n}\n\nexport default equalArrays;\n","/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\nexport default cacheHas;\n","/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\nexport default mapToArray;\n","/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\nexport default setToArray;\n","import Symbol from './_Symbol.js';\nimport Uint8Array from './_Uint8Array.js';\nimport eq from './eq.js';\nimport equalArrays from './_equalArrays.js';\nimport mapToArray from './_mapToArray.js';\nimport setToArray from './_setToArray.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n}\n\nexport default equalByTag;\n","import getAllKeys from './_getAllKeys.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n}\n\nexport default equalObjects;\n","import Stack from './_Stack.js';\nimport equalArrays from './_equalArrays.js';\nimport equalByTag from './_equalByTag.js';\nimport equalObjects from './_equalObjects.js';\nimport getTag from './_getTag.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\nexport default baseIsEqualDeep;\n","import baseIsEqualDeep from './_baseIsEqualDeep.js';\nimport isObjectLike from './isObjectLike.js';\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\nexport default baseIsEqual;\n","import root from './_root.js';\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nexport default now;\n","import isObject from './isObject.js';\nimport now from './now.js';\nimport toNumber from './toNumber.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nexport default debounce;\n","import debounce from './debounce.js';\nimport isObject from './isObject.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\nfunction throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n}\n\nexport default throttle;\n","import { createStore } from './create-store'\nimport { combineReducers } from './combine-reducers'\n\nimport progressReducer from './reducers/progress'\nimport playerReducer from './reducers/player'\n\nconst reducer = combineReducers({\n player: playerReducer,\n progress: progressReducer\n})\n\nexport { PlayerTypes, PlayerState } from './reducers/player'\nexport { ProgressTypes, ProgressState } from './reducers/progress'\n\nexport const reduxStore = createStore(reducer)\n","import { PlayerTypes } from './reducers/player'\nimport { ProgressTypes } from './reducers/progress'\nimport { isEqual } from 'lodash-es'\n\nexport type State = { [key: string]: any }\n\nexport function createStore(reducer: (state: State, action: any) => State, initState: State = {}) {\n let state = initState\n\n const topics = {\n all: []\n } as { [key: string]: Function[] }\n\n function subscribe(type: string, listener: (state: State) => void): void\n function subscribe(listener: (state: State) => void): void\n\n function subscribe(...args: any): void {\n let type = 'all'\n let listener\n if (typeof args[0] === 'string') {\n type = args[0]\n listener = args[1]\n } else {\n listener = args[0]\n }\n if (!topics[type]) {\n topics[type] = []\n }\n topics[type].push(listener)\n }\n\n function dispatch(action?: { type: string; data?: any }) {\n const oldState = state\n state = reducer(state, action)\n\n if (!action) {\n // dispatch all\n if (topics['all']) {\n topics['all'].forEach(listener => listener(state))\n }\n return\n }\n\n const topicName = getTypeInTopics(action.type)\n if (topicName && topics[topicName]) {\n return topics[topicName].forEach(listener => {\n if (!isEqual(state[topicName], oldState[topicName])) {\n listener(state[topicName])\n }\n })\n }\n }\n\n function getState() {\n return state\n }\n\n function getTypeInTopics(type: string) {\n const topics = {\n player: Object.keys(PlayerTypes),\n progress: Object.keys(ProgressTypes)\n } as { [key: string]: string[] }\n\n for (let [key, enums] of Object.entries(topics)) {\n if (enums.includes(type)) {\n return key\n }\n }\n return null\n }\n\n return {\n subscribe,\n dispatch,\n getState\n }\n}\n","import baseIsEqual from './_baseIsEqual.js';\n\n/**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\nfunction isEqual(value, other) {\n return baseIsEqual(value, other);\n}\n\nexport default isEqual;\n","import { State } from './create-store'\n\nexport type Action = { type: string; state: State }\nexport type Reducer = (state: State, action?: Action) => State\n\nexport function combineReducers(reducers: { [key: string]: Reducer }) {\n const reducerKeys = Object.keys(reducers)\n return function combination(state: State, action?: Action) {\n const nextState = {} as State\n\n for (let i = 0; i < reducerKeys.length; i++) {\n const key = reducerKeys[i] // reducer name\n\n const reducer = reducers[key]\n\n const previousStateForKey = state[key]\n\n const nextStateForKey = reducer(previousStateForKey, action)\n\n nextState[key] = nextStateForKey\n }\n return nextState\n }\n}\n","import { VNode } from './types'\nimport { nodeStore } from '@WebReplay/utils'\n\nconst getVNodeByEl = (el: Element, isSVG?: boolean): VNode => {\n const tagName = el.tagName.toLocaleLowerCase().trim()\n return {\n id: nodeStore.createNodeId(),\n attrs: getAttr(el as HTMLElement & { checked: boolean }),\n tag: tagName,\n children: [] as VNode[],\n extra: { isSVG: isSVG || tagName === 'svg' }\n }\n}\n\nconst getAttr = (el: HTMLElement & { checked: boolean }) => {\n const resAttr: { [key: string]: string } = {}\n const attrs = el.attributes\n\n if (el.checked) {\n resAttr.checked = 'true'\n }\n\n if (attrs && attrs.length) {\n return Object.values(attrs).reduce((ret: any, attr) => {\n // const [name, value] = extraAttr(attr)\n const { name, value } = attr\n ret[name] = value\n return ret\n }, resAttr)\n }\n return resAttr\n}\n\n// const extraAttr = (attr: Attr) => {\n// let { name, value } = attr\n// if (name === 'href' || name === 'src') {\n// if (/^\\/(?!\\/)/.test(value)) {\n// const host = `https://github.com`\n// value = host + value\n// }\n// }\n// return [name, value]\n// }\n\nexport const createElement = (el: Element, inheritSVG?: boolean): VNode | null => {\n if (el.nodeType === Node.TEXT_NODE) {\n return null\n }\n if (el.tagName === 'SCRIPT') {\n return null\n }\n const vNode = getVNodeByEl(el, inheritSVG)\n const { id } = vNode\n nodeStore.addNode(el, id)\n inheritSVG = inheritSVG || vNode.extra.isSVG\n el.childNodes.forEach((node: Element) => {\n if (node.nodeType === Node.ELEMENT_NODE) {\n const child = createElement(node, inheritSVG)\n if (child) {\n vNode.children.push(child)\n }\n } else if (node.nodeType === Node.TEXT_NODE) {\n if (node.nodeValue) {\n const text = trimNodeText(node.nodeValue)\n if (text) {\n vNode.children.push(text)\n }\n }\n }\n })\n return vNode\n}\n\nconst trimNodeText = (nodeValue: string) => {\n return nodeValue.replace(/\\r\\n/g, '').replace(/\\n/g, '')\n}\n\nconst convertHTML = (doc: Document) => {\n const { head, body } = doc\n return {\n id: nodeStore.createNodeId(),\n tag: 'html',\n attrs: {},\n children: [createElement(head), createElement(body)],\n extra: { isSVG: false }\n }\n}\n\nexport const virtualDOM = {\n createElement,\n convertHTML\n}\n","export function setAttribute(node: HTMLElement, name: string, value: string | boolean): void {\n if (name === 'style') {\n if (value) {\n if (typeof value === 'string') {\n node.style.cssText = value\n } else if (value !== null && typeof value === 'object') {\n for (const [k, v] of Object.entries(value)) {\n node.style[k as any] = v as any\n }\n }\n }\n return\n }\n\n if (/^on\\w+$/.test(name)) {\n return\n }\n\n return node.setAttribute(name, value === true ? '' : String(value))\n}\n","import { setAttribute } from './dom'\nimport { nodeStore } from '@WebReplay/utils'\nimport { VNode } from './types'\n\nexport function convertVNode(vNode: VNode | string | null, node: Element | null): Element | null {\n if (vNode === null || vNode === undefined) {\n return null\n }\n if (typeof vNode === 'string') {\n return createText(vNode, node)\n }\n const output = createNode(vNode)\n if ((vNode.children && vNode.children.length) || (output.childNodes && output.childNodes.length)) {\n travel(vNode, output)\n }\n createAttributes(vNode, output)\n return output\n}\n\nfunction travel(vNode: VNode, node: Element): void {\n const nodeChildren: Element[] = []\n const vNodeChildren = vNode.children.slice()\n vNodeChildren.forEach(vChild => {\n let child = nodeChildren.pop() as Element | null\n child = convertVNode(vChild, child)\n if (child) {\n node.appendChild(child)\n }\n })\n}\n\nfunction createAttributes(vNode: VNode, node: Element): void {\n const { attrs } = vNode\n for (const [name, val] of Object.entries(attrs)) {\n setAttribute(node as HTMLElement, name, val)\n }\n}\n\nfunction createNode(vNode: VNode): Element {\n const { id, extra } = vNode\n const { isSVG } = extra\n let output: Element\n const tagName = transformTagName(vNode.tag)\n if (isSVG) {\n output = document.createElementNS('http://www.w3.org/2000/svg', tagName)\n } else {\n output = document.createElement(tagName)\n }\n\n nodeStore.updateNode(id, output)\n return output\n}\n\nfunction transformTagName(tag: string) {\n const tagMap: { [key: string]: string } = {\n script: 'noscript'\n }\n const tagName = tagMap[tag] || tag\n return tagName\n}\n\nfunction createText(textNode: string, node: Element | null | null): Element | null {\n let output: Element | Node\n output = document.createTextNode(textNode)\n return output as Element\n}\n","import { VNode } from '@WebReplay/virtual-dom'\n\nexport enum SnapshotType {\n 'WINDOW' = 'WINDOW',\n 'DOM' = 'DOM',\n 'MOUSE' = 'MOUSE',\n 'DOM_UPDATE' = 'DOM_UPDATE',\n 'FORM_EL_UPDATE' = 'FORM_EL_UPDATE'\n}\n\nexport enum FormElementEvent {\n 'ATTR' = 'ATTR',\n 'INPUT' = 'INPUT',\n 'CHANGE' = 'CHANGE',\n 'FOCUS' = 'FOCUS',\n 'BLUR' = 'BLUR'\n}\nexport enum MouseEventType {\n 'MOVE' = 'MOVE',\n 'CLICK' = 'click'\n}\n\nexport interface WindowSnapshot {\n type: SnapshotType.WINDOW\n data: WindowSnapshotData\n time: string\n}\nexport interface WindowSnapshotData {\n width: number\n height: number\n href: string\n}\n\nexport interface DOMSnapshot {\n type: SnapshotType.DOM\n data: DOMSnapshotData\n time: string\n}\n\nexport interface DOMSnapshotData {\n vNode: VNode\n}\nexport interface MouseSnapshot {\n type: SnapshotType.MOUSE\n data: MouseSnapshotData\n time: string\n}\nexport interface MouseSnapshotData {\n type: MouseEventType\n x: number\n y: number\n id?: number\n}\nexport interface DOMObserve {\n type: SnapshotType.DOM_UPDATE\n data: DOMObserveData\n time: string\n}\nexport interface DOMObserveData {\n mutations: DOMObserveMutations[]\n}\nexport interface DOMObserveMutations {\n mType: 'attributes' | 'characterData' | 'childList'\n data: ChildListUpdateData | CharacterDataUpdateData | AttributesUpdateData\n}\n\nexport interface AttributesUpdateData {\n nodeId: number\n value: string\n attr: string\n}\n\nexport interface CharacterDataUpdateData {\n parentId: number\n value: string\n}\n\nexport interface ChildListUpdateData {\n type: ChildListUpdateDataType\n parentId: number\n nodeId: number\n pos: number\n value?: string\n vNode: VNode\n}\nexport enum ChildListUpdateDataType {\n 'ADD' = 'ADD',\n 'DELETE' = 'DELETE',\n 'MOVE' = 'MOVE'\n}\n\nexport interface FormElementObserve {\n type: SnapshotType.FORM_EL_UPDATE\n data: FormElementObserveData\n time: string\n}\n\nexport interface FormElementObserveData {\n type: FormElementEvent\n id: number\n key?: string\n value?: string\n}\n\nexport type SnapshotEvent = (e: T) => void\n\nexport type SnapshotData = FormElementObserve | DOMObserve | MouseSnapshot | DOMSnapshot | WindowSnapshot\n","import { virtualDOM, createElement, convertVNode } from '@WebReplay/virtual-dom'\nimport {\n SnapshotType,\n WindowSnapshot,\n DOMSnapshot,\n SnapshotEvent,\n MouseSnapshot,\n DOMObserve,\n FormElementObserve,\n FormElementEvent,\n MouseEventType,\n AttributesUpdateData,\n CharacterDataUpdateData,\n DOMObserveMutations,\n ChildListUpdateData,\n ChildListUpdateDataType\n} from './types'\nimport { throttle } from 'lodash-es'\nimport { nodeStore, listenerStore } from '@WebReplay/utils'\nimport { VNode } from '@WebReplay/virtual-dom'\n\nfunction windowSnapshot(emit: SnapshotEvent) {\n const href = window.location.href\n var width = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth\n var height = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight\n\n emit({\n type: SnapshotType.WINDOW,\n data: {\n width,\n height,\n href\n },\n time: Date.now().toString()\n })\n}\n\nfunction DOMSnapshot(emit: SnapshotEvent) {\n emit({\n type: SnapshotType.DOM,\n data: {\n vNode: virtualDOM.convertHTML(document) as VNode\n },\n time: Date.now().toString()\n })\n}\n\nfunction mouseObserve(emit: SnapshotEvent) {\n function mouseMove() {\n const evt = (e: MouseEvent) => {\n emit({\n type: SnapshotType.MOUSE,\n data: {\n type: MouseEventType.MOVE,\n x: e.x,\n y: e.y\n },\n time: Date.now().toString()\n })\n }\n const name = 'mousemove'\n const listenerHandle = throttle(evt, 100, {\n trailing: true\n })\n\n document.addEventListener(name, listenerHandle)\n\n listenerStore.add(() => {\n document.removeEventListener(name, listenerHandle)\n })\n }\n\n function mouseClick() {\n const evt = (e: MouseEvent) => {\n emit({\n type: SnapshotType.MOUSE,\n data: {\n type: MouseEventType.CLICK,\n id: nodeStore.getNodeId(e.target as Element),\n x: e.x,\n y: e.y\n },\n time: Date.now().toString()\n })\n }\n\n const name = 'click'\n const listenerHandle = throttle(evt, 250)\n listenerStore.add(() => {\n document.removeEventListener(name, listenerHandle)\n })\n document.addEventListener(name, listenerHandle)\n }\n\n mouseMove()\n mouseClick()\n}\n\nfunction DOMObserve(emit: SnapshotEvent) {\n const mutationCallback: MutationCallback = (records: MutationRecord[]) => {\n const mutations: DOMObserveMutations[] = []\n function addMutation(mType: 'attributes' | 'characterData' | 'childList') {\n return function(data: any) {\n mutations.push({\n mType,\n data\n })\n }\n }\n records.forEach((record: MutationRecord) => {\n const { target, addedNodes, removedNodes, type, nextSibling, attributeName } = record\n\n const joinData = addMutation(type)\n\n switch (type) {\n case 'attributes':\n if (attributeName) {\n const curAttrValue = (target as Element).getAttribute(attributeName)\n joinData({\n nodeId: nodeStore.getNodeId(target),\n value: curAttrValue,\n attr: attributeName\n } as AttributesUpdateData)\n }\n break\n case 'characterData':\n const parent = target.parentNode!\n joinData({\n parentId: nodeStore.getNodeId(parent),\n value: target.nodeValue,\n pos: parent.childNodes.length > 0 ? [...parent.childNodes].indexOf(target as ChildNode) : null\n } as CharacterDataUpdateData)\n break\n case 'childList':\n if (addedNodes.length) {\n addedNodes.forEach(node => {\n let text\n let vNode: any\n if (node.nodeType === Node.TEXT_NODE) {\n text = node.nodeValue\n const pos = Array.from(node.parentNode!.childNodes).indexOf(node as ChildNode)\n joinData({\n type: ChildListUpdateDataType.ADD,\n parentId: nodeStore.getNodeId(node.parentNode!),\n value: node.textContent,\n pos\n } as ChildListUpdateData)\n } else {\n // reset element for remove reference\n vNode = createElement(node as HTMLElement)\n // convertVNode(vNode, null)\n const parent = node.parentNode!\n joinData({\n type: ChildListUpdateDataType.ADD,\n parentId: nodeStore.getNodeId(target),\n vNode,\n pos:\n parent.childNodes.length > 0\n ? [...parent.childNodes].indexOf(node as ChildNode)\n : null\n } as ChildListUpdateData)\n }\n })\n }\n if (removedNodes.length) {\n removedNodes.forEach(node => {\n joinData({\n type: ChildListUpdateDataType.DELETE,\n parentId: nodeStore.getNodeId(target) as number,\n nodeId: nodeStore.getNodeId(node) || null\n } as ChildListUpdateData)\n })\n }\n break\n default:\n break\n }\n })\n\n if (mutations.length) {\n emit({\n type: SnapshotType.DOM_UPDATE,\n data: {\n mutations\n },\n time: Date.now().toString()\n })\n }\n }\n\n const observer = new MutationObserver(mutationCallback)\n observer.observe(document.body, {\n attributeOldValue: true,\n attributes: true,\n characterData: true,\n characterDataOldValue: true,\n childList: true,\n subtree: true\n })\n\n listenerStore.add(() => {\n observer.disconnect()\n })\n}\n\nfunction formElementObserve(emit: SnapshotEvent) {\n listenInputs(emit)\n kidnapInputs(emit) // for sys write in input\n}\n\nfunction listenInputs(emit: SnapshotEvent) {\n const eventTypes = ['input', 'change', 'focus', 'blur']\n\n eventTypes\n .map(type => (fn: (e: InputEvent) => void) => {\n document.addEventListener(type, fn, { once: false, passive: true, capture: true })\n })\n .forEach(handle => handle(handleFn))\n\n listenerStore.add(() => {\n eventTypes.forEach(type => {\n document.removeEventListener(type, handleFn, true)\n })\n })\n\n function handleFn(e: InputEvent) {\n const eventType = e.type\n\n switch (eventType) {\n case 'input':\n case 'change':\n emit({\n type: SnapshotType.FORM_EL_UPDATE,\n data: {\n type: FormElementEvent.INPUT,\n id: nodeStore.getNodeId(e.target as Node)!,\n value: (e.target as HTMLInputElement).value\n },\n time: Date.now().toString()\n })\n break\n case 'focus':\n emit({\n type: SnapshotType.FORM_EL_UPDATE,\n data: {\n type: FormElementEvent.FOCUS,\n id: nodeStore.getNodeId(e.target as Node)!\n },\n time: Date.now().toString()\n })\n break\n case 'blur':\n emit({\n type: SnapshotType.FORM_EL_UPDATE,\n data: {\n type: FormElementEvent.BLUR,\n id: nodeStore.getNodeId(e.target as Node)!\n },\n time: Date.now().toString()\n })\n break\n default:\n break\n }\n }\n}\n\nfunction kidnapInputs(emit: SnapshotEvent) {\n const elementList: [HTMLElement, string][] = [\n [HTMLInputElement.prototype, 'value'],\n [HTMLInputElement.prototype, 'checked'],\n [HTMLSelectElement.prototype, 'value'],\n [HTMLTextAreaElement.prototype, 'value']\n ]\n\n const handles = elementList.map(item => {\n return () => {\n const [target, key] = item\n const original = Object.getOwnPropertyDescriptor(target, key)\n Object.defineProperty(target, key, {\n set: function(value: string | boolean) {\n setTimeout(() => {\n handleEvent.call(this, key, value)\n })\n if (original && original.set) {\n original.set.call(this, value)\n }\n }\n })\n\n listenerStore.add(() => {\n if (original) {\n Object.defineProperty(target, key, original)\n }\n })\n }\n })\n\n handles.concat([]).forEach(handle => handle())\n\n function handleEvent(this: HTMLElement, key: string, value: string) {\n emit({\n type: SnapshotType.FORM_EL_UPDATE,\n data: {\n type: FormElementEvent.ATTR,\n id: nodeStore.getNodeId(this)!,\n key,\n value\n },\n time: Date.now().toString()\n })\n }\n}\n\nexport const snapshots = {\n windowSnapshot,\n DOMSnapshot,\n mouseObserve,\n DOMObserve,\n formElementObserve\n}\n","import { snapshots, SnapshotData } from '@WebReplay/snapshot'\nimport { RecordOptions } from './types'\nimport { listenerStore } from '@WebReplay/utils'\n\nconst ctrl = {\n uninstall: () => {\n Array.from(listenerStore.values()).forEach(un => un())\n }\n}\n\nexport const record = ({ emitter }: RecordOptions = {}) => {\n recordAll(emitter)\n return ctrl\n}\n\nfunction recordAll(emitter?: (e: SnapshotData) => void) {\n const recordTasks: Function[] = [...Object.values(snapshots)]\n\n recordTasks.forEach(task => {\n task(emitter)\n })\n}\n","import { VNode, convertVNode } from '@WebReplay/virtual-dom'\nimport HTML from './ui.html'\nimport STYLE from './ui.css'\n\nexport class Container {\n container: HTMLElement\n sandBox: HTMLIFrameElement\n\n vNode: VNode\n width: number\n height: number\n\n constructor(params: { vNode: VNode; width: number; height: number }) {\n this.vNode = params.vNode\n this.width = params.width\n this.height = params.height\n this.init()\n }\n\n init() {\n this.initTemplate()\n this.initSandbox()\n }\n\n initSandbox() {\n this.sandBox = this.container.querySelector('#wr-sandbox') as HTMLIFrameElement\n this.sandBox.style.width = this.width + 'px'\n this.sandBox.style.height = this.height + 'px'\n const sandBoxDoc = (this.sandBox.contentWindow as Window).document\n sandBoxDoc.replaceChild(convertVNode(this.vNode, null)!, sandBoxDoc.documentElement)\n }\n\n initTemplate() {\n document.head.appendChild(this.createStyle())\n document.body.appendChild(this.createContainer())\n }\n\n createContainer() {\n const parser = new DOMParser()\n const element = parser.parseFromString(HTML, 'text/html').body.firstChild as HTMLElement\n element.style.width = this.width + 'px'\n element.style.height = this.height + 'px'\n element.style.position = 'relative'\n element.style.margin = '0 auto'\n return (this.container = element)\n }\n\n createStyle() {\n const parser = new DOMParser()\n const style = parser.parseFromString(``, 'text/html').head.firstChild as HTMLElement\n return style\n }\n}\n","// import { Redux } from '@WebReplay/utils'\n\nimport { reduxStore } from '@WebReplay/utils'\nimport { PlayerTypes } from '@WebReplay/utils'\n\nexport class KeyboardComponent {\n container: HTMLElement\n controller: HTMLElement\n\n pauseBtn: HTMLElement\n playBtn: HTMLElement\n\n speed: number\n\n constructor(container: HTMLElement) {\n this.container = container\n this.init()\n }\n\n init() {\n this.controller = this.container.querySelector('.wr-keyboard') as HTMLElement\n this.pauseBtn = this.controller.querySelector('.pause') as HTMLButtonElement\n this.playBtn = this.controller.querySelector('.play') as HTMLButtonElement\n this.controller.addEventListener('click', (e: MouseEvent & { target: HTMLElement & { type: string } }) => {\n if (e.target && e.target.type === 'button') {\n const speed = Number((e.target as HTMLElement).getAttribute('speed'))\n this.speed = speed\n reduxStore.dispatch({\n type: PlayerTypes.SPEED,\n data: {\n speed\n }\n })\n }\n })\n\n reduxStore.subscribe('player', state => {\n this.paly(state.speed)\n this.setSpeed(state.speed)\n })\n }\n\n paly(speed: number) {\n if (speed !== 0) {\n this.pauseBtn.removeAttribute('disabled')\n this.playBtn.setAttribute('disabled', '')\n } else {\n this.playBtn.removeAttribute('disabled')\n this.pauseBtn.setAttribute('disabled', '')\n }\n }\n\n setSpeed(speed: number) {\n const speedNodes = this.container.querySelectorAll('.speed') as NodeListOf\n ;[...speedNodes].forEach(node => {\n node.removeAttribute('disabled')\n })\n\n const index = speed === 1 ? 0 : speed === 8 ? 1 : speed === 16 ? 2 : -1\n if (index > -1) {\n speedNodes[index].setAttribute('disabled', '')\n }\n }\n}\n","import {\n SnapshotData,\n MouseSnapshotData,\n DOMObserveData,\n FormElementObserveData,\n SnapshotType,\n MouseEventType,\n DOMObserveMutations,\n ChildListUpdateData,\n CharacterDataUpdateData,\n AttributesUpdateData,\n FormElementEvent,\n ChildListUpdateDataType\n} from '@WebReplay/snapshot'\nimport { PlayerComponent } from './player'\nimport { nodeStore } from '@WebReplay/utils'\nimport { convertVNode } from '@WebReplay/virtual-dom'\n\nexport function updateDom(this: PlayerComponent, snapshot: SnapshotData) {\n const { type, data } = snapshot\n switch (type) {\n case SnapshotType.MOUSE:\n const { x, y, type } = data as MouseSnapshotData\n if (type === MouseEventType.MOVE) {\n this.pointer.move(x, y)\n } else if (type === MouseEventType.CLICK) {\n this.pointer.click(x, y)\n }\n break\n case SnapshotType.DOM_UPDATE:\n const { mutations } = data as DOMObserveData\n mutations.forEach((mutate: DOMObserveMutations) => {\n const { mType, data } = mutate\n const { value, attr, type, parentId, pos, nodeId, vNode } = data as ChildListUpdateData &\n (CharacterDataUpdateData & AttributesUpdateData)\n switch (mType) {\n case 'attributes':\n const targetEl = nodeStore.getNode(nodeId) as HTMLElement\n targetEl.setAttribute(attr, value)\n break\n case 'characterData':\n const parentEl = nodeStore.getNode(parentId) as HTMLElement\n if (pos !== null) {\n const target = parentEl.childNodes[pos as number]\n parentEl.replaceChild(document.createTextNode(value), target)\n } else {\n parentEl.innerText = value\n }\n break\n case 'childList':\n const parentNode = nodeStore.getNode(parentId) as HTMLElement\n const targetNode = (nodeStore.getNode(nodeId) as Element) || convertVNode(vNode, null)\n if (type === ChildListUpdateDataType.DELETE) {\n if (targetNode) {\n parentNode!.removeChild(targetNode)\n }\n } else if (ChildListUpdateDataType.ADD) {\n if (value) {\n // it's a TextNode\n const textNode = document.createTextNode(value)\n if (parentNode.childNodes.length) {\n parentNode.replaceChild(textNode, parentNode.childNodes[pos])\n } else {\n parentNode!.appendChild(textNode)\n }\n } else {\n // it's a ElementNode\n parentNode.insertBefore(targetNode, parentNode.childNodes[pos])\n }\n }\n break\n }\n })\n\n break\n case SnapshotType.FORM_EL_UPDATE:\n const { id, key, type: formType, value } = data as FormElementObserveData\n const node = nodeStore.getNode(id) as HTMLFormElement\n if (formType === FormElementEvent.INPUT) {\n node.value = value\n } else if (formType === FormElementEvent.FOCUS) {\n node.focus()\n } else if (formType === FormElementEvent.BLUR) {\n node.blur()\n } else if (formType === FormElementEvent.ATTR) {\n node[key!] = value\n }\n break\n }\n}\n","import { PointerComponent } from './pointer'\nimport { SnapshotData } from '@WebReplay/snapshot'\nimport { updateDom } from './dom'\nimport { reduxStore, PlayerTypes, ProgressState } from '@WebReplay/utils'\nimport { ProgressComponent } from './progress'\n\nexport class PlayerComponent {\n data: SnapshotData[]\n speed = 0\n index = 0\n frameIndex = 0\n lastPercentage = 0\n frames: number[]\n requestID: number\n startTime: number\n pointer: PointerComponent\n progress: ProgressComponent\n progressState: ProgressState\n\n constructor(data: SnapshotData[], pointer: PointerComponent, progress: ProgressComponent) {\n this.data = data\n this.pointer = pointer\n this.progress = progress\n\n reduxStore.subscribe('player', state => {\n this.progressState = reduxStore.getState()['progress']\n const speed = state.speed\n this.speed = speed\n if (speed > 0) {\n this.play(speed)\n } else {\n this.pause()\n }\n this.frames = this.getAccuratelyFrame()\n })\n }\n\n play(speed: number) {\n cancelAnimationFrame(this.requestID)\n this.requestID = requestAnimationFrame(loop.bind(this))\n\n const initTime = Date.now()\n this.startTime = 0\n\n function loop(this: PlayerComponent) {\n const timeStamp = Date.now() - initTime\n if (this.frameIndex > 0 && !this.frames[this.frameIndex + 1]) {\n this.stop()\n return\n }\n if (!this.startTime) {\n this.startTime = Number(this.frames[this.frameIndex])\n }\n\n const currTime = this.startTime + timeStamp * speed\n const nextTime = Number(this.frames[this.frameIndex + 1])\n\n if (currTime >= nextTime) {\n this.frameIndex++\n\n const progress = (this.frameIndex / this.frames.length) * 100\n\n if (progress - this.lastPercentage > this.getPercentInterval()) {\n this.progress.updateProgress(progress)\n this.lastPercentage = progress\n }\n\n if (this.data[this.index] && currTime > +this.data[this.index].time) {\n this.execFrame.call(this, this.data[this.index])\n this.index++\n }\n }\n\n this.requestID = requestAnimationFrame(loop.bind(this))\n }\n }\n\n pause() {\n cancelAnimationFrame(this.requestID)\n reduxStore.dispatch({\n type: PlayerTypes.SPEED,\n data: {\n speed: 0\n }\n })\n }\n\n stop() {\n this.index = 0\n this.pause()\n }\n\n execFrame(this: PlayerComponent, snapshot: SnapshotData) {\n updateDom.call(this, snapshot)\n }\n\n getPercentInterval() {\n const k = 0.08\n const b = 0.2\n return this.speed * k + b\n }\n\n getAccuratelyFrame(interval = 50) {\n this.progressState = reduxStore.getState()['progress']\n const { startTime, endTime } = this.progressState\n\n const delay = 500\n const s = +startTime\n const e = +endTime + delay\n\n const result: number[] = []\n\n for (let i = s; i < e; i += interval) {\n result.push(i)\n }\n result.push(e)\n return result\n }\n}\n","export class PointerComponent {\n x = 0\n y = 0\n\n pointer: HTMLElement\n constructor() {\n this.initPointer()\n }\n\n initPointer() {\n this.pointer = document.getElementById('wr-pointer') as HTMLElement\n this.move(0, 0)\n }\n\n move(x: number, y: number) {\n this.x = x\n this.y = y\n this.pointer.style.left = this.x + 'px'\n this.pointer.style.top = this.y + 'px'\n }\n\n click(x: number, y: number) {\n this.move(x, y)\n this.pointer.setAttribute('active', '')\n setTimeout(() => {\n this.pointer.removeAttribute('active')\n }, 20)\n }\n}\n","import { ProgressState } from '@WebReplay/utils'\n\nexport class ProgressComponent {\n progress: HTMLElement\n thumb: HTMLElement\n slider: HTMLElement\n speed: number\n rafId: number\n\n progressState: ProgressState\n\n totalDistance = 0\n constructor(c: HTMLElement) {\n this.progress = c.querySelector('.wr-progress')! as HTMLElement\n this.thumb = this.progress.querySelector('.wr-thumb') as HTMLElement\n this.slider = this.progress.querySelector('.wr-slider-bar') as HTMLElement\n }\n\n updateProgress(percentage: number) {\n this.thumb.style.left = percentage + '%'\n }\n}\n","import { KeyboardComponent } from './keyboard'\nimport { PlayerComponent } from './player'\nimport { PointerComponent } from './pointer'\nimport { SnapshotData } from '@WebReplay/snapshot'\nimport { ProgressComponent } from './progress'\n\nexport class Panel {\n container: HTMLElement\n data: SnapshotData[]\n\n keyboard: KeyboardComponent\n progress: ProgressComponent\n pointer: PointerComponent\n player: PlayerComponent\n\n constructor(container: HTMLElement, data: SnapshotData[]) {\n this.container = container\n this.data = data\n this.initComponent()\n }\n\n initComponent() {\n this.keyboard = new KeyboardComponent(this.container)\n this.progress = new ProgressComponent(this.container)\n this.pointer = new PointerComponent()\n this.player = new PlayerComponent(this.data, this.pointer, this.progress)\n }\n}\n","import { DBPromise, ProgressTypes, PlayerTypes, reduxStore } from '@WebReplay/utils'\nimport { Container } from './container'\nimport { Panel } from './panel'\n\nexport async function replay() {\n const indexDB = await DBPromise\n const { width, height, vNode, data } = await indexDB.getData()\n\n const c = new Container({ vNode, width, height })\n new Panel(c.container, data)\n\n reduxStore.dispatch({\n type: ProgressTypes.INFO,\n data: {\n frame: 0,\n curTime: data[0].time,\n startTime: data[0].time,\n endTime: data[data.length - 1].time,\n length: data.length\n }\n })\n\n reduxStore.dispatch({\n type: PlayerTypes.SPEED,\n data: { speed: 1 }\n })\n}\n"],"names":["listenerStore","Set","nodeStore","[object Object]","this","Map","WeakMap","nodeId","id","nodeMap","get","node","createNodeId","idMap","set","delete","getNode","IndexDBOperator","DBName","version","storeName","callback","request","window","indexedDB","open","onerror","e","console","error","onsuccess","db","result","onupgradeneeded","target","objectStoreNames","contains","objectStore","createObjectStore","autoIncrement","keyPath","createIndex","unique","data","transaction","add","Error","clear","Promise","resolve","getAll","event","all","readAll","virtualNode","width","height","vNode","DBPromise","indexDB","initState","speed","PlayerTypes","frame","length","curTime","startTime","endTime","ProgressTypes","freeGlobal","global","Object","freeSelf","self","root","Function","Symbol","objectProto","prototype","hasOwnProperty","nativeObjectToString","toString","symToStringTag","toStringTag","undefined","baseGetTag","value","isOwn","call","tag","unmasked","getRawTag","objectToString","isObjectLike","isArray","Array","isObject","type","reTrim","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","parseInt","toNumber","isSymbol","other","valueOf","replace","isBinary","test","slice","isFunction","uid","coreJsData","maskSrcKey","exec","keys","IE_PROTO","funcToString","toSource","func","reIsHostCtor","funcProto","reIsNative","RegExp","baseIsNative","getNative","object","key","getValue","reIsUint","isIndex","eq","isLength","baseIsArguments","propertyIsEnumerable","isArguments","arguments","freeExports","exports","nodeType","freeModule","module","Buffer","isBuffer","typedArrayTags","freeProcess","process","nodeUtil","types","require","binding","nodeIsTypedArray","isTypedArray","arrayLikeKeys","inherited","isArr","isArg","isBuff","isType","skipIndexes","n","iteratee","index","baseTimes","String","push","nativeKeys","transform","arg","overArg","baseKeys","Ctor","constructor","nativeCreate","Hash","entries","entry","assocIndexOf","array","__data__","size","has","splice","ListCache","pop","getMapData","map","MapCache","hash","string","Stack","pairs","LARGE_ARRAY_SIZE","nativeGetSymbols","getOwnPropertySymbols","getSymbols","predicate","resIndex","arrayFilter","symbol","getAllKeys","keysFunc","symbolsFunc","values","offset","arrayPush","baseGetAllKeys","DataView","dataViewCtorString","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","getTag","ArrayBuffer","ctorString","Uint8Array","SetCache","arraySome","equalArrays","bitmask","customizer","equalFunc","stack","isPartial","arrLength","othLength","stacked","seen","arrValue","othValue","compared","othIndex","mapToArray","forEach","setToArray","symbolProto","symbolValueOf","baseIsEqualDeep","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","byteLength","byteOffset","buffer","name","message","convert","equalByTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","objProps","objLength","skipCtor","objValue","objCtor","othCtor","equalObjects","baseIsEqual","now","Date","nativeMax","Math","max","nativeMin","min","debounce","wait","options","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","TypeError","invokeFunc","time","args","thisArg","apply","leadingEdge","setTimeout","timerExpired","shouldInvoke","timeSinceLastCall","trailingEdge","timeWaiting","remainingWait","debounced","isInvoking","clearTimeout","cancel","flush","throttle","reduxStore","reducer","state","topics","subscribe","listener","dispatch","action","oldState","topicName","player","progress","enums","includes","getTypeInTopics","getState","createStore","reducers","reducerKeys","nextState","i","nextStateForKey","combineReducers","SPEED","FORWARD","BACKWARD","INFO","getAttr","el","resAttr","attrs","attributes","checked","reduce","ret","attr","createElement","inheritSVG","Node","TEXT_NODE","tagName","isSVG","toLocaleLowerCase","trim","children","extra","getVNodeByEl","addNode","childNodes","ELEMENT_NODE","child","nodeValue","text","trimNodeText","virtualDOM","doc","head","body","setAttribute","style","cssText","k","v","convertVNode","textNode","output","document","createTextNode","createText","script","createElementNS","updateNode","createNode","nodeChildren","vChild","appendChild","travel","val","createAttributes","SnapshotType","FormElementEvent","MouseEventType","ChildListUpdateDataType","snapshots","windowSnapshot","emit","href","location","innerWidth","documentElement","clientWidth","innerHeight","clientHeight","WINDOW","DOMSnapshot","DOM","mouseObserve","listenerHandle","MOUSE","MOVE","x","y","addEventListener","removeEventListener","mouseMove","CLICK","getNodeId","mouseClick","DOMObserve","observer","MutationObserver","records","mutations","record","addedNodes","removedNodes","nextSibling","attributeName","joinData","mType","curAttrValue","getAttribute","parent","parentNode","parentId","pos","indexOf","from","ADD","textContent","DELETE","DOM_UPDATE","observe","attributeOldValue","characterData","characterDataOldValue","childList","subtree","disconnect","formElementObserve","eventTypes","handleFn","FORM_EL_UPDATE","INPUT","FOCUS","BLUR","fn","once","passive","capture","handle","listenInputs","handleEvent","ATTR","HTMLInputElement","HTMLSelectElement","HTMLTextAreaElement","item","original","getOwnPropertyDescriptor","defineProperty","concat","kidnapInputs","ctrl","uninstall","un","emitter","task","recordAll","Container","params","init","initTemplate","initSandbox","sandBox","container","querySelector","sandBoxDoc","contentWindow","replaceChild","createStyle","createContainer","element","DOMParser","parseFromString","firstChild","position","margin","KeyboardComponent","controller","pauseBtn","playBtn","Number","paly","setSpeed","removeAttribute","speedNodes","querySelectorAll","updateDom","snapshot","pointer","move","click","mutate","parentEl","innerText","targetNode","removeChild","insertBefore","formType","focus","blur","PlayerComponent","progressState","play","pause","frames","getAccuratelyFrame","cancelAnimationFrame","requestID","requestAnimationFrame","loop","timeStamp","initTime","frameIndex","stop","currTime","nextTime","lastPercentage","getPercentInterval","updateProgress","execFrame","bind","interval","PointerComponent","initPointer","getElementById","left","top","ProgressComponent","c","thumb","slider","percentage","Panel","initComponent","keyboard","async","replay","getData"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"replay.esm.js","sources":["../packages/utils/src/store/listener.ts","../packages/utils/src/store/node.ts","../packages/utils/src/store/data.ts","../packages/utils/src/redux/reducers/player.ts","../packages/utils/src/redux/reducers/progress.ts","../node_modules/lodash-es/_freeGlobal.js","../node_modules/lodash-es/_root.js","../node_modules/lodash-es/_Symbol.js","../node_modules/lodash-es/_getRawTag.js","../node_modules/lodash-es/_objectToString.js","../node_modules/lodash-es/_baseGetTag.js","../node_modules/lodash-es/isObjectLike.js","../node_modules/lodash-es/isSymbol.js","../node_modules/lodash-es/isArray.js","../node_modules/lodash-es/isObject.js","../node_modules/lodash-es/toNumber.js","../node_modules/lodash-es/isFunction.js","../node_modules/lodash-es/_coreJsData.js","../node_modules/lodash-es/_isMasked.js","../node_modules/lodash-es/_toSource.js","../node_modules/lodash-es/_baseIsNative.js","../node_modules/lodash-es/_getValue.js","../node_modules/lodash-es/_getNative.js","../node_modules/lodash-es/_WeakMap.js","../node_modules/lodash-es/_isIndex.js","../node_modules/lodash-es/eq.js","../node_modules/lodash-es/isLength.js","../node_modules/lodash-es/isArrayLike.js","../node_modules/lodash-es/_isPrototype.js","../node_modules/lodash-es/_baseTimes.js","../node_modules/lodash-es/_baseIsArguments.js","../node_modules/lodash-es/isArguments.js","../node_modules/lodash-es/stubFalse.js","../node_modules/lodash-es/isBuffer.js","../node_modules/lodash-es/_baseIsTypedArray.js","../node_modules/lodash-es/_baseUnary.js","../node_modules/lodash-es/_nodeUtil.js","../node_modules/lodash-es/isTypedArray.js","../node_modules/lodash-es/_arrayLikeKeys.js","../node_modules/lodash-es/_overArg.js","../node_modules/lodash-es/_nativeKeys.js","../node_modules/lodash-es/_baseKeys.js","../node_modules/lodash-es/keys.js","../node_modules/lodash-es/_nativeCreate.js","../node_modules/lodash-es/_hashClear.js","../node_modules/lodash-es/_hashDelete.js","../node_modules/lodash-es/_hashGet.js","../node_modules/lodash-es/_hashHas.js","../node_modules/lodash-es/_hashSet.js","../node_modules/lodash-es/_Hash.js","../node_modules/lodash-es/_listCacheClear.js","../node_modules/lodash-es/_assocIndexOf.js","../node_modules/lodash-es/_listCacheDelete.js","../node_modules/lodash-es/_listCacheGet.js","../node_modules/lodash-es/_listCacheHas.js","../node_modules/lodash-es/_listCacheSet.js","../node_modules/lodash-es/_ListCache.js","../node_modules/lodash-es/_Map.js","../node_modules/lodash-es/_mapCacheClear.js","../node_modules/lodash-es/_isKeyable.js","../node_modules/lodash-es/_getMapData.js","../node_modules/lodash-es/_mapCacheDelete.js","../node_modules/lodash-es/_mapCacheGet.js","../node_modules/lodash-es/_mapCacheHas.js","../node_modules/lodash-es/_mapCacheSet.js","../node_modules/lodash-es/_MapCache.js","../node_modules/lodash-es/_arrayPush.js","../node_modules/lodash-es/_stackClear.js","../node_modules/lodash-es/_stackDelete.js","../node_modules/lodash-es/_stackGet.js","../node_modules/lodash-es/_stackHas.js","../node_modules/lodash-es/_stackSet.js","../node_modules/lodash-es/_Stack.js","../node_modules/lodash-es/_arrayFilter.js","../node_modules/lodash-es/stubArray.js","../node_modules/lodash-es/_getSymbols.js","../node_modules/lodash-es/_baseGetAllKeys.js","../node_modules/lodash-es/_getAllKeys.js","../node_modules/lodash-es/_DataView.js","../node_modules/lodash-es/_Promise.js","../node_modules/lodash-es/_Set.js","../node_modules/lodash-es/_getTag.js","../node_modules/lodash-es/_Uint8Array.js","../node_modules/lodash-es/_setCacheAdd.js","../node_modules/lodash-es/_setCacheHas.js","../node_modules/lodash-es/_SetCache.js","../node_modules/lodash-es/_arraySome.js","../node_modules/lodash-es/_cacheHas.js","../node_modules/lodash-es/_equalArrays.js","../node_modules/lodash-es/_mapToArray.js","../node_modules/lodash-es/_setToArray.js","../node_modules/lodash-es/_equalByTag.js","../node_modules/lodash-es/_equalObjects.js","../node_modules/lodash-es/_baseIsEqualDeep.js","../node_modules/lodash-es/_baseIsEqual.js","../node_modules/lodash-es/now.js","../node_modules/lodash-es/debounce.js","../node_modules/lodash-es/isEqual.js","../node_modules/lodash-es/throttle.js","../packages/utils/src/redux/create-store.ts","../packages/utils/src/redux/combine-reducers.ts","../packages/utils/src/redux/index.ts","../packages/virtual-dom/src/serialize.ts","../packages/virtual-dom/src/dom.ts","../packages/virtual-dom/src/deserialize.ts","../packages/snapshot/src/types.ts","../packages/snapshot/src/snapshot.ts","../packages/record/src/record.ts","../packages/player/src/container.ts","../packages/player/src/keyboard.ts","../packages/player/src/dom.ts","../packages/player/src/player.ts","../packages/player/src/pointer.ts","../packages/player/src/progress.ts","../packages/player/src/panel.ts","../packages/player/src/index.ts"],"sourcesContent":["export const listenerStore = new Set()\n","class NodeStore {\n private nodeId = 1\n private nodeMap: Map = new Map()\n private idMap: WeakMap = new WeakMap()\n\n public createNodeId = () => this.nodeId++\n\n public getNode(id: number) {\n return this.nodeMap.get(id)\n }\n\n public addNode(node: Node, id: number = this.createNodeId()) {\n this.idMap.set(node, id)\n this.nodeMap.set(id, node)\n return id\n }\n\n public removeNode(id: number) {\n this.nodeMap.delete(id)\n this.idMap.delete(this.getNode(id) as Node)\n }\n\n public getNodeId(node: Node) {\n return this.idMap.get(node)\n }\n\n public updateNode(id: number, node: Node) {\n this.idMap.set(node, id)\n this.nodeMap.set(id, node)\n }\n}\n\nexport const nodeStore = new NodeStore()\n","import { SnapshotData, WindowSnapshotData, DOMSnapshotData } from '@WebReplay/snapshot'\n\nexport class IndexDBOperator {\n db: IDBDatabase\n DBName: string\n version: number\n storeName: string\n\n constructor(DBName: string, version: number, storeName: string, callback: (db: IDBDatabase) => void) {\n this.DBName = DBName\n this.version = version\n this.storeName = storeName\n\n const request = window.indexedDB.open(DBName, version)\n request.onerror = e => {\n console.error('open IndexDB on error')\n }\n\n request.onsuccess = e => {\n this.db = request.result\n\n // this.clear()\n\n callback(this.db)\n }\n\n request.onupgradeneeded = e => {\n const db = e.target!.result\n\n if (!db.objectStoreNames.contains(storeName)) {\n const objectStore = db.createObjectStore(storeName, { autoIncrement: true, keyPath: 'id' })\n objectStore.createIndex('type', 'type', { unique: false })\n objectStore.createIndex('data', 'data', { unique: false })\n objectStore.createIndex('time', 'time', { unique: false })\n }\n }\n }\n\n add(data: SnapshotData) {\n const request = this.db\n .transaction([`${this.storeName}`], 'readwrite')\n .objectStore(`${this.storeName}`)\n .add(data)\n\n request.onerror = e => {\n throw new Error('write IndexDB on error')\n }\n }\n\n clear() {\n const objectStore = this.db.transaction([`${this.storeName}`], 'readwrite').objectStore(`${this.storeName}`)\n objectStore.clear()\n }\n\n async readAll(): Promise {\n const objectStore = this.db.transaction([`${this.storeName}`], 'readwrite').objectStore(`${this.storeName}`)\n return new Promise(resolve => {\n objectStore.getAll().onsuccess = event => {\n const result = event!.target!.result as SnapshotData[]\n resolve(result)\n }\n })\n }\n\n async getData() {\n const all = await this.readAll()\n\n const [window, virtualNode, ...data] = all\n const [{ width, height }, { vNode }] = [window.data, virtualNode.data] as [WindowSnapshotData, DOMSnapshotData]\n\n return {\n width,\n height,\n vNode,\n data\n }\n }\n}\n\nexport const DBPromise: Promise = new Promise(resolve => {\n const indexDB = new IndexDBOperator('wr_db', 1, 'wr_data', () => {\n resolve(indexDB)\n })\n})\n","import { State } from '../create-store'\n\nlet initState = {\n speed: null\n}\n\nexport enum PlayerTypes {\n SPEED = 'SPEED'\n}\n\nexport type PlayerState = typeof PlayerTypes\n\nexport default function playerReducer(state: State, action: any) {\n if (!state) {\n state = initState\n }\n if (!action) {\n return state\n }\n const { type, data } = action\n\n switch (type) {\n case PlayerTypes.SPEED:\n return {\n ...state,\n ...data\n }\n default:\n return state\n }\n}\n","import { State } from '../create-store'\n\nconst initState = {\n frame: 0,\n length: 0,\n curTime: 0,\n startTime: 0,\n endTime: 0\n}\n\nexport type ProgressState = typeof initState\n\nexport enum ProgressTypes {\n FORWARD = 'FORWARD',\n BACKWARD = 'BACKWARD',\n INFO = 'INFO'\n}\n\nexport default function progressReducer(state: State, action?: any) {\n if (!state) {\n state = initState\n }\n\n if (!action) {\n return state\n }\n\n const { type, data } = action\n\n switch (type) {\n case ProgressTypes.FORWARD:\n return {\n ...state,\n frame: data.frame,\n curTime: data.curTime\n }\n case ProgressTypes.BACKWARD:\n return {\n ...state,\n frame: data.frame\n }\n case ProgressTypes.INFO:\n return {\n ...state,\n ...data\n }\n default:\n return state\n }\n}\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nexport default freeGlobal;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nexport default root;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nexport default Symbol;\n","import Symbol from './_Symbol.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nexport default getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nexport default objectToString;\n","import Symbol from './_Symbol.js';\nimport getRawTag from './_getRawTag.js';\nimport objectToString from './_objectToString.js';\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nexport default baseGetTag;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nexport default isObjectLike;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nexport default isSymbol;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nexport default isArray;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nexport default isObject;\n","import isObject from './isObject.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nexport default toNumber;\n","import baseGetTag from './_baseGetTag.js';\nimport isObject from './isObject.js';\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nexport default isFunction;\n","import root from './_root.js';\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nexport default coreJsData;\n","import coreJsData from './_coreJsData.js';\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nexport default isMasked;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nexport default toSource;\n","import isFunction from './isFunction.js';\nimport isMasked from './_isMasked.js';\nimport isObject from './isObject.js';\nimport toSource from './_toSource.js';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nexport default baseIsNative;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nexport default getValue;\n","import baseIsNative from './_baseIsNative.js';\nimport getValue from './_getValue.js';\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nexport default getNative;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nexport default WeakMap;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\nexport default isIndex;\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\nexport default eq;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nexport default isLength;\n","import isFunction from './isFunction.js';\nimport isLength from './isLength.js';\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\nexport default isArrayLike;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\nexport default isPrototype;\n","/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\nexport default baseTimes;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nexport default baseIsArguments;\n","import baseIsArguments from './_baseIsArguments.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\nexport default isArguments;\n","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nexport default stubFalse;\n","import root from './_root.js';\nimport stubFalse from './stubFalse.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nexport default isBuffer;\n","import baseGetTag from './_baseGetTag.js';\nimport isLength from './isLength.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nexport default baseIsTypedArray;\n","/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\nexport default baseUnary;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\nexport default nodeUtil;\n","import baseIsTypedArray from './_baseIsTypedArray.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nexport default isTypedArray;\n","import baseTimes from './_baseTimes.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isIndex from './_isIndex.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default arrayLikeKeys;\n","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\nexport default overArg;\n","import overArg from './_overArg.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nexport default nativeKeys;\n","import isPrototype from './_isPrototype.js';\nimport nativeKeys from './_nativeKeys.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default baseKeys;\n","import arrayLikeKeys from './_arrayLikeKeys.js';\nimport baseKeys from './_baseKeys.js';\nimport isArrayLike from './isArrayLike.js';\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nexport default keys;\n","import getNative from './_getNative.js';\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nexport default nativeCreate;\n","import nativeCreate from './_nativeCreate.js';\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\nexport default hashClear;\n","/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\nexport default hashDelete;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nexport default hashGet;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nexport default hashHas;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\nexport default hashSet;\n","import hashClear from './_hashClear.js';\nimport hashDelete from './_hashDelete.js';\nimport hashGet from './_hashGet.js';\nimport hashHas from './_hashHas.js';\nimport hashSet from './_hashSet.js';\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nexport default Hash;\n","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\nexport default listCacheClear;\n","import eq from './eq.js';\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\nexport default assocIndexOf;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\nexport default listCacheDelete;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\nexport default listCacheGet;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\nexport default listCacheHas;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\nexport default listCacheSet;\n","import listCacheClear from './_listCacheClear.js';\nimport listCacheDelete from './_listCacheDelete.js';\nimport listCacheGet from './_listCacheGet.js';\nimport listCacheHas from './_listCacheHas.js';\nimport listCacheSet from './_listCacheSet.js';\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nexport default ListCache;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nexport default Map;\n","import Hash from './_Hash.js';\nimport ListCache from './_ListCache.js';\nimport Map from './_Map.js';\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\nexport default mapCacheClear;\n","/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\nexport default isKeyable;\n","import isKeyable from './_isKeyable.js';\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\nexport default getMapData;\n","import getMapData from './_getMapData.js';\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\nexport default mapCacheDelete;\n","import getMapData from './_getMapData.js';\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\nexport default mapCacheGet;\n","import getMapData from './_getMapData.js';\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\nexport default mapCacheHas;\n","import getMapData from './_getMapData.js';\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\nexport default mapCacheSet;\n","import mapCacheClear from './_mapCacheClear.js';\nimport mapCacheDelete from './_mapCacheDelete.js';\nimport mapCacheGet from './_mapCacheGet.js';\nimport mapCacheHas from './_mapCacheHas.js';\nimport mapCacheSet from './_mapCacheSet.js';\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nexport default MapCache;\n","/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\nexport default arrayPush;\n","import ListCache from './_ListCache.js';\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n}\n\nexport default stackClear;\n","/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n}\n\nexport default stackDelete;\n","/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\nexport default stackGet;\n","/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\nexport default stackHas;\n","import ListCache from './_ListCache.js';\nimport Map from './_Map.js';\nimport MapCache from './_MapCache.js';\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n}\n\nexport default stackSet;\n","import ListCache from './_ListCache.js';\nimport stackClear from './_stackClear.js';\nimport stackDelete from './_stackDelete.js';\nimport stackGet from './_stackGet.js';\nimport stackHas from './_stackHas.js';\nimport stackSet from './_stackSet.js';\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\nexport default Stack;\n","/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n}\n\nexport default arrayFilter;\n","/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\nexport default stubArray;\n","import arrayFilter from './_arrayFilter.js';\nimport stubArray from './stubArray.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n};\n\nexport default getSymbols;\n","import arrayPush from './_arrayPush.js';\nimport isArray from './isArray.js';\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\nexport default baseGetAllKeys;\n","import baseGetAllKeys from './_baseGetAllKeys.js';\nimport getSymbols from './_getSymbols.js';\nimport keys from './keys.js';\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\n\nexport default getAllKeys;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nexport default DataView;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nexport default Promise;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nexport default Set;\n","import DataView from './_DataView.js';\nimport Map from './_Map.js';\nimport Promise from './_Promise.js';\nimport Set from './_Set.js';\nimport WeakMap from './_WeakMap.js';\nimport baseGetTag from './_baseGetTag.js';\nimport toSource from './_toSource.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n setTag = '[object Set]',\n weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\nexport default getTag;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nexport default Uint8Array;\n","/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\nexport default setCacheAdd;\n","/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\nexport default setCacheHas;\n","import MapCache from './_MapCache.js';\nimport setCacheAdd from './_setCacheAdd.js';\nimport setCacheHas from './_setCacheHas.js';\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\nexport default SetCache;\n","/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\nfunction arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n}\n\nexport default arraySome;\n","/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\nexport default cacheHas;\n","import SetCache from './_SetCache.js';\nimport arraySome from './_arraySome.js';\nimport cacheHas from './_cacheHas.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(array);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n}\n\nexport default equalArrays;\n","/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\nexport default mapToArray;\n","/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\nexport default setToArray;\n","import Symbol from './_Symbol.js';\nimport Uint8Array from './_Uint8Array.js';\nimport eq from './eq.js';\nimport equalArrays from './_equalArrays.js';\nimport mapToArray from './_mapToArray.js';\nimport setToArray from './_setToArray.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n}\n\nexport default equalByTag;\n","import getAllKeys from './_getAllKeys.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n}\n\nexport default equalObjects;\n","import Stack from './_Stack.js';\nimport equalArrays from './_equalArrays.js';\nimport equalByTag from './_equalByTag.js';\nimport equalObjects from './_equalObjects.js';\nimport getTag from './_getTag.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\nexport default baseIsEqualDeep;\n","import baseIsEqualDeep from './_baseIsEqualDeep.js';\nimport isObjectLike from './isObjectLike.js';\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\nexport default baseIsEqual;\n","import root from './_root.js';\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nexport default now;\n","import isObject from './isObject.js';\nimport now from './now.js';\nimport toNumber from './toNumber.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nexport default debounce;\n","import baseIsEqual from './_baseIsEqual.js';\n\n/**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\nfunction isEqual(value, other) {\n return baseIsEqual(value, other);\n}\n\nexport default isEqual;\n","import debounce from './debounce.js';\nimport isObject from './isObject.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\nfunction throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n}\n\nexport default throttle;\n","import { PlayerTypes } from './reducers/player'\nimport { ProgressTypes } from './reducers/progress'\nimport { isEqual } from 'lodash-es'\n\nexport type State = { [key: string]: any }\n\nexport function createStore(reducer: (state: State, action: any) => State, initState: State = {}) {\n let state = initState\n\n const topics = {\n all: []\n } as { [key: string]: Function[] }\n\n function subscribe(type: string, listener: (state: State) => void): void\n function subscribe(listener: (state: State) => void): void\n\n function subscribe(...args: any): void {\n let type = 'all'\n let listener\n if (typeof args[0] === 'string') {\n type = args[0]\n listener = args[1]\n } else {\n listener = args[0]\n }\n if (!topics[type]) {\n topics[type] = []\n }\n topics[type].push(listener)\n }\n\n function dispatch(action?: { type: string; data?: any }) {\n const oldState = state\n state = reducer(state, action)\n\n if (!action) {\n // dispatch all\n if (topics['all']) {\n topics['all'].forEach(listener => listener(state))\n }\n return\n }\n\n const topicName = getTypeInTopics(action.type)\n if (topicName && topics[topicName]) {\n return topics[topicName].forEach(listener => {\n if (!isEqual(state[topicName], oldState[topicName])) {\n listener(state[topicName])\n }\n })\n }\n }\n\n function getState() {\n return state\n }\n\n function getTypeInTopics(type: string) {\n const topics = {\n player: Object.keys(PlayerTypes),\n progress: Object.keys(ProgressTypes)\n } as { [key: string]: string[] }\n\n for (let [key, enums] of Object.entries(topics)) {\n if (enums.includes(type)) {\n return key\n }\n }\n return null\n }\n\n return {\n subscribe,\n dispatch,\n getState\n }\n}\n","import { State } from './create-store'\n\nexport type Action = { type: string; state: State }\nexport type Reducer = (state: State, action?: Action) => State\n\nexport function combineReducers(reducers: { [key: string]: Reducer }) {\n const reducerKeys = Object.keys(reducers)\n return function combination(state: State, action?: Action) {\n const nextState = {} as State\n\n for (let i = 0; i < reducerKeys.length; i++) {\n const key = reducerKeys[i] // reducer name\n\n const reducer = reducers[key]\n\n const previousStateForKey = state[key]\n\n const nextStateForKey = reducer(previousStateForKey, action)\n\n nextState[key] = nextStateForKey\n }\n return nextState\n }\n}\n","import { createStore } from './create-store'\nimport { combineReducers } from './combine-reducers'\n\nimport progressReducer from './reducers/progress'\nimport playerReducer from './reducers/player'\n\nconst reducer = combineReducers({\n player: playerReducer,\n progress: progressReducer\n})\n\nexport { PlayerTypes, PlayerState } from './reducers/player'\nexport { ProgressTypes, ProgressState } from './reducers/progress'\n\nexport const reduxStore = createStore(reducer)\n","import { VNode } from './types'\nimport { nodeStore } from '@WebReplay/utils'\n\nconst getVNodeByEl = (el: Element, isSVG?: boolean): VNode => {\n const tagName = el.tagName.toLocaleLowerCase().trim()\n return {\n id: nodeStore.createNodeId(),\n attrs: getAttr(el as HTMLElement & { checked: boolean }),\n tag: tagName,\n children: [] as VNode[],\n extra: { isSVG: isSVG || tagName === 'svg' }\n }\n}\n\nconst getAttr = (el: HTMLElement & { checked: boolean }) => {\n const resAttr: { [key: string]: string } = {}\n const attrs = el.attributes\n if (el.checked) {\n resAttr.checked = 'true'\n }\n\n if (attrs && attrs.length) {\n return Object.values(attrs).reduce((ret: any, attr) => {\n const [name, value] = extraAttr(attr)\n if (name) {\n ret[name] = value\n }\n return ret\n }, resAttr)\n }\n return resAttr\n}\n\nconst extraAttr = (attr: Attr) => {\n let { name, value } = attr\n if (name === 'href' || name === 'src') {\n if (/^\\/(?!\\/)/.test(value)) {\n const origin = location.origin\n value = origin + value\n } else if (value.startsWith('#/')) {\n return []\n }\n }\n return [name, value]\n}\n\nexport const createElement = (el: Element, inheritSVG?: boolean): VNode | null => {\n if (el.nodeType === Node.TEXT_NODE) {\n return null\n }\n if (el.tagName === 'SCRIPT') {\n return null\n }\n const vNode = getVNodeByEl(el, inheritSVG)\n const { id } = vNode\n nodeStore.addNode(el, id)\n inheritSVG = inheritSVG || vNode.extra.isSVG\n el.childNodes.forEach((node: Element) => {\n if (node.nodeType === Node.ELEMENT_NODE) {\n const child = createElement(node, inheritSVG)\n if (child) {\n vNode.children.push(child)\n }\n } else if (node.nodeType === Node.TEXT_NODE) {\n if (node.nodeValue) {\n const text = trimNodeText(node.nodeValue)\n if (text) {\n vNode.children.push(text)\n }\n }\n }\n })\n return vNode\n}\n\nconst trimNodeText = (nodeValue: string) => {\n return nodeValue.replace(/\\r\\n/g, '').replace(/\\n/g, '')\n}\n\nconst convertHTML = (doc: Document) => {\n const { head, body } = doc\n return {\n id: nodeStore.createNodeId(),\n tag: 'html',\n attrs: {},\n children: [createElement(head), createElement(body)],\n extra: { isSVG: false }\n }\n}\n\nexport const virtualDOM = {\n createElement,\n convertHTML\n}\n","export function setAttribute(node: HTMLElement, name: string, value: string | boolean): void {\n if (name === 'style') {\n if (value) {\n if (typeof value === 'string') {\n node.style.cssText = value\n } else if (value !== null && typeof value === 'object') {\n for (const [k, v] of Object.entries(value)) {\n node.style[k as any] = v as any\n }\n }\n }\n return\n }\n\n if (/^on\\w+$/.test(name)) {\n return\n }\n\n return node.setAttribute(name, value === true ? '' : String(value))\n}\n","import { setAttribute } from './dom'\nimport { nodeStore } from '@WebReplay/utils'\nimport { VNode } from './types'\n\nexport function convertVNode(vNode: VNode | string | null, node: Element | null): Element | null {\n if (vNode === null || vNode === undefined) {\n return null\n }\n if (typeof vNode === 'string') {\n return createText(vNode, node)\n }\n const output = createNode(vNode)\n if ((vNode.children && vNode.children.length) || (output.childNodes && output.childNodes.length)) {\n travel(vNode, output)\n }\n createAttributes(vNode, output)\n return output\n}\n\nfunction travel(vNode: VNode, node: Element): void {\n const nodeChildren: Element[] = []\n const vNodeChildren = vNode.children.slice()\n vNodeChildren.forEach(vChild => {\n let child = nodeChildren.pop() as Element | null\n child = convertVNode(vChild, child)\n if (child) {\n node.appendChild(child)\n }\n })\n}\n\nfunction createAttributes(vNode: VNode, node: Element): void {\n const { attrs } = vNode\n for (const [name, val] of Object.entries(attrs)) {\n setAttribute(node as HTMLElement, name, val)\n }\n}\n\nfunction createNode(vNode: VNode): Element {\n const { id, extra } = vNode\n const { isSVG } = extra\n let output: Element\n const tagName = transformTagName(vNode.tag)\n if (isSVG) {\n output = document.createElementNS('http://www.w3.org/2000/svg', tagName)\n } else {\n output = document.createElement(tagName)\n }\n\n nodeStore.updateNode(id, output)\n return output\n}\n\nfunction transformTagName(tag: string) {\n const tagMap: { [key: string]: string } = {\n script: 'noscript'\n }\n const tagName = tagMap[tag] || tag\n return tagName\n}\n\nfunction createText(textNode: string, node: Element | null | null): Element | null {\n let output: Element | Node\n output = document.createTextNode(textNode)\n return output as Element\n}\n","import { VNode } from '@WebReplay/virtual-dom'\n\nexport enum SnapshotType {\n 'WINDOW' = 'WINDOW',\n 'DOM' = 'DOM',\n 'MOUSE' = 'MOUSE',\n 'DOM_UPDATE' = 'DOM_UPDATE',\n 'FORM_EL_UPDATE' = 'FORM_EL_UPDATE'\n}\n\nexport enum FormElementEvent {\n 'ATTR' = 'ATTR',\n 'INPUT' = 'INPUT',\n 'CHANGE' = 'CHANGE',\n 'FOCUS' = 'FOCUS',\n 'BLUR' = 'BLUR'\n}\nexport enum MouseEventType {\n 'MOVE' = 'MOVE',\n 'CLICK' = 'click'\n}\n\nexport interface WindowSnapshot {\n type: SnapshotType.WINDOW\n data: WindowSnapshotData\n time: string\n}\nexport interface WindowSnapshotData {\n width: number\n height: number\n href: string\n}\n\nexport interface DOMSnapshot {\n type: SnapshotType.DOM\n data: DOMSnapshotData\n time: string\n}\n\nexport interface DOMSnapshotData {\n vNode: VNode\n}\nexport interface MouseSnapshot {\n type: SnapshotType.MOUSE\n data: MouseSnapshotData\n time: string\n}\nexport interface MouseSnapshotData {\n type: MouseEventType\n x: number\n y: number\n id?: number\n}\nexport interface DOMObserve {\n type: SnapshotType.DOM_UPDATE\n data: DOMObserveData\n time: string\n}\nexport interface DOMObserveData {\n mutations: DOMObserveMutations[]\n}\nexport interface DOMObserveMutations {\n mType: 'attributes' | 'characterData' | 'childList'\n data: ChildListUpdateData | CharacterDataUpdateData | AttributesUpdateData\n}\n\nexport interface AttributesUpdateData {\n nodeId: number\n value: string\n attr: string\n}\n\nexport interface CharacterDataUpdateData {\n parentId: number\n value: string\n}\n\nexport interface ChildListUpdateData {\n type: ChildListUpdateDataType\n parentId: number\n nodeId: number\n pos: number\n value?: string\n vNode: VNode\n}\nexport enum ChildListUpdateDataType {\n 'ADD' = 'ADD',\n 'DELETE' = 'DELETE',\n 'MOVE' = 'MOVE'\n}\n\nexport interface FormElementObserve {\n type: SnapshotType.FORM_EL_UPDATE\n data: FormElementObserveData\n time: string\n}\n\nexport interface FormElementObserveData {\n type: FormElementEvent\n id: number\n key?: string\n value?: string\n}\n\nexport type SnapshotEvent = (e: T) => void\n\nexport type SnapshotData = FormElementObserve | DOMObserve | MouseSnapshot | DOMSnapshot | WindowSnapshot\n","import { virtualDOM, createElement, convertVNode } from '@WebReplay/virtual-dom'\nimport {\n SnapshotType,\n WindowSnapshot,\n DOMSnapshot,\n SnapshotEvent,\n MouseSnapshot,\n DOMObserve,\n FormElementObserve,\n FormElementEvent,\n MouseEventType,\n AttributesUpdateData,\n CharacterDataUpdateData,\n DOMObserveMutations,\n ChildListUpdateData,\n ChildListUpdateDataType\n} from './types'\nimport { throttle } from 'lodash-es'\nimport { nodeStore, listenerStore } from '@WebReplay/utils'\nimport { VNode } from '@WebReplay/virtual-dom'\n\nfunction windowSnapshot(emit: SnapshotEvent) {\n const href = window.location.href\n var width = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth\n var height = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight\n\n emit({\n type: SnapshotType.WINDOW,\n data: {\n width,\n height,\n href\n },\n time: Date.now().toString()\n })\n}\n\nfunction DOMSnapshot(emit: SnapshotEvent) {\n emit({\n type: SnapshotType.DOM,\n data: {\n vNode: virtualDOM.convertHTML(document) as VNode\n },\n time: Date.now().toString()\n })\n}\n\nfunction mouseObserve(emit: SnapshotEvent) {\n function mouseMove() {\n const evt = (e: MouseEvent) => {\n emit({\n type: SnapshotType.MOUSE,\n data: {\n type: MouseEventType.MOVE,\n x: e.x,\n y: e.y\n },\n time: Date.now().toString()\n })\n }\n const name = 'mousemove'\n const listenerHandle = throttle(evt, 100, {\n trailing: true\n })\n\n document.addEventListener(name, listenerHandle)\n\n listenerStore.add(() => {\n document.removeEventListener(name, listenerHandle)\n })\n }\n\n function mouseClick() {\n const evt = (e: MouseEvent) => {\n emit({\n type: SnapshotType.MOUSE,\n data: {\n type: MouseEventType.CLICK,\n id: nodeStore.getNodeId(e.target as Element),\n x: e.x,\n y: e.y\n },\n time: Date.now().toString()\n })\n }\n\n const name = 'click'\n const listenerHandle = throttle(evt, 250)\n listenerStore.add(() => {\n document.removeEventListener(name, listenerHandle)\n })\n document.addEventListener(name, listenerHandle)\n }\n\n mouseMove()\n mouseClick()\n}\n\nfunction DOMObserve(emit: SnapshotEvent) {\n const mutationCallback: MutationCallback = (records: MutationRecord[]) => {\n const mutations: DOMObserveMutations[] = []\n function addMutation(mType: 'attributes' | 'characterData' | 'childList') {\n return function(data: any) {\n mutations.push({\n mType,\n data\n })\n }\n }\n records.forEach((record: MutationRecord) => {\n const { target, addedNodes, removedNodes, type, nextSibling, attributeName } = record\n\n const joinData = addMutation(type)\n\n switch (type) {\n case 'attributes':\n if (attributeName) {\n const curAttrValue = (target as Element).getAttribute(attributeName)\n joinData({\n nodeId: nodeStore.getNodeId(target),\n value: curAttrValue,\n attr: attributeName\n } as AttributesUpdateData)\n }\n break\n case 'characterData':\n const parent = target.parentNode!\n joinData({\n parentId: nodeStore.getNodeId(parent),\n value: target.nodeValue,\n pos: parent.childNodes.length > 0 ? [...parent.childNodes].indexOf(target as ChildNode) : null\n } as CharacterDataUpdateData)\n break\n case 'childList':\n if (addedNodes.length) {\n addedNodes.forEach(node => {\n let text\n let vNode: any\n if (node.nodeType === Node.TEXT_NODE) {\n text = node.nodeValue\n const pos = Array.from(node.parentNode!.childNodes).indexOf(node as ChildNode)\n joinData({\n type: ChildListUpdateDataType.ADD,\n parentId: nodeStore.getNodeId(node.parentNode!),\n value: node.textContent,\n pos\n } as ChildListUpdateData)\n } else {\n // reset element for remove reference\n vNode = createElement(node as HTMLElement)\n // convertVNode(vNode, null)\n const parent = node.parentNode!\n joinData({\n type: ChildListUpdateDataType.ADD,\n parentId: nodeStore.getNodeId(target),\n vNode,\n pos:\n parent.childNodes.length > 0\n ? [...parent.childNodes].indexOf(node as ChildNode)\n : null\n } as ChildListUpdateData)\n }\n })\n }\n if (removedNodes.length) {\n removedNodes.forEach(node => {\n joinData({\n type: ChildListUpdateDataType.DELETE,\n parentId: nodeStore.getNodeId(target) as number,\n nodeId: nodeStore.getNodeId(node) || null\n } as ChildListUpdateData)\n })\n }\n break\n default:\n break\n }\n })\n\n if (mutations.length) {\n emit({\n type: SnapshotType.DOM_UPDATE,\n data: {\n mutations\n },\n time: Date.now().toString()\n })\n }\n }\n\n const observer = new MutationObserver(mutationCallback)\n observer.observe(document.body, {\n attributeOldValue: true,\n attributes: true,\n characterData: true,\n characterDataOldValue: true,\n childList: true,\n subtree: true\n })\n\n listenerStore.add(() => {\n observer.disconnect()\n })\n}\n\nfunction formElementObserve(emit: SnapshotEvent) {\n listenInputs(emit)\n kidnapInputs(emit) // for sys write in input\n}\n\nfunction listenInputs(emit: SnapshotEvent) {\n const eventTypes = ['input', 'change', 'focus', 'blur']\n\n eventTypes\n .map(type => (fn: (e: InputEvent) => void) => {\n document.addEventListener(type, fn, { once: false, passive: true, capture: true })\n })\n .forEach(handle => handle(handleFn))\n\n listenerStore.add(() => {\n eventTypes.forEach(type => {\n document.removeEventListener(type, handleFn, true)\n })\n })\n\n function handleFn(e: InputEvent) {\n const eventType = e.type\n\n switch (eventType) {\n case 'input':\n case 'change':\n emit({\n type: SnapshotType.FORM_EL_UPDATE,\n data: {\n type: FormElementEvent.INPUT,\n id: nodeStore.getNodeId(e.target as Node)!,\n value: (e.target as HTMLInputElement).value\n },\n time: Date.now().toString()\n })\n break\n case 'focus':\n emit({\n type: SnapshotType.FORM_EL_UPDATE,\n data: {\n type: FormElementEvent.FOCUS,\n id: nodeStore.getNodeId(e.target as Node)!\n },\n time: Date.now().toString()\n })\n break\n case 'blur':\n emit({\n type: SnapshotType.FORM_EL_UPDATE,\n data: {\n type: FormElementEvent.BLUR,\n id: nodeStore.getNodeId(e.target as Node)!\n },\n time: Date.now().toString()\n })\n break\n default:\n break\n }\n }\n}\n\nfunction kidnapInputs(emit: SnapshotEvent) {\n const elementList: [HTMLElement, string][] = [\n [HTMLInputElement.prototype, 'value'],\n [HTMLInputElement.prototype, 'checked'],\n [HTMLSelectElement.prototype, 'value'],\n [HTMLTextAreaElement.prototype, 'value']\n ]\n\n const handles = elementList.map(item => {\n return () => {\n const [target, key] = item\n const original = Object.getOwnPropertyDescriptor(target, key)\n Object.defineProperty(target, key, {\n set: function(value: string | boolean) {\n setTimeout(() => {\n handleEvent.call(this, key, value)\n })\n if (original && original.set) {\n original.set.call(this, value)\n }\n }\n })\n\n listenerStore.add(() => {\n if (original) {\n Object.defineProperty(target, key, original)\n }\n })\n }\n })\n\n handles.concat([]).forEach(handle => handle())\n\n function handleEvent(this: HTMLElement, key: string, value: string) {\n emit({\n type: SnapshotType.FORM_EL_UPDATE,\n data: {\n type: FormElementEvent.ATTR,\n id: nodeStore.getNodeId(this)!,\n key,\n value\n },\n time: Date.now().toString()\n })\n }\n}\n\nexport const snapshots = {\n windowSnapshot,\n DOMSnapshot,\n mouseObserve,\n DOMObserve,\n formElementObserve\n}\n","import { snapshots, SnapshotData } from '@WebReplay/snapshot'\nimport { RecordOptions } from './types'\nimport { listenerStore } from '@WebReplay/utils'\n\nconst ctrl = {\n uninstall: () => {\n Array.from(listenerStore.values()).forEach(un => un())\n }\n}\n\nexport const record = ({ emitter }: RecordOptions = {}) => {\n recordAll(emitter)\n return ctrl\n}\n\nfunction recordAll(emitter?: (e: SnapshotData) => void) {\n const recordTasks: Function[] = [...Object.values(snapshots)]\n\n recordTasks.forEach(task => {\n task(emitter)\n })\n}\n","import { VNode, convertVNode } from '@WebReplay/virtual-dom'\nimport HTML from './ui.html'\nimport STYLE from './ui.css'\nimport FIXED from './fixed.css'\n\nexport class Container {\n container: HTMLElement\n sandBox: HTMLIFrameElement\n\n vNode: VNode\n width: number\n height: number\n\n constructor(params: { vNode: VNode; width: number; height: number }) {\n this.vNode = params.vNode\n this.width = params.width\n this.height = params.height\n this.init()\n }\n\n init() {\n this.initTemplate()\n this.initSandbox()\n }\n\n initSandbox() {\n this.sandBox = this.container.querySelector('#wr-sandbox') as HTMLIFrameElement\n this.sandBox.style.width = this.width + 'px'\n this.sandBox.style.height = this.height + 'px'\n const sandBoxDoc = (this.sandBox.contentWindow as Window).document\n\n const child = convertVNode(this.vNode, null)\n if (child) {\n const head = child.firstChild\n if (head) {\n head.appendChild(this.createStyle(FIXED))\n }\n sandBoxDoc.replaceChild(child, sandBoxDoc.documentElement)\n }\n }\n\n initTemplate() {\n document.head.appendChild(this.createStyle(STYLE))\n document.body.appendChild(this.createContainer())\n }\n\n createContainer() {\n const parser = new DOMParser()\n const element = parser.parseFromString(HTML, 'text/html').body.firstChild as HTMLElement\n element.style.width = this.width + 'px'\n element.style.height = this.height + 'px'\n element.style.position = 'relative'\n element.style.margin = '0 auto'\n return (this.container = element)\n }\n\n createStyle(s: string) {\n const parser = new DOMParser()\n const style = parser.parseFromString(``, 'text/html').head.firstChild as HTMLElement\n return style\n }\n}\n","// import { Redux } from '@WebReplay/utils'\n\nimport { reduxStore } from '@WebReplay/utils'\nimport { PlayerTypes } from '@WebReplay/utils'\n\nexport class KeyboardComponent {\n container: HTMLElement\n controller: HTMLElement\n\n pauseBtn: HTMLElement\n playBtn: HTMLElement\n\n speed: number\n\n constructor(container: HTMLElement) {\n this.container = container\n this.init()\n }\n\n init() {\n this.controller = this.container.querySelector('.wr-keyboard') as HTMLElement\n this.pauseBtn = this.controller.querySelector('.pause') as HTMLButtonElement\n this.playBtn = this.controller.querySelector('.play') as HTMLButtonElement\n this.controller.addEventListener('click', (e: MouseEvent & { target: HTMLElement & { type: string } }) => {\n if (e.target && e.target.type === 'button') {\n const speed = Number((e.target as HTMLElement).getAttribute('speed'))\n this.speed = speed\n reduxStore.dispatch({\n type: PlayerTypes.SPEED,\n data: {\n speed\n }\n })\n }\n })\n\n reduxStore.subscribe('player', state => {\n this.paly(state.speed)\n this.setSpeed(state.speed)\n })\n }\n\n paly(speed: number) {\n if (speed !== 0) {\n this.pauseBtn.removeAttribute('disabled')\n this.playBtn.setAttribute('disabled', '')\n } else {\n this.playBtn.removeAttribute('disabled')\n this.pauseBtn.setAttribute('disabled', '')\n }\n }\n\n setSpeed(speed: number) {\n const speedNodes = this.container.querySelectorAll('.speed') as NodeListOf\n ;[...speedNodes].forEach(node => {\n node.removeAttribute('disabled')\n })\n\n const index = speed === 1 ? 0 : speed === 8 ? 1 : speed === 16 ? 2 : -1\n if (index > -1) {\n speedNodes[index].setAttribute('disabled', '')\n }\n }\n}\n","import {\n SnapshotData,\n MouseSnapshotData,\n DOMObserveData,\n FormElementObserveData,\n SnapshotType,\n MouseEventType,\n DOMObserveMutations,\n ChildListUpdateData,\n CharacterDataUpdateData,\n AttributesUpdateData,\n FormElementEvent,\n ChildListUpdateDataType\n} from '@WebReplay/snapshot'\nimport { PlayerComponent } from './player'\nimport { nodeStore } from '@WebReplay/utils'\nimport { convertVNode } from '@WebReplay/virtual-dom'\n\nexport function updateDom(this: PlayerComponent, snapshot: SnapshotData) {\n const { type, data } = snapshot\n switch (type) {\n case SnapshotType.MOUSE:\n const { x, y, type } = data as MouseSnapshotData\n if (type === MouseEventType.MOVE) {\n this.pointer.move(x, y)\n } else if (type === MouseEventType.CLICK) {\n this.pointer.click(x, y)\n }\n break\n case SnapshotType.DOM_UPDATE:\n const { mutations } = data as DOMObserveData\n mutations.forEach((mutate: DOMObserveMutations) => {\n const { mType, data } = mutate\n const { value, attr, type, parentId, pos, nodeId, vNode } = data as ChildListUpdateData &\n (CharacterDataUpdateData & AttributesUpdateData)\n switch (mType) {\n case 'attributes':\n const targetEl = nodeStore.getNode(nodeId) as HTMLElement\n targetEl.setAttribute(attr, value)\n break\n case 'characterData':\n const parentEl = nodeStore.getNode(parentId) as HTMLElement\n if (pos !== null) {\n const target = parentEl.childNodes[pos as number]\n parentEl.replaceChild(document.createTextNode(value), target)\n } else {\n parentEl.innerText = value\n }\n break\n case 'childList':\n const parentNode = nodeStore.getNode(parentId) as HTMLElement\n const targetNode = (nodeStore.getNode(nodeId) as Element) || convertVNode(vNode, null)\n if (type === ChildListUpdateDataType.DELETE) {\n if (targetNode) {\n parentNode!.removeChild(targetNode)\n }\n } else if (ChildListUpdateDataType.ADD) {\n if (value) {\n // it's a TextNode\n const textNode = document.createTextNode(value)\n if (parentNode.childNodes.length) {\n parentNode.replaceChild(textNode, parentNode.childNodes[pos])\n } else {\n parentNode!.appendChild(textNode)\n }\n } else {\n // it's a ElementNode\n parentNode.insertBefore(targetNode, parentNode.childNodes[pos])\n }\n }\n break\n }\n })\n\n break\n case SnapshotType.FORM_EL_UPDATE:\n const { id, key, type: formType, value } = data as FormElementObserveData\n const node = nodeStore.getNode(id) as HTMLFormElement\n if (formType === FormElementEvent.INPUT) {\n node.value = value\n } else if (formType === FormElementEvent.FOCUS) {\n node.focus()\n } else if (formType === FormElementEvent.BLUR) {\n node.blur()\n } else if (formType === FormElementEvent.ATTR) {\n node[key!] = value\n }\n break\n }\n}\n","import { PointerComponent } from './pointer'\nimport { SnapshotData } from '@WebReplay/snapshot'\nimport { updateDom } from './dom'\nimport { reduxStore, PlayerTypes, ProgressState } from '@WebReplay/utils'\nimport { ProgressComponent } from './progress'\n\nexport class PlayerComponent {\n data: SnapshotData[]\n speed = 0\n index = 0\n frameIndex = 0\n lastPercentage = 0\n frames: number[]\n requestID: number\n startTime: number\n pointer: PointerComponent\n progress: ProgressComponent\n progressState: ProgressState\n\n constructor(data: SnapshotData[], pointer: PointerComponent, progress: ProgressComponent) {\n this.data = data\n this.pointer = pointer\n this.progress = progress\n\n reduxStore.subscribe('player', state => {\n this.progressState = reduxStore.getState()['progress']\n const speed = state.speed\n this.speed = speed\n if (speed > 0) {\n this.play(speed)\n } else {\n this.pause()\n }\n this.frames = this.getAccuratelyFrame()\n })\n }\n\n play(speed: number) {\n cancelAnimationFrame(this.requestID)\n this.requestID = requestAnimationFrame(loop.bind(this))\n\n const initTime = Date.now()\n this.startTime = 0\n\n function loop(this: PlayerComponent) {\n const timeStamp = Date.now() - initTime\n if (this.frameIndex > 0 && !this.frames[this.frameIndex + 1]) {\n this.stop()\n return\n }\n if (!this.startTime) {\n this.startTime = Number(this.frames[this.frameIndex])\n }\n\n const currTime = this.startTime + timeStamp * speed\n const nextTime = Number(this.frames[this.frameIndex + 1])\n\n if (currTime >= nextTime) {\n this.frameIndex++\n\n const progress = (this.frameIndex / this.frames.length) * 100\n\n if (progress - this.lastPercentage > this.getPercentInterval()) {\n this.progress.updateProgress(progress)\n this.lastPercentage = progress\n }\n\n if (this.data[this.index] && currTime > +this.data[this.index].time) {\n this.execFrame.call(this, this.data[this.index])\n this.index++\n }\n }\n\n this.requestID = requestAnimationFrame(loop.bind(this))\n }\n }\n\n pause() {\n cancelAnimationFrame(this.requestID)\n reduxStore.dispatch({\n type: PlayerTypes.SPEED,\n data: {\n speed: 0\n }\n })\n }\n\n stop() {\n this.index = 0\n this.pause()\n }\n\n execFrame(this: PlayerComponent, snapshot: SnapshotData) {\n updateDom.call(this, snapshot)\n }\n\n getPercentInterval() {\n const k = 0.08\n const b = 0.2\n return this.speed * k + b\n }\n\n getAccuratelyFrame(interval = 50) {\n this.progressState = reduxStore.getState()['progress']\n const { startTime, endTime } = this.progressState\n\n const delay = 500\n const s = +startTime\n const e = +endTime + delay\n\n const result: number[] = []\n\n for (let i = s; i < e; i += interval) {\n result.push(i)\n }\n result.push(e)\n return result\n }\n}\n","export class PointerComponent {\n x = 0\n y = 0\n\n pointer: HTMLElement\n constructor() {\n this.initPointer()\n }\n\n initPointer() {\n this.pointer = document.getElementById('wr-pointer') as HTMLElement\n this.move(0, 0)\n }\n\n move(x: number, y: number) {\n this.x = x\n this.y = y\n this.pointer.style.left = this.x + 'px'\n this.pointer.style.top = this.y + 'px'\n }\n\n click(x: number, y: number) {\n this.move(x, y)\n this.pointer.setAttribute('active', '')\n setTimeout(() => {\n this.pointer.removeAttribute('active')\n }, 20)\n }\n}\n","import { ProgressState } from '@WebReplay/utils'\n\nexport class ProgressComponent {\n progress: HTMLElement\n thumb: HTMLElement\n slider: HTMLElement\n speed: number\n rafId: number\n\n progressState: ProgressState\n\n totalDistance = 0\n constructor(c: HTMLElement) {\n this.progress = c.querySelector('.wr-progress')! as HTMLElement\n this.thumb = this.progress.querySelector('.wr-thumb') as HTMLElement\n this.slider = this.progress.querySelector('.wr-slider-bar') as HTMLElement\n }\n\n updateProgress(percentage: number) {\n this.thumb.style.left = percentage + '%'\n }\n}\n","import { KeyboardComponent } from './keyboard'\nimport { PlayerComponent } from './player'\nimport { PointerComponent } from './pointer'\nimport { SnapshotData } from '@WebReplay/snapshot'\nimport { ProgressComponent } from './progress'\n\nexport class Panel {\n container: HTMLElement\n data: SnapshotData[]\n\n keyboard: KeyboardComponent\n progress: ProgressComponent\n pointer: PointerComponent\n player: PlayerComponent\n\n constructor(container: HTMLElement, data: SnapshotData[]) {\n this.container = container\n this.data = data\n this.initComponent()\n }\n\n initComponent() {\n this.keyboard = new KeyboardComponent(this.container)\n this.progress = new ProgressComponent(this.container)\n this.pointer = new PointerComponent()\n this.player = new PlayerComponent(this.data, this.pointer, this.progress)\n }\n}\n","import { DBPromise, ProgressTypes, PlayerTypes, reduxStore } from '@WebReplay/utils'\nimport { Container } from './container'\nimport { Panel } from './panel'\n\nexport async function replay() {\n const indexDB = await DBPromise\n const { width, height, vNode, data } = await indexDB.getData()\n\n const c = new Container({ vNode, width, height })\n new Panel(c.container, data)\n\n reduxStore.dispatch({\n type: ProgressTypes.INFO,\n data: {\n frame: 0,\n curTime: data[0].time,\n startTime: data[0].time,\n endTime: data[data.length - 1].time,\n length: data.length\n }\n })\n\n reduxStore.dispatch({\n type: PlayerTypes.SPEED,\n data: { speed: 1 }\n })\n}\n"],"names":["initState","objectProto","nativeObjectToString","symToStringTag","funcProto","funcToString","hasOwnProperty","WeakMap","MAX_SAFE_INTEGER","argsTag","funcTag","freeExports","freeModule","moduleExports","HASH_UNDEFINED","Map","propertyIsEnumerable","Promise","Set","mapTag","objectTag","setTag","weakMapTag","dataViewTag","COMPARE_PARTIAL_FLAG","COMPARE_UNORDERED_FLAG","boolTag","dateTag","errorTag","numberTag","regexpTag","stringTag","symbolTag","arrayBufferTag","arrayTag","getTag","FUNC_ERROR_TEXT"],"mappings":"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"} \ No newline at end of file diff --git a/packages/player/src/container.ts b/packages/player/src/container.ts index b526ec78..f90cb615 100644 --- a/packages/player/src/container.ts +++ b/packages/player/src/container.ts @@ -1,6 +1,7 @@ import { VNode, convertVNode } from '@WebReplay/virtual-dom' import HTML from './ui.html' import STYLE from './ui.css' +import FIXED from './fixed.css' export class Container { container: HTMLElement @@ -27,11 +28,19 @@ export class Container { this.sandBox.style.width = this.width + 'px' this.sandBox.style.height = this.height + 'px' const sandBoxDoc = (this.sandBox.contentWindow as Window).document - sandBoxDoc.replaceChild(convertVNode(this.vNode, null)!, sandBoxDoc.documentElement) + + const child = convertVNode(this.vNode, null) + if (child) { + const head = child.firstChild + if (head) { + head.appendChild(this.createStyle(FIXED)) + } + sandBoxDoc.replaceChild(child, sandBoxDoc.documentElement) + } } initTemplate() { - document.head.appendChild(this.createStyle()) + document.head.appendChild(this.createStyle(STYLE)) document.body.appendChild(this.createContainer()) } @@ -45,9 +54,9 @@ export class Container { return (this.container = element) } - createStyle() { + createStyle(s: string) { const parser = new DOMParser() - const style = parser.parseFromString(``, 'text/html').head.firstChild as HTMLElement + const style = parser.parseFromString(``, 'text/html').head.firstChild as HTMLElement return style } } diff --git a/packages/player/src/fixed.css b/packages/player/src/fixed.css new file mode 100644 index 00000000..4d84dbd6 --- /dev/null +++ b/packages/player/src/fixed.css @@ -0,0 +1,3 @@ +input[type="checkbox"] { + pointer-events: none; +} diff --git a/packages/player/src/ui.css b/packages/player/src/ui.css index 5f9a4bc7..000c8475 100644 --- a/packages/player/src/ui.css +++ b/packages/player/src/ui.css @@ -10,7 +10,6 @@ body { #wr-player { position: relative; - pointer-events: none; } #wr-pointer { diff --git a/packages/virtual-dom/src/serialize.ts b/packages/virtual-dom/src/serialize.ts index 7457b628..d58db9d3 100644 --- a/packages/virtual-dom/src/serialize.ts +++ b/packages/virtual-dom/src/serialize.ts @@ -15,32 +15,34 @@ const getVNodeByEl = (el: Element, isSVG?: boolean): VNode => { const getAttr = (el: HTMLElement & { checked: boolean }) => { const resAttr: { [key: string]: string } = {} const attrs = el.attributes - if (el.checked) { resAttr.checked = 'true' } if (attrs && attrs.length) { return Object.values(attrs).reduce((ret: any, attr) => { - // const [name, value] = extraAttr(attr) - const { name, value } = attr - ret[name] = value + const [name, value] = extraAttr(attr) + if (name) { + ret[name] = value + } return ret }, resAttr) } return resAttr } -// const extraAttr = (attr: Attr) => { -// let { name, value } = attr -// if (name === 'href' || name === 'src') { -// if (/^\/(?!\/)/.test(value)) { -// const host = `https://github.com` -// value = host + value -// } -// } -// return [name, value] -// } +const extraAttr = (attr: Attr) => { + let { name, value } = attr + if (name === 'href' || name === 'src') { + if (/^\/(?!\/)/.test(value)) { + const origin = location.origin + value = origin + value + } else if (value.startsWith('#/')) { + return [] + } + } + return [name, value] +} export const createElement = (el: Element, inheritSVG?: boolean): VNode | null => { if (el.nodeType === Node.TEXT_NODE) {